eeBud

eeBud server manager

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?

  • 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 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.

 

				
					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 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”.

				
					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…

				
					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…

				
					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. 

				
					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 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.

				
					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
				
			

Récapitulatif (uniquement pour moi, comme ça j'ai toutes les fonctions sur une même page...)

				
					  //Setup
  void Init();

  void AddParamText(String Name, String Default);
  void AddParamBool(String Name, bool Default);

  int IndexAddButton(String Name);
  void IndexAddTitle(String Name, String Size);
  int IndexAddInfo(String Name, String Unit, String Size);
  int* IndexAddToogle(String Name, String Value_0, String Value_1, String Default);
  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);

  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(int Width, String HTML_Color);
  void IndexTileWhiteStart(int Width, String HTML_Color);
  void IndexTileFinish();
  void IndexContainerStart(int Width);
  void IndexContainerFinish();

  void IndexTableStart();
  void IndexTableFinish();
  void IndexRowStart(int Height);
  void IndexRowFinish();
  void IndexCellStart(int Rowspan, int Cellspan, String Align);
  void IndexCellFinish();

  //Fonction cachée !! ah ah ah!
  void IndexBottomText(String Text);
  void IndexAddLogo(String URL, int Width, int Height);
  void IndexAddLittleLogo(String URL, int Width, int Height);

  //Loop
  int IndexGetEvent();
  //Ajouter HANDLE

  //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();

  int IndexGetRange(int ID);
  int IndexGetColor_R(int ID);
  int IndexGetColor_G(int ID);
  int IndexGetColor_B(int ID);
  void IndexAddSeg();
  void IndexAddSegWhite();

  void IndexSetInfo(int ID, String Value);
  void IndexSetRange(int ID, int Value);
  void IndexSetToogle(int ID);

  void IndexResetEvent();

  String HTTPGet(String URL);
  void HTTPPost(String URL);

  int GetWiFiStatus();

  void Debug(bool Value);
  void Scan_Network(bool Value);
				
			

Un peu de pratique pour que ce soit plus clair:

Le but final de cet exemple est de réaliser une simple LED wifi commandée par un fil tactile, avec capteur de température. Nous allons paramétrer eeBud Server Manager pour envoyer et recevoir les informations depuis notre système domotique. (Pour ma part: Jeedom). Cet exemple sera adapté par la suite pour la réalisation d’une guirlande (Noël arrive) et d’une lampe connectée ARGB.

Je vais donc utiliser.

Le fil bleu reste en l'air pour servir de fil tactile

Pour la sonde de température, nous devons installer les bibliothèques:

Et voici donc le code:

				
					// On inclut les bibliothèques
#include <eeBudServerManager.h>
#include <OneWire.h>
#include <DallasTemperature.h>

//Définition des pins
#define DS18B20_PIN 33
#define LED 32
#define BOUTON_TACTILE 14


//Création du serveur qui sera nommé "LED connectée".
eeBudServerManager Serveur("LED connectée");

//ID pour la création de l'index eeBud Server Manager et la récupération des paramètres.
int Info_Temperature;
int *Bouton;

//Variable qui écoutera les remontées du serveur
int Event;

//Température
OneWire oneWire(DS18B20_PIN);
DallasTemperature DS18B20(&oneWire);
float Memoire_Temperature = 9999;
unsigned long Moment_Present = 0;
unsigned long Moment_Memorise = 0;
float Temperature_Actuelle;
float Difference_Temperature_Parametree;

//Tactile
bool Etat_LED;
int Sensibilite_Tactile;
int Valeur_Tactile;

void setup() {
  //Initialisation du serveur.
  Serveur.Init();

  //Création de paramètres stockés en mémoire flash
  Serveur.AddParamText("Différence de température", "0.5");
  Serveur.AddParamText("Sensibilité du tactile", "20");
  Serveur.AddParamText("URL Température", "");
  Serveur.AddParamText("URL Etat", "");
  
  //Récupération de ces paramètres en Variable
  Sensibilite_Tactile = (Serveur.GetParamText("Sensibilité du tactile")).toInt();
  Difference_Temperature_Parametree = Serveur.GetParamText("Différence de température").toFloat();

  //Mise en page de l'index
  Info_Temperature = Serveur.IndexAddInfo("Température", "°C", "60");  // Nom, Unité, Taille de la police.
  Serveur.IndexAddSeg();
  Bouton = Serveur.IndexAddToogle("Etat de la LED", "Off", "On", "Off");
  Serveur.IndexAddSeg();

  //LED
  pinMode(LED, OUTPUT);
  Led_Off();
}

