Table des matières
Je découvre l'ESP32, plutôt pas mal pour de la domotique!
Je crée une bibliothèque pour gérer et faciliter la connexion de l’ESP au wifi.
Elle permet la création d’un index et aussi le stockage de données dans la mémoire flash.
Le but final étant de contrôler tout appareil (ampoule, moteur…) à distance, et d’ajouter ce module à mon serveur domotique principal. (Pour moi, Jeedom)
Versions: Quoi de neuf?
06/11/2023
- Mise à jour logicielle distante possible
- Cryptage des données sensibles stockées en mémoire flash. (Un re paramétrage des réseau est donc nécessaire)
- Je rends obsolète: IndexResetEvent. Le reset se fait maintenant automatiquement.
- Révision et diminution de la taille des variables.
- Ajout de:
- ResetButton(int PIN_Button, int PIN_Led)
- IndexSetEvent(int ID)
- IndexSetListByOption
22/09/2023
- Correction d’un beug lors de la perte de connexion, et accélération du processus.
- La bibliothèque est maintenant compatible avec le plugin Jeedom du même nom. Voir les fonctions.
- Il est possible d’ajouter des évènements uniquement accessibles par des requêtes HTTP.
- Il est possible d’ajouter des champs de saisie à l’index
- Possibilité d’ajouter un simple texte à l’index.
- Possibilité d’ajouter une bulle d’information cliquable avec retour d’évènement, à l’index.
- Ajout des fonctions IndexGetInfo et IndexGetToogle pour retourner l’état de l’information et l’état du bouton basculant.
- Ajout des fonctions IndexSetColor et IndexSetList, pour forcer le passage de la couleur ou de la liste à une valeur précise.
- Amélioration et accélération de la gestion de la mémoire flash de l’ESP, et ajout de nouvelles fonctions de gestion de la mémoire.
- Possibilité de changer le nom d’utilisateur demandé lors de la connexion à l’index.
- Possibilité de récupérer la clé et l’adresse IP du module.
- Ajout de nouvelles fonctions HTTP.
26/06/2023
- Il est possible de modifier les couleurs de l’index et des menus.
- Possibilité de créer des tuiles sur l’index.
- Possibilité de créer des conteneurs sur l’index.
- Possibilité de créer des tableaux sur l’index.
- La création de listes sur l’index est maintenant possible.
14/10/2022
– Création de la bibliothèque
Explications
eeBud Server Manager nécessite les bibliothèques suivantes:
Vous devez donc les télécharger et les décompresser dans le dossier “libraries” Arduino ainsi donc que eeBud server manager.
eeBud Server Manager vous permettra de créer simplement un portail web pour gérer vos actions sur l’ESP. Il vous permettra de sauvegarder des données dans la mémoire flash SPIFFS.
La bibliothèque gèrera la de connexion wifi de l’esp32 (Point d’accès, connexion au réseau local, perte de connexion…).
Lors du premier démarrage, il créera son point d’accès wifi et lorsque connecté, il vous proposera de paramétrer l’ESP pour une connexion à votre réseau local.
Il sera également possible de piloter les sorties de l’ESP via le point d’accès.
Fonctions principales
void SetUser(Nom")
Par défaut le nom d’utilisateur est “admin”, mais celui-ci peut être changé via cette fonction.
void eeBudServerManager.Init()
Doit être placé dans le setup.
Permet l’initialisation de tout le processus:
- La création de la base des fichiers dans la mémoire flash (SPIFFS) lors de la première mise en route
- Le création du point d’accès réseau pour le paramétrage wifi
- De la connexion wifi à vos réseaux
int eeBudServerManager.IndexAddButton("Nom")
Doit être placé dans le setup.
Permet l’ajout d’un bouton sur l’index du serveur (la page d’accueil).
L’ID du bouton (int) sera la valeur qui sera retournée. Cet ID servira par exemple à l’allumage d’une lampe.
int* eeBudServerManager.IndexAddToogle("Nom", "Valeur 0", "Valeur 1", "Valeur par défaut")
Doit être placé dans le setup.
Permet l’ajout d’un bouton basculant sur l’index.
Deux ID pourront alors être retournées: int[0] et int[1].
int eeBudServerManager.IndexAddInfo("Nom", "Unité", "Taille de la police") //en pixels ne pas mettre px
Doit être placé dans le setup.
Permet l’ajout d’un texte sur l’index du serveur.
L’ID (int) devra être utilisé pour le renvoi de l’information au serveur (Par exemple pour le renvoi d’une température).
void eeBudServerManager.IndexAddTitle("Nom", "Taille de la police") //en pixels ne pas mettre px
Doit être placé dans le setup.
Permet l’ajout d’un Titre sur l’index du serveur.
int eeBudServerManager.IndexAddColor("Nom", Defaut_R, Defaut_G, Defaut_B)
Doit être placé dans le setup.
Permet l’ajout d’une couleur paramétrable sur l’index.
L’ID (int) devra être utilisé pour récupérer les valeurs de R, G et B.
void IndexSetColor(int ID, int R, int G, int B)
Attribue une couleur à la couleur paramétrée ci-dessus.
int eeBudServerManager.IndexAddRange("Nom", Min, Max, Defaut)
Doit être placé dans le setup.
Permet l’ajout d’un curseur de nombres entiers.
L’ID (int) devra être utilisé pour récupérer la valeur du curseur.
int eeBudServerManager.IndexAddList("Nom de la liste", "Nom de l'item")
Doit être placé dans le setup.
Permet l’ajout d’une liste sur l’index.
Ex:
//SETUP
int Premier_Element = Serveur.IndexAddList("Liste de démonstration", "Premier élément");
int Deuxieme_Element = Serveur.IndexAddList("Liste de démonstration", "Deuxième élément");
int Troisieme_Element = Serveur.IndexAddList("Liste de démonstration", "Troisieme élément");
//LOOP
if (Event == Premier_Element) //Action lors de la sélection du premier élément
else if (Event == Deuxieme_Element) //Action lors de la sélection du second élément
else if (Event == Troisieme_Element) //Action lors de la sélection du troisième élément
void IndexSetList(int ID)
Attribue une valeur à la liste paramétrée ci-dessus.
void eeBudServerManager.IndexAddHTML("Texte HTML")
Doit être placé dans le setup.
Permet l’ajout d’un code html sur l’index.
void IndexDarkColor(String HTML_Color);
void IndexLightColor(String HTML_Color);
void IndexActiveColor(String HTML_Color);
void IndexTextColor(String HTML_Color);
Doit être placé dans le setup.
Permet la modification des couleurs de l’index.
void eeBudServerManager.IndexBackgroundStart()
Doit être placé dans le setup.
Annonce le début de l’ajout d’un fond sur l’index.
void eeBudServerManager.IndexBackgroundFinish()
Doit être placé dans le setup.
Annonce la fin de l’ajout d’un fond sur l’index.
int eeBudServerManager.IndexTileStart(Largeur, "Couleur html")
//Contenu de la tuile (Boutons, boutons basculants ou autres informations)
void IndexTileFinish();
Doit être placé dans le setup.
Permet l’ajout d’une tuile de couleur pleine sur l’index.
int eeBudServerManager.IndexTileWhiteStart(Largeur, "Couleur de la bordure html")
//Contenu de la tuile (Boutons, boutons basculants ou autres informations)
void IndexTileFinish();
Doit être placé dans le setup.
Permet l’ajout d’une tuile blanche avec bordure sur l’index.
void eeBudServerManager.IndexAddSeg()
Ajoute une séparation visuelle sur l’index.
void eeBudServerManager.IndexAddSegWhite()
Ajoute une séparation visuelle blanche sur l’index.
void IndexContainerStart(int Width);
void IndexContainerFinish();
Doit être placé dans le setup.
Permet la création d’un conteneur sur l’index.
void IndexTableStart();
void IndexTableFinish();
void IndexRowStart(int Height);
void IndexRowFinish();
void IndexCellStart(int Rowspan, int Cellspan, String Align);
void IndexCellFinish();
Doit être placé dans le setup.
Permet la création de tableaux html sur l’index. (Pour, par exemple placer les tuiles les unes à côté des autres)
void eeBudServerManager.IndexSetToogle(ID)
Permet de renvoyer l’information au bouton basculant (L’action a bien été réalisée).
ex: J’allume la LED Verte avec le bouton basculant (bouton[0]/bouton[1] >> dans la fonction qui allume la LED, on placera eeBudServerManager.IndexSetToogle(bouton[1] , “ON”) et le bouton basculera du coté “ON”.
String IndexGetToogle(int ID)
Permet de récupérer la valeur du bouton basculant paramétré.
void eeBudServerManager.IndexSetInfo(ID, "Valeur")
Permet d’envoyer l’information ( “Valeur”) qui sera attribuée à l’info nommée précédemment par l’ID.
ex: Une température, l’état de la lampe…
String IndexGetInfo(int ID)
Permet de récupérer la valeur de l’information paramétrée.
void eeBudServerManager.IndexSetRange(ID, Valeur)
Permet d’envoyer la valeur qui sera attribuée au curseur nommée précédemment par l’ID.
ex: Une température, l’état de la lampe…
String eeBudServerManager.IndexGetEvent()
Doit être placé dans le loop.
Dans la boucle loop, cette fonction jouera, principalement le rôle d’écouteur. Il retournera par exemple l’ID un bouton lorsque celui ci sera appuyé.
ex: J’appelle un bouton ON, son ID (1) sera retourné lorsque je clique. Donc quand 1 >> fais tourner le moteur d’1/4 de tour vers la droite…
// Obsolète
void eeBudServerManager.IndexResetEvent()
La valeur retournée précédemment, restera la même jusqu’à ce que l’on appuie sur un autre bouton. Sauf si on utilise cette commande. La valeur passera donc à -1.
Attention aux boucles qui se répètent!
int eeBudServerManager.IndexGetRange(ID)
Retourne la valeur d’un curseur sur l’index.
int eeBudServerManager.IndexGetColor_R(ID)
Retourne la valeur rouge d’une couleur sur l’index.
int eeBudServerManager.IndexGetColor_G(ID)
Retourne la valeur verte d’une couleur sur l’index.
int eeBudServerManager.IndexGetColor_B(ID)
Retourne la valeur bleue d’une couleur sur l’index.
int AddHTTPAction(String Name)
Crée un évènement uniquement accessible par des requêtes HTTP.
void SetupModule(String ID_Module, String Type)
Doit être placé dans le setup.
Permet de paramétrer un nom et un type de module qui sera accessible via les plugins tiers.
//Obsolète, non nécessaire
void eeBudServerManager.Jeedom(bool Value = true)
Doit être placé dans le setup.
Permet l’activation du plugin du même nom pour Jeedom, et active l’envoi automatique du retour d’état.
void eeBudServerManager.JeedomAutoRefresh(bool Value = false)
Doit être placé dans le setup.
Désactive l’envoi automatique du retour d’état au plugin Jeedom.
void eeBudServerManager.JeedomRefresh()
Force l’envoi de tous les états au plugin Jeedom.
int IndexAddInputBox(String Name, String Type)
Doit être placé dans le setup.
Permet la création d’un champs de saisie de texte sur l’index. Le type est le type standard html (text, password, number…).
void IndexSetInputBox(int ID, String Value)
Assigne une valeur au champs de texte paramétré.
String IndexGetInputBox(int ID)
Récupère le contenu du champs de texte paramétré.
void IndexAddText(String Name, String Size = "25")
Doit être placé dans le setup.
Permet la création d’un champs de texte sur l’index.
int IndexAddTooltip(String Name, String Content, bool Return_Line = true)
Doit être placé dans le setup.
Permet la création d’une bulle d’information cliquable avec retour d’évènement sur l’index.
void eeBudServerManager.AddParamText("Nom","ValeurParDéfaut")
Doit être placé dans le setup.
Permet la création et la sauvegarde des paramètres personnalisés, qui seront modifiables depuis l’interface ou en ligne de code. Une fois le paramètre créé, cette ligne sera ignorée.
- Nom: Le nom…
- ValeurParDéfaut: Valeur qui sera attribuée au paramètre lors de la création.
Attention! Ces données sont stockées sur la mémoire flash dans la partie SPIFFS. Le nombre de cycles d’écriture étant donné pour environ100 000 fois, nous devons éviter de stocker des données comme des historiques 40x /s… Mais pour de simples paramètres comme : LED Active ou une URL, ça fera très bien l’affaire.
void eeBudServerManager.AddParamBool("Nom", true/false)
Doit être placé dans le setup.
Permet la création d’un paramètre sous forme de bouton basculant (“true”, “false”)
Attention! Ces données sont stockées sur la mémoire flash dans la partie SPIFFS. Le nombre de cycles d’écriture étant donné pour environ100 000 fois, nous devons éviter de stocker des données comme des historiques 40x /s… Mais pour de simples paramètres comme : LED Active ou une URL, ça fera très bien l’affaire.
String eeBudServerManager.GetParamText("Nom")
Récupère la valeur précédemment paramétrée.
- Nom: Le nom…
bool eeBudServerManager.GetParamBool("Nom")
Récupère la valeur précédemment paramétrée.
- Nom: Le nom…
Les valeurs retournées seront “true” et “false”.
void eeBudServerManager.UpdateParamText("Nom", "Valeur")
Modifie le paramètre enregistré.
- Nom: Le nom…
- Valeur: La valeur à lui attribuer.
Attention! Ces données sont stockées sur la mémoire flash dans la partie SPIFFS. Le nombre de cycles d’écriture étant donné pour environ100 000 fois, nous devons éviter de stocker des données comme des historiques 40x /s…
void eeBudServerManager.UpdateParamBool("Nom", true/false)
Modifie le paramètre enregistré.
- Nom: Le nom…
- Valeur: La valeur à lui attribuer.
Attention! Ces données sont stockées sur la mémoire flash dans la partie SPIFFS. Le nombre de cycles d’écriture étant donné pour environ100 000 fois, nous devons éviter de stocker des données comme des historiques 40x /s…
void AddListParam(String Name, String Default, bool Hidden = false, bool Boolean = false)
void CreateListParam()
void UpdateListParam(String Name, String Value)
void SaveListParam()
Doit être placé dans le setup.
AddList permet la création d’une liste de paramètre pour ainsi n’écrire qu’une fois dans la mémoire flash avec Create.
Update et Save ne seront pas obligatoirement dans le setup.
Exemple:
//Setup
Serveur.AddListParam("Premier paramètre", "Valeur du premier paramètre");
Serveur.AddListParam("Deuxième paramètre", "Valeur du deuxième paramètre");
Serveur.AddListParam("Troisième paramètre", "Valeur du troisième paramètre");
Serveur.CreateListParam();
//Ailleurs
Serveur.UpdateListParam("Premier paramètre", "Nouvelle valeur du premier paramètre");
Serveur.UpdateListParam("Deuxième paramètre", "Nouvelle valeur du deuxième paramètre");
Serveur.UpdateListParam("Troisième paramètre", "Nouvelle valeur du troisième paramètre");
Serveur.SaveListParam();
void eeBudServerManager.RemoveParam("Nom")
Supprime le paramètre enregistré, si celui-ci existe.
- Nom: Le nom…
Attention! Ces données sont stock… Bon, je pense que vous avez compris…
bool eeBudServerManager.ResetParams()
Supprime tous les paramètres.
Peut être utile lorsque qu’on appuie sur 2 boutons pendant x secondes…
bool eeBudServerManager.ResetNetwork()
Supprime tous les réseaux paramétrés.
void eeBudServerManager.ResetAll()
Supprime tout.
void eeBudServerManager.HTTPPost("url")
Pour poster une requête HTTP.
String eeBudServerManager.HTTPGet("url")
Pour récupérer la valeur d’une requête HTTP.
String GetKey()
Permet la de récupérer la clé configurée lors du premier démarage de l’ESP32.
String GetIP()
Permet de récupérer l’adresse IP de l’ESP32.
int eeBudServerManager.GetWiFiStatus()
Pour récupérer l’état de la connexion wifi.
1 – Connecté à un réseau wifi.
2 – Point d’accès activé.
3 – Connexion wifi perdue. Tentative de reconnexion toutes les 10 min. Point d’accès activé.
void eeBudServerManager.Scan_Network(true/false)
Active ou désactive le scan des réseaux wifi au démarrage de l’ESP
Requêtes HTTP
Les requêtes HTTP se basent sur les ID des commandes.
2 méthodes pour les récupérer. Soit sur le portail (Configuration>ID de commandes), soit par une requête HTTP: /get?id
Mise en situation:
1- Vous avez créé votre clé qui est: motdepasse
2- Vous avez paramétré votre réseau wifi sur eeBud Serveur Manager avec l’adresse IP fixe: 192.168.1.15
3- Vous avez créé une info sur l’index : Serveur.AddInfo(“Etat”). ID attribué: 0.
4- Vous avez créé un bouton basculant sur l’index : Serveur.AddToogle(“MonBouton”, “OFF”, “ON”, “ON” ). ID attribués: 1 et 2.
5- Vous avez créé un bouton sur l’index : Serveur.AddButton(“ON”). ID attribué: 3.
Requêtes possibles:
UPDATE:
http://192.168.1.15/update?key=motdepasse&button=3
http://192.168.1.15/update?key=motdepasse&toogle=2
http://192.168.1.15/update?key=motdepasse&toogle=1
http://192.168.1.15/update?key=motdepasse&info=0&value=Valeur Bidon
GET:
http://192.168.1.15/get?key=motdepasse&toogle=1 ou 2 (Le retour sera le même pour les 2 ID)
http://192.168.1.15/get?key=motdepasse&info=0
Autres fonctions HTTP
//Récupère le nom et le type de module paramétré avec void SetupModule()
getmodule => http://ADRESSE_IP/getmodule?key=KEY
//Récupère toutes les commandes de l'index
getindex => http://ADRESSE_IP/getindex?key=KEY
//Récupère tous les paramètres en mémoire flash
getallparams => http://ADRESSE_IP/getallparams?key=KEY
//Récupère un paramètre spécifique
getparam => http://ADRESSE_IP/getparam?key=KEY¶m=Nombre_de_leds
//Ajouter un paramètre spécifique
addparam => http://ADRESSE_IP/addparam?key=KEY¶m=Test&value=valeurdetest&type=text
//Modifier un paramètre spécifique
updateparam => http://ADRESSE_IP/updateparam?key=KEY¶m=SIMPLE&value=2
//Mettre en mémoire une liste de paramètres
addlistparam => http://ADRESSE_IP/addlistparam?key=KEY¶m=Test&value=valeurdetest&type=text
//Créer les paramètres précédemment mis en mémoire
createlistparam => http://ADRESSE_IP/createlistparam?key=KEY
//Modifier une liste de paramètres en mémoire
updatelistparam => http://ADRESSE_IP/updatelistparam?key=KEY¶m=Test&value=valeurdetest
//Enregistrer la liste précédemment modifiée
savelistparam => http://ADRESSE_IP/savelistparam?key=KEY
//Redémarrer le module ESP32
reboot => http://ADRESSE_IP/reboot?key=KEY
Récapitulatif (uniquement pour moi, comme ça j'ai toutes les fonctions sur une même page...)
eeBudServerManager(char* NomProgramme);
//Setup
void SetUser(char* ID_USER);
void Init();
void AddParamText(String Name, String Default, bool Hidden = false);
void AddParamBool(String Name, bool Default);
void AddListParam(String Name, String Default, bool Hidden = false, bool Boolean = false);
void CreateListParam();
void UpdateListParam(String Name, String Value);
void SaveListParam();
int IndexAddButton(String Name, bool Return_Line = true);
int IndexAddLittleButton(String Name, bool Return_Line = true);
void IndexAddTitle(String Name, String Size = "80");
int IndexAddInfo(String Name, String Unit, String Size = "60");
int* IndexAddToogle(String Name, String Value_0 = "Off", String Value_1 = "On", String Default = "Off");
int IndexAddColor(String Name, int Default_R, int Default_G, int Default_B);
int IndexAddRange(String Name, int Min, int Max, int Default);
int IndexAddList(String NameList, String Name);
int IndexAddInputBox(String Name, String Type);
int IndexAddTooltip(String Name, String Content, bool Return_Line = true);
int AddHTTPAction(String Name);
void IndexDarkColor(String HTML_Color);
void IndexLightColor(String HTML_Color);
void IndexActiveColor(String HTML_Color);
void IndexTextColor(String HTML_Color);
void IndexAddHTML(String Value);
void IndexBackgroundStart();
void IndexBackgroundFinish();
void IndexTileStart(String Width = "700px", String Height = "", String HTML_Color = "");
void IndexTileWhiteStart(String Width, String Height, String HTML_Border_Color);
void IndexTileFinish();
void IndexContainerStart(int Width);
void IndexContainerFinish();
void IndexAddSeg();
void IndexAddSegWhite();
void IndexAddText(String Name, String Size = "25");
void IndexTableStart();
void IndexTableFinish();
void IndexRowStart();
void IndexRowFinish();
void IndexCellStart(int Colspan, int Rowspan, String Align, String Width, String Height, bool border);
void IndexCellFinish();
void SetupModule(String ID_Module, String Type);
void Jeedom(bool Value = true);
void JeedomAutoRefresh(bool Value = false);
//Loop
int IndexGetEvent();
//Autre
String GetParamText(String Name);
bool GetParamBool(String Name);
void RemoveParam(String Name);
void UpdateParamText(String Name, String Value);
void UpdateParamBool(String Name, bool Value);
bool ResetParams();
bool ResetNetwork();
void ResetAll();
String IndexGetInfo(int ID);
String IndexGetToogle(int ID);
int IndexGetRange(int ID);
int IndexGetColor_R(int ID);
int IndexGetColor_G(int ID);
int IndexGetColor_B(int ID);
String IndexGetInputBox(int ID);
void IndexSetInfo(int ID, String Value);
void IndexSetRange(int ID, int Value);
void IndexSetToogle(int ID);
void IndexSetInputBox(int ID, String Value);
void IndexSetColor(int ID, int R, int G, int B);
void IndexSetList(int ID);
void IndexResetEvent();
String GetKey();
String GetIP();
void JeedomRefresh();
String HTTPGet(String URL);
void HTTPPost(String URL);
int GetWiFiStatus();
void Debug(bool Value = true);
void Scan_Network(bool Value = false);
Un peu de pratique pour que ce soit plus clair:
Le but final de cet exemple est de réaliser deux leds connectées, avec capteur de température. Je vais paramétrer eeBud Server Manager avec le plugin du même nom pour Jeedom. Je vais également ajouter la possibilité d’envoyer les information via des requêtes HTTP pour l’utilisation d’un autre système domotique.
Je vais donc utiliser:
Pour la sonde de température, je dois installer les bibliothèques:
DallasTemperature de Miles Burton
OneWire
Et voici donc le code:
//On inclut les bibliothèques
#include
#include
#include
//Définition des broches
#define PIN_DS18B20 33 //La broche 33 sera pour la sonde de température DS18B20
#define PIN_LED_BLEUE 14
#define PIN_LED_JAUNE 2
#define PIN_BOUTON 35
//Création du serveur
eeBudServerManager Serveur("KTWF-0005");
//Ces integers seront les identifiants des commandes qui seront disponibles sur l'index (la page d'accueil)
int Serveur_INFO_TEMPERATURE;
int Serveur_LED_BLEUE_OFF;
int Serveur_LED_JAUNE_OFF;
int Serveur_LED_BLEUE_ON;
int Serveur_LED_JAUNE_ON;
//Cet integer sera la variable qui écoutera les évènements retours du serveur. (J'appuie sur un bouton de l'index => évènement)
int Serveur_Event;
//Température
OneWire oneWire(PIN_DS18B20);
DallasTemperature DS18B20(&oneWire);
unsigned long Moment_Present = 0;
unsigned long Moment_Memorise = 0;
//Etat des leds
bool Etat_LED_BLEUE = false;
bool Etat_LED_JAUNE = false;
//Ne sera exécuté qu'une fois au démarrage du module
void setup() {
//Initialisation du serveur (Création/connexion réseau Wi-Fi)
Serveur.Init();
//Mise en page de l'index
//Sur cet index apparaîtra une information qui donnera la température mesurée
Serveur_INFO_TEMPERATURE = Serveur.IndexAddInfo("Température", "°C");
//Apparaîtront également 2 boutons pour allumer ou éteindre les leds intégrées au module
int *Bouton = Serveur.IndexAddToogle("Led bleue");
Serveur_LED_BLEUE_OFF = Bouton[0];
Serveur_LED_BLEUE_ON = Bouton[1];
Bouton = Serveur.IndexAddToogle("Led Jaune");
Serveur_LED_JAUNE_OFF = Bouton[0];
Serveur_LED_JAUNE_ON = Bouton[1];
//Fin de la mise en page de l'index
//Réglage des broches
pinMode(PIN_LED_BLEUE, OUTPUT); //La broche PIN_LED_BLEUE (pin 14, déclarée plus haut) est une sortie (Envoie du jus vers la led.)
pinMode(PIN_LED_JAUNE, OUTPUT);
pinMode(PIN_BOUTON, INPUT);
//J'éteins les leds au démarrage du module
Fonction_Led_Bleue_Off();
Fonction_Led_Jaune_Off();
}
//S'éxécutera en boucle tout le temps que le module sera sous tension
void loop() {
//Ecoute des évènements sur le serveur (intéraction avec l'index ou les requêtes HTTP)
Serveur_Event = Serveur.IndexGetEvent();
if (Serveur_Event == Serveur_LED_BLEUE_OFF) { //Si l'évènement a capté un appui sur le bouton Off de la led bleue
Fonction_Led_Bleue_Off(); //J'éteins la led bleue
Serveur.IndexResetEvent(); //Je réinitialise l'évènement
} else if (Serveur_Event == Serveur_LED_BLEUE_ON) {
Fonction_Led_Bleue_On();
Serveur.IndexResetEvent();
} else if (Serveur_Event == Serveur_LED_JAUNE_OFF) {
Fonction_Led_Jaune_Off();
Serveur.IndexResetEvent();
} else if (Serveur_Event == Serveur_LED_JAUNE_ON) {
Fonction_Led_Jaune_On();
Serveur.IndexResetEvent();
}
//Gestion de la température
//La température sera mesurée toutes les 30000 ms
Moment_Present = millis();
if ((Moment_Present - Moment_Memorise) > 30000) {
Moment_Memorise = Moment_Present;
//Prise de la température
DS18B20.requestTemperatures();
//J'écris la température mesurée sur l'index
Serveur.IndexSetInfo(Serveur_INFO_TEMPERATURE, String(DS18B20.getTempCByIndex(0)));
}
//Gestion du bouton
if (digitalRead(PIN_BOUTON) == LOW) { // Si le bouton intégré à la carte est appuyé
if (Etat_LED_BLEUE) Fonction_Led_Bleue_Off(); //Si la led bleue est allumée, je l'éteins
else Fonction_Led_Bleue_On(); //Sinon je l'allume
if (Etat_LED_JAUNE) Fonction_Led_Jaune_Off();
else Fonction_Led_Jaune_On();
//Je bloque le module pendant une demi seconde pour ne pas que l'action ne se répète plusieurs fois lorsque j'appuie sur le bouton
delay(500);
}
}
//Fonction qui éteins la led bleue
void Fonction_Led_Bleue_Off() {
Serveur.IndexSetToogle(Serveur_LED_BLEUE_OFF); //Je bascule le bouton de l'index sur OFF
digitalWrite(PIN_LED_BLEUE, LOW); //J'éteins la led
Etat_LED_BLEUE = false; //Je passe l'état de la led à OFFF
}
void Fonction_Led_Bleue_On() {
Serveur.IndexSetToogle(Serveur_LED_BLEUE_ON);
digitalWrite(PIN_LED_BLEUE, HIGH);
Etat_LED_BLEUE = true;
}
void Fonction_Led_Jaune_Off() {
Serveur.IndexSetToogle(Serveur_LED_JAUNE_OFF);
digitalWrite(PIN_LED_JAUNE, LOW);
Etat_LED_JAUNE = false;
}
void Fonction_Led_Jaune_On() {
Serveur.IndexSetToogle(Serveur_LED_JAUNE_ON);
digitalWrite(PIN_LED_JAUNE, HIGH);
Etat_LED_JAUNE = true;
}
Premier démarrage et paramétrage
3- La première page de configuration permet de choisir une clé. Cette clé servira à la connexion sur l’index, de clé pour les requêtes HTTP, et de mot de passe de connexion Wi-Fi, en cas de sélection du mode “Point d’accès”.
Le mode “Point d’accès” est un réseau créé par le module qui ne permet uniquement de se connecter et de piloter le module en direct. Je ne choisirai pas ce mode dans la suite de la configuration, car je perds tout principe de communication avec mon réseau Wi-Fi local.
4- La page suivante permet de paramétrer un réseau Wi-Fi local, et donc la possibilité de communiquer avec tous les appareils de ce même réseau.
Après validation, le module redémarre et tentera de se connecter à l’adresse IP paramétrée.
Si on ignore cette étape, le module redémarrera en mode “Point d’accès”. Et l’index sera accessible à l’adresse IP 192.168.1.1, de son propre réseau.
5- Voila. Après redémarrage et connexion au réseau local, il suffit de lancer son navigateur préféré et de se rendre à l’adresse IP paramétrée. Dans mon cas: 192.168.0.201
Le nom d’utilisateur est “admin”, mais peut être changé dans le void setup() du programme, avant initialisation du serveur, avec la commande suivante.
void SetUser("unautrenomdutilisateur");
Et le mot de passe est celui paramétré en 3-
Intégration à Jeedom
Grace au plugin eeBud Server Manager (eebsm) pour Jeedom, je peux intégrer ce module en quelques clics à mon système domotique.
Après avoir installé et activé le plugin, je me rends sur la page de mes équipements eebsm (Plugins → Protocole domotique→ eeBud Server Manager).
Je rensègne les informations demandées, (Objet, actif, visible, adresse IP du module et le même mot de passe paramétré en 3-)
Je sauvegarde, et après quelques secondes:
Intégration à un autre logiciel domotique
La bibliothèque dispose des fonctions:
String HTTPGet(String URL);
void HTTPPost(String URL);
Elles permettent d’interagir avec tout autre système domotique via des requêtes HTTP.
Nous pourrons ainsi créer des paramètres en mémoire flash comprenant des URL et poster celles-ci lors d’un évènement. (Par exemple, une led allumée, poster au système domotique que la led est bien allumée.)
Et inversement, dans le menu du module, requêtes HTTP, nous pouvons retrouver les requêtes permettant d’interagir avec le module depuis tout autre appareil, via des requêtes.