Programmation de l’ESP32 – Application au routeur Photovoltaïque
L’ESP32 est un microcontrôleur très intéressant Il regroupe des entrées sorties analogiques et numériques ainsi qu’un accès WIFI et Bluetooth. Pour sa programmation, il existe différents outils. Ici, nous allons utiliser l’outil très connu dédié aux microcontrôleurs de la famille des Arduino qui peut être adapté à l’ESP32.
IDE Arduino «Integrated Development Environment»
IDE Arduino
Allez sur le site d’Arduino https://www.arduino.cc/ et choisissez l’onglet ‘Software’. Téléchargez et installez la dernière version de l’environnement de développement (IDE). Allez dans le menu « File » et « Preferences » et choisissez la langue française.
L’ESP32 ne faisant pas partie de la famille des cartes Arduino, il faut rajouter à l’IDE une bibliothèque complémentaire fournie par le fabricant « Espressif » qui développe l’ESP32. Allez dans Fichier / Préférences et mettez l’adresse : https://dl.espressif.com/dl/package_esp32_index.json
Choix de la carte ESP32
Il existe de nombreuses cartes sur le marché à base d’ESP32. Cela peut-être difficile parfois de trouver la définition des broches de sorties (GPIO). Ici on utilise une carte de développement avec un ESP32-Wroom et 2×19 broches. Achat possible chez Amazon, uPesy ou chez Aliexpress en Chine directement.
- ESP32 (3 choix)
- ESP32 38P (classique)
- ESP Wroom-32U avec antenne Wifi externe
- ESP32 Wroom DevKit v2 de uPesy en France
Chargement d’un programme et compilation
Dans le menu fichier vous pouvez:
– créer un nouveau programme ,
– utiliser un des nombreux exemples fournis ou ,
– charger un programme que vous avez téléchargé. Par exemple le programme du routeur photovoltaïque de F1ATB
Connectez via le port USB la carte ESP32 à votre PC. Sélectionnez la carte ESP32 DEV Module et le port série (COM) de Windows sur laquelle elle s’est connectée.
En haut, le premier bouton permet de compiler uniquement le programme afin de vérifier qu’il n’y a pas d’erreur. La flèche permet de compiler le programme source, générer le binaire et le télécharger dans la carte ESP32. Il sera lancé en fin de téléchargement.
Bibliothèques complémentaires
De nombreux programmes font appel à des bibliothèques de programmes assurant différentes fonctions. Il est fréquent, lors des compilations d’avoir un message d’erreur car il manque une bibliothèque. On retrouve la liste des bibliothèques incluses dans votre installation de l’IDE Arduino sur la partie gauche de l’écran.
En cas de manque, faite une recherche avec le gestionnaire de bibliothèque et rajoutez la bibliothèque manquante.
Problème de driver
Il peut arriver que votre carte ESP32 ne soit pas reconnue par Windows lors du branchement sur USB.
Sur la carte ESP32 un composant fait l’interface série/USB, le WCH340 très fréquent ou le CP2102 ou CP2104. Regardez sur la carte. Windows ne sait pas gérer tout seuls ces drivers..
C’est peut-être l’absence de driver sur le PC fixe qui est responsable de la non-reconnaissance.
S’il s’agit d’un WCH340 , le driver se trouve ici sur le site de son fabricant :
http://www.wch-ic.com/downloads/CH341SER_EXE.html 733
S’il s’agit d’un CP2102 ou CP2104 idem :
https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads
Choississez la version correspondant à votre OS; Windows…
Un lien d’aide à l’installation : https://tropratik.fr/installer-un-convertisseur-usb-ttl-cp2102
Un autre exemple : https://techexplorations.com/guides/esp32/begin/cp21xxx/
Problème de Boot
Certaines cartes avec un ESP32 n’acceptent pas le téléversement du code binaire. Dans ce cas avant le téléversement :
- Appuyez sur Boot
- Appuyez sur Reset (EN/RST)
- Relachez Reset
- Relachez Boot
Migration bibliothèque ESP32 V2.x vers 3.X
Espressif a apporté une migration importante de sa bibliothèque gérant l’ESP32 en passant à la version 3.0.0. Laquelle est buguée, il faut passer immédiatement à la version 3.0.1. Pour les détails des changements :
https://docs.espressif.com/projects/arduino-esp32/en/latest/migration_guides/2.x_to_3.0.html
Moniteur Série
Après une opération de téléchargement, ouvrez le moniteur série de l’Arduino en allant sur le menu Outils. Vérifiez à droite de la fenêtre qui s’est ouverte que vous êtes à 115200 baud. L’ESP32 vous fournira de nombreuses informations comme l’adresse IP qu’on lui a attribuée etc.
Arrivé à ce stade pour le routeur photovoltaïque, allez au chapitre premier lancement ici : https://f1atb.fr/fr/routeur-photovoltaique-realisation-logicielle/
Chargement d’un programme via OTA
En général, on installe un programme sur un Arduino ou un ESP32 via le port série USB. Comme l’ESP32 dispose du Wifi, on peut intégrer au code de l’application un module logiciel « OTA » (On The Air) ou par Radio. Cela permet de télécharger et mettre à jour un programme via le WIFI et non le câble USB.
Le routeur photovoltaïque (F1ATB) intègre cette fonctionnalité afin de faire les mises à jour à distance. Il n’y a rien à faire.
Si vous souhaitez tester un exemple d’OTA, de nombreux sont proposés dans l’IDE Arduino. Dans les exemples, sélectionnez le programme « Basic OTA ».
Modifiez légèrement le programme en précisant l’adresse IP pour votre ESP, le SSID (nom du Wifi)…
#include <WiFi.h> #include <ESPmDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> const char* ssid = "YOUR SSID"; const char* password = "THE PASSWORD"; // Set your Static IP address IPAddress local_IP(192, 168, 0, 208); //HERE DEFINE YOUR IP ADRESS // Set your Gateway IP address IPAddress gateway(192, 168, 0, 254); //DEFINE THE GATEWAY IPAddress subnet(255, 255, 255, 0); IPAddress primaryDNS(8, 8, 8, 8); //optional IPAddress secondaryDNS(8, 8, 4, 4); //optional
Téléchargez le code la première fois par la liaison série. Un appui sur le bouton RST permet de bien tester l’ensemble. À ce stade, il vous sera possible de mettre à jour la programmation via le web en choisissant non plus le port série dans l’IDE Arduino, mais le port réseau, dans notre cas 192.168.0.208. Dans votre code, il faudra intégrer la partie ArduinoOTA afin de conserver cette possibilité. Au chargement, l’IDE vous demandera un mot de passe. Répondez une lettre quelconque.
Remote « Debug »
En passant par le Wifi vous allez perdre la possibilité de debug par le port série. La biblothèque « RemoteDebug » va vous permettre de retrouver cette possibilité suivant 2 possibilités :
- – une écoute Telnet sur le port 23.
- l’utilisation de l’application RemoteDebugApp, à télécharger ici: https://github.com/JoaoLopesF/RemoteDebugApp
Pour utilisez cette fonctionalité de debug, il faut auparavent installer la bibliothèque RemoteDebug de Joao Lopes dans l’IDE Arduino, qui installera également des exemples d’utilisation.
OTA et Remote Debug sont 2 fonctionnalités implantées dans le logiciel du routeur Photovoltaïque de F1ATB. Il n’y a rien à faire sauf installer la bibliothèque RemoteDebug dans l’IDE.
Bugs Soft
hwcrypto/sha.h
Sur certaines configurations, lors de la compilation, il y a une erreur de librairie inexistante :…..include <hwcrypto/sha.h>
Avec un éditeur de texte, ouvrez le fichier dans vos bibliothèques Arduino C:/Users/Utilisateur/Documents/Arduino/libraries/RemoteDebug/src/utility/Websockets.cpp
Le début de l’adresse peut changer suivant l’utilisateur. Retrouvez le dossier Arduino pour localiser le fichier dans les sous-dossiers.
A la ligne 42, remplacez :
#include <hwcrypto/sha.h>
par
#include <esp32/sha.h>
Ne me demandez pas pourquoi, sur mon PC de bureau, je n’ai pas besoin de faire cette modification, sur mon PC portable, j’ai besoin.
Récupération de l’heure internet
Dans une application, il peut être intéressant d’afficher l’heure. La bibliothèque esp-sntp.h permet l’acquisition de l’heure,t la gestion de la zone horaire et le décalage horaire.
Allez dans Arduino voir l’exemple ESP32/Time/Simple Time. Vous verrez qu’il faut placer la synchronisation de l’heure avant l’accès au Wifi.
Affectation des GPIO (entrées / sorties)
L’ESP32 à des GPIOs offrant de multiples fonctionnalités. Mais tous les GPIO n’ont pas les mêmes possibilités. Certains, il est même recommandé de ne pas les utiliser.
Il y a un très bon article sur le sujet ici : https://www.upesy.fr/blogs/tutorials/esp32-pinout-reference-gpio-pins-ultimate-guide
Bonjour,
Merci pour vos tutos, bien décrit et détailler.
J’ai installer le programme sur esp32 mais, J’ai ce message d’erreur est ‘il important pour le fonctionnement du routeur?
Merci de votre réponse par avance.
C:\Users\guill\Arduino\Solar_Router_V8_09_RMS\Solar_Router_V8_09_RMS.ino:75:10: fatal error: pageHtmlBrute.h: No such file or directory
#include « pageHtmlBrute.h »
^~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Compilation error: pageHtmlBrute.h: No such file or directory
A mon avis, vous avez oublié de dezipper tous les fichiers dans un même dossier.
Cdlt
Bonjour André,
Pour commencer bravo pour votre site internet il est vraiment formidable, très riche en information.
J’aurais une petite question a vous posez, je n’ai pas compris le fonctionnement du maitre, esclave de ESP32.
J’ai un esp32 qui fait le routeur solaire et qui fonctionne très bien et un autre esp32 que je voudrais utiliser pour piloter un relais SSR mais je n’ai pas compris où mettre l’instruction de pilotage et surtout quel code utiliser.
Si vous pouviez m’éclairé à ce sujet ou encore me dire ou je pourrais trouver de la documentation.
Merci beaucoup pour votre aide
Sur le deuxième ESP, vous mettez le même logiciel. Dans les paramètres pour la source des mesures de puissance, vous mettez ESP externe. En dessous vous mettez l’adresse IP du premier ESP qui fait les mesures. Et c’est tout.
Cdlt
Super merci beaucoup André, effectivement ça marche aussi de cette façon.
Mais pourriez-vous de dire aussi avec la solution du pilotage a distance ou me conseiller une documentation.
Merci beaucoup
Regardez ici :
https://f1atb.fr/fr/routage-des-ports-internet-ou-nat/
Bonjour,
Quand je compile la version « Version V_8.09_RMS « , j’obtiens : « Compilation error: ‘WiFiClient’ does not name a type; did you mean ‘Client’? »
Comment résoudre ce problème ?
Merci.
On a un problème depuis quelques jours. Voir chapitre bugs soft pour la résolution.
https://f1atb.fr/fr/routeur-photovoltaique-realisation-logicielle/
Bonjour André,
Je suis bloqué à cette étape.
Compilation error: ‘WiFiClient’ does not name a type; did you mean ‘Client’?
Que dois-je faire ? je suis sur Macbook air M1
Je suis novice dans la programmation.
D’avance merci pour votre aide
On a un problème depuis quelques jours. Voir chapitre bugs soft pour la résolution.
https://f1atb.fr/fr/routeur-photovoltaique-realisation-logicielle/
Cdlt
https://f1atb.fr/forum_f1atb/thread-2.html