void loop() {

  //Gestion de la température
  Moment_Present = millis();
  if ((Moment_Present - Moment_Memorise) > 30000) {
    Moment_Memorise = Moment_Present;
    DS18B20.requestTemperatures();
    Temperature_Actuelle = DS18B20.getTempCByIndex(0);

    if ((Memoire_Temperature - Temperature_Actuelle) >= Difference_Temperature_Parametree || (Temperature_Actuelle - Memoire_Temperature) >= Difference_Temperature_Parametree) {
      Memoire_Temperature = Temperature_Actuelle;
      //Ecriture de la température sur l'index
      Serveur.IndexSetInfo(Info_Temperature, String(Temperature_Actuelle));
      String URL_Temperature = Serveur.GetParamText("URL Température");
      URL_Temperature.replace("#VALUE#", String(Temperature_Actuelle));
      //Envoi de l'information au serveur domotique (Jeedom)
      Serveur.HTTPPost(URL_Temperature);
    }
  }

  //Gestion de la LED depuis l'index
  //Si l'écouteur a recu l'information d'appui sur le bouton de l'index
  Event = Serveur.IndexGetEvent();
  if (Event == Bouton[0]) {
    Led_Off();
  } else if (Event == Bouton[1]) {
    Led_On();
  }

  //Gestion de la LED depuis le tactile
  Valeur_Tactile = touchRead(BOUTON_TACTILE);
  if (Valeur_Tactile < Sensibilite_Tactile) {
    if (Etat_LED == false) {
      Led_On();
    } else {
      Led_Off();
    }
    delay(500);
  }
}

void Led_Off() {
  digitalWrite(LED, LOW);
  //Bascule du bouton sur l'index
  Serveur.IndexSetToogle(Bouton[0]);
  String URL_Etat = Serveur.GetParamText("URL Etat");
  URL_Etat.replace("#VALUE#", "0");
  //Envoi de l'information au serveur domotique (Jeedom)
  Serveur.HTTPPost(URL_Etat);
  Serveur.IndexResetEvent();
  Etat_LED = false;
}

void Led_On() {
  digitalWrite(LED, HIGH);
  //Bascule du bouton sur l'index
  Serveur.IndexSetToogle(Bouton[1]);
  String URL_Etat = Serveur.GetParamText("URL Etat");
  URL_Etat.replace("#VALUE#", "1");
  //Envoi de l'information au serveur domotique (Jeedom)
  Serveur.HTTPPost(URL_Etat);
  Serveur.IndexResetEvent();
  Etat_LED = true;
}
				
			

On téléverse le programme dans l’ESP, et qu’est ce que nous avons?

A faire au premier lancement:

Cette clé servira d’identifiant, de mot de passe pour la connexion wifi et de clé pour les requêtes HTTP.

Intégration à Jeedom

Dans cet intégration, je vais décider de créer deux variable dans Jeedom pour récupérer l’état de la led. Nous pourrions tout aussi bien modifier l’état du virtuel directement.

Nous aurons besoin de créer 2 variables, un équipement virtuel pour recevoir les infos de l’ESP et un équipement script pour envoyer les informations vers l’ESP.

Je vais commencer par créer l’équipement script pour envoyer les requêtes vers l’ESP

Sur le portail eeBud Server Manager, dans “Configuration>ID de commandes”, j’obtiens les ID ainsi que le lien à copier/coller

Création de l’équipement script:

On ajoute 2 commandes script. On et Off. Type: Action. Type de script: HTTP. Requête que nous avons au dessus. Et je paramètre sur 1 seul essai.

Création des variables que nous paramétrerons ensuite dans le virtuel. Je les nomme LED_Etat et LED_Temperature.

Création du virtuel comprenant 1 info virtuelle type “autre” pour l’état de la LED et 1 info virtuelle type “numérique” pour la remontée de la température.

Et pour n’avoir qu’un seul équipement affiché, je rajoute sur le virtuel, deux actions qui pointent vers l’équipement script précédemment créé.

Pour le paramétrage des requêtes dans eeBud Server Manager.

La requête pour modifier une variable dans Jeedom est:

				
					http://ADRESSE_IP/core/api/jeeApi.php?apikey=CLE_API&type=variable&name=NOM_VARIABLE&value=value
				
			

Configuration>Paramètres initialisés.

Nous renseignons donc: URL Température:

				
					http://ADRESSE_IP/core/api/jeeApi.php?apikey=CLE_API&type=variable&name=LED_Temperature&value=#VALUE#
				
			

URL Etat:

				
					http://ADRESSE_IP/core/api/jeeApi.php?apikey=CLE_API&type=variable&name=LED_Etat&value=#VALUE#
				
			

Voila! Tout est enfin opérationnel!

Amusez-vous bien!

Articles similaires

0 0 votes
Évaluation
S’abonner
Notification pour
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires
Retour en haut