ESP32 : Comment faire ?

Quelques exemples de ce qui est possible avec l’ESP32 et comment le faire :

Note : Les parties de code utilisées dans cet article sont à intégrer dans un programme, le code ne fonctionne pas seul (sauf le premier exemple pour l’initialisation OTA qui est complet).

Les mises à jour Over The Air (à distance)

La connexion avec un câble USB, c’est pas mal pour préparer et tester son code; mais lorsque l’ESP32 est installé dans une boite de dérivation peu accessible, comment faire pour adapter son programme ?

Pas de problème 🙂 , nous allons travailler sans fil et sans rien avoir à démonter.

Tout d’abord, il faut implanter dans votre ESP32 un petit programme qui va attendre patiemment l’arrivée de vos mises à jour. Il suffit de mettre vos propres valeurs dans les 3 zones : « votre_box« , « votre_motdepasse » et « votre_esp » puis d’envoyer le programme sur votre ESP32. Le programme va s’installer dans une zone OTA spécifique et il ne réagira qu’à l’arrivée d’une nouvelle version de votre programme principal.

Il faudra installer les quatre bibliothèques déclarées dans les #include en début de programme avec le Gestionnaire de Bibliothèques de l’IDE Arduino.

Je n’ai pas réussi à faire fonctionner correctement l’authentification, alors j’ai laissé les lignes en commentaire (26 à 30).

Après l’ajout de ce module OTA sur votre ESP32, un nouveau port de connexion apparaîtra avec le nom que vous avez donné à votre ESP et son adresse IP. C’est ce port réseau qu’il faudra sélectionner pour les prochaines mises à jour en OTA.

Sélection d’un port réseau pour une mise à jour à distance

Ensuite, il va falloir adapter légèrement votre programme principal pour que la mise à jour OTA fonctionne. Voici les éléments qu’il faut rajouter :

  • les 4 librairies utilisées dans le programme d’initialisation OTA,
  • les 3 variables (wifi_ssid, wifi_password et host_name),
  • dans le setup, un appel à la fonction setup_ota (en plus de vos autres éléments),
  • la fonction setup_ota elle même,
  • dans la boucle loop, l’attente d’une demande de mise à jour OTA (en plus du code du programme).

Il faudra donc rajouter ces éléments dans tous les programmes pour lesquels vous souhaitez une mise à jour OTA. Pour moi, c’est systématique dans tous mes programmes.

Bien, tout ça c’est parfait, mais comment faire du debug dans cette configuration ? En effet, le moniteur série ne fonctionne plus puisque nous ne sommes plus en connexion série !

Débugger à distance

Il y a aussi une solution, certes un peu différente des « Serial.println » habituels mais tout à fait fonctionnelle. Nous allons ajouter 2 librairies, puis instancier (ou initialiser/activer) RemoteDebug, rajouter une ligne dans la boucle loop pour l’attente d’une demande de débug et modifier le serveur web pour rajouter l’option « debug ». Et oui, il est aussi possible d’installer un serveur web sur un ESP32 😀 , on y reviendra plus loin.

Dans la fonction à débugger, j’ai simplement remplacer les « Serial » par « Debug ».

Voyons maintenant ce que cela donne :

Je me connecte en telnet (port 23) sur l’ESP avec Putty et dans mon navigateur je vais sur la page /debug comme sur les copies d’écran ci-dessous.

A chaque activation de la page web /debug le programme va exécuter la fonction setup_sondes qui se trouve dans la description de la page. Si je souhaite analyser le déroulement d’une autre partie du programme, je modifie le contenu de cette page web.

On peut aussi voir dans la connexion telnet l’adresse IP, l’adresse Mac, la mémoire disponible …

Voici un lien (en anglais) pour plus d’informations : RemoteDebug sur github

Comme je suis loin d’avoir vu tout ce qui est possible avec RemoteDebug, si vous trouvez des choses intéressantes, indiquez les dans les commentaires.

Utiliser une adresse IP fixe

Ce serait quand même mieux si on avait toujours la même adresse IP pour un ESP32 ! Pas de soucis, on va fixer l’adresse IP de notre ESP.

Voilà c’est tout pour l’adresse IP fixe ! Simple non 😉 

Comment éviter la boucle loop ?

Cette boucle loop, c’est compliqué car elle fonctionne en permanence et à toute vitesse 😥 Si l’on souhaite mettre des temporisations, on bloque tout le programme et en plus il faut gérer le temps, calculer les délais, … bref c’est pas idéal.

Heureusement, il y a une bibliothèque parfaite (encore une !) pour améliorer le fonctionnement de notre ESP32 : SoftTimer. Le principe, c’est de définir des tâches qui vont exécuter des fonctions avec une périodicité donnée. Dans l’exemple ci-dessous, la tâche t1 va exécuter la fonction PHMesure toutes les 20 secondes, la tâche t2 exécutera PHCalcul toutes les 60 secondes et la tâche t0 qui remplace la boucle loop s’exécutera en permanence. On voit que dans t0, il n’y a que des attentes d’interruptions.

C’est beaucoup plus souple, et on supprime la boucle loop et ses inconvénients.

Un serveur web dans mon ESP32

Et oui, on va mettre un serveur web dans l’ESP32, c’est incroyable … Il y aura un exemple plus complet dans l’article sur les sondes de température du garage, on ne verra ici que les points principaux.

Dans le code ci-dessous, on intègre 2 librairies, on active le protocole http, on créé un serveur en écoute sur le port 80. Dans le setup, on définit 3 pages (/, /led_on et /led_off) + une page d’erreur et on démarre le serveur. Ensuite, on décrit une fonction pour chaque page html créée, en indiquant les actions à réaliser si la commande html est reçue. Et enfin, dans la boucle loop (ou dans la tâche permanente), on met le serveur en attente d’une commande.

Quelques bibliothèques intéressantes

Illustration de l’apport des bibliothèques dans l’IDE Arduino.

Un exemple d’utilisation de la bibliothèque RunningMedian qui permet aussi d’obtenir la valeur la plus petite, la plus grande ou la moyenne.

Globalement il y a des bibliothèques pour chaque protocole utilisé ou pour chaque composant électronique (ou famille de composants) à rajouter :

  • Pour connecter des écrans I2C :
  • Pour connecter des composants en SPI :

Dans le prochain article, il y aura le programme complet pour la gestion des appareils ménagers du garage et le pilotage des prises pour les pompes. Pratiquement tous les points abordés dans cet article seront utilisés dans ce programme qui pourra servir de base pour d’autres projets.

Bons tests et partagez vos réalisations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *