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. Compatible avec le esp32 wt eth01 ? Avec l ethernet plutôt que le WiFi.
Merci
Non uniquement ESP32 avec Wifi.
Cdlt
Bonsoir,
Quand j’installe la bibliotheque depressif via le lien :https://dl.espressif.com/dl/package_esp32_index.json j’ai ce message d’erreur, du coup je n’arrive pas à avoir mon esp32 dans la liste. Avez vous une solution ?
Téléchargement des paquets
esp32:xtensa-esp32-elf-gcc@esp-2021r2-patch5-8.4.0
Failed to install platform: ‘esp32:esp32:2.0.11’.
Error: 2 UNKNOWN: Get « https://github.com/espressif/crosstool-NG/releases/download/esp-2021r2-patch5/xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch5-win64.zip »: proxyconnect tcp: dial tcp: lookup _: no such host
Jamais vu ce problème. Etes vous en version 2.3.2 de l’IDE Arduino?
Cdlt
Bonjour,
Pour info lors du téléversement juste apres la compilation, il faut appuyer sur le bouton « boot » de l’esp 32 pendant 2 s et le transfert s’effectue.
Bonjour, je découvre l’IDE arduino depuis qqs semaines, étant sous windows7 32b ,j’ai dû installer l’IDE v1.8.19 et l’esp32 v1.06 et j’avance…
questions de novice:
si la compilation intégrale V8.06 se passe bien ainsi que le téléversement , toutes les fonctions du programme fonctionneront?
car:
(j’ ai eu 2 erreurs à la compilation outrepassées en neutralisant les qqs lignes en cause : 757 à 765 et 913 concernant la « Vérification Wifi »
et « Heure Date » NB l’exemple simple time tourne
qu’en pensez vous, je recherche en testant différentes versions de librairies Wifi et Esp sntp…
sinon le menu web fonctionne,saisie des paramètres…sans rien de connecté sur l’ESP32, merci
Oui, tout devrait fonctionner. Je ne comprends pas pourquoi vous avez des problèmes de compilation de la version V8.06 du routeur. Je viens de faire l’essai avec l’IDE v1.8.19
Je n’ai aucune erreur. Il doit vous manquer des bibliothèques.
Cdlt
merci pour cette réponse rapide,je vais tester des bibliothèques plus récentes ,je craignais que vous me disiez qu’il me fallait un IDE 2 …et un windows10! bonne journée
Bonjour
Je vous remercie pour ce partage très complet de votre routeur solaire, je réalise la version simple avec la sonde ampèmétrique.
J’ai un ennui lors de le compilation du programme V8_06_rms avec le module Remote debug que ne parviens à résoudre
: /Users/imac/Documents/Arduino/libraries/RemoteDebug/src/utility/WebSockets.cpp:42:10: fatal error: hwcrypto/sha.h: No such file or directory
#include
^~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Compilation error: exit status 1
Avez vous une idée de la provenance de ce soucis , je tourne en rond depuis un certain temps …
PS: je suis sous OSX version IDE 2.3.2
Merci à l’avance
Cordialement
£C.Joly
C’est expliqué sur le site au chapitre Bugs Soft:
https://f1atb.fr/fr/routeur-photovoltaique-realisation-logicielle/
Cdlt
Merci beaucoup et bonne journée
Bonjour André,
Est-ce que vous auriez un lien Aliexpress de carte support pour la Wroom 32U Wifi ?
la distance entre les pin opposés est de 25mm et ça colle pas avec la carte support que j’ai prise sans vérifier…
au cas où merci
Soit, vous tordez les pattes. Soit vous commandez en France chez https://www.upesy.fr/ il y a je crois un empâtement différent.
Cdlt
j’ai commandé ça (que la board)
https://a.aliexpress.com/_EwV5yAV
je ferai un CR
TU LES AS CHEZ AMAZON
XTVTX 2 pièces ESP32 conseil de développement ESP32 Carte d’extension ESP32 Carte de Développement 38 Broches avec WiFi sans fil Bluetooth pour carte de Développement de Microcontrôleur ESP-WROOM-32
pour 10.99€ les 2 supports
Bonjour André et encore merci pour votre travail; mon routeur fonctionne à merveille avec un triac Bta41600B trouvé sur Amazon j’ai fait le choix du shelly EM pour récupérer les données de ma maison et me pose la question de remplacer ce shelly em par un shelly em pro 50a. Je ne sais pas si le routeur est capable de récupérer les données de ce module. En avez vous essayé un ou me dire quelles modifications à apporter au routeur pour le rendre capable.
2eme point j’aimerais pouvoir changer mon ssid celà s’opère en se connectant au wifi du routeur par le programme « Basic OTA » ou d’une autre façon?
Merci pour votre soutien.Cordialement
Pour l’instant, je n’ai pas intégré le Shelly Em pro.
Pour changer le SSID. Si le SSID du Wifi de la maison a changé, le routeur n’arrivera pas à se connecter. Au bout de 15s, il va passer en mode point d’accès en émettant son propre signal WIFI avec le SSID=ESP… Il suffit alors de se connecter à lui avec un téléphone à l’adresse 192.168.4.1 et de faire comme lors du premier lancement. Lui indiquer le Wifi auquel se connecter à l’avenir.
Cdlt
Un dernier point serait-il possible d’assigner une consigne en % AU TRIAC lorsque celui -ci est en marche forcée donc sur ON.
Il suffit de passer en mode régulé avec un seuil élevé par exemple 10000 et de mettre le pourcentage que l’on souhaite. Cela revient à un ON avec une limitation de puissance.
Cdlt
Bonsoir André,
sur la version V8_06, un bug m’est signalé: ‘pulseTriac’ does not name a type
Qu’est ce que cela signifie?
Merci
Vous avez dû toucher au code ou le fichier, est corrompu.
pulseTriac est une constante définie à la ligne 101
#define pulseTriac 22
Cdlt
bonjour a tous, j’ai mal configuré les IP au moment de la configuration, et maintenance impossible de se connecté a ESP32 comment faire.
Différents cas
– Vous pouvez lire le port série, l’ESP32 vous donnera son adresse IP
– L’ESP32 n’arrive pas à se connecter. Au bout d’une trentaine de secondes, voire plus, il repassera en mode point d’accès. Connectez vous comme pour le premier lancement
– Autour de la ligne 51
#define CLE_Rom_Init 812567808
vous changez un chiffre de la constante , l’ESP32 redémarrera comme la première fois en point d’accès à l’adresse 192.168.4.1
Cdlt
Bonjour , l’OTA ne marche chez moi (version 8.07), j’ai modifié le SSID et password du fichier, mais j’ai l’erreur:
Le croquis utilise 1198033 octets (91%) de l’espace de stockage de programmes. Le maximum est de 1310720 octets.
Les variables globales utilisent 106572 octets (32%) de mémoire dynamique, ce qui laisse 221108 octets pour les variables locales. Le maximum est de 327680 octets.
Sending invitation to 192.168.1.25
20:17:50 [ERROR]: No response from device
Failed uploading: uploading error: exit status 1
Probablement le niveau du WIFI est trop faible. L’ESP32 est vu de temps en temps par l’IDE Arduino mais pas au moment ou vous lancez le téléchargement.
Cdlt
Bonjour, pourtant je suis a coté du router WIFI avec -47 dbm . Je pense que je fais une mauvaise manip, y-a-il un tuto pour faire de lOTA ?
Cdlt
Thierry
Rebonjour , autre petit probleme, je n’arrive pas a trouver sur le web l’application « Remotedebugapp », le lien dans github est mort.
Merci
https://github.com/JoaoLopesF/RemoteDebug?tab=readme-ov-file#web-app
Bonjour, oui je connais ce lien mais j’ai l’erreur suivante :
403 Forbidden
nginx
Comme si j’avais un pb de droit ?
Bonjour André, merci pour votre travail avec beaucoup d’explications pour des néophytes comme moi, mais bon, j’ai réussi en galèrant un peu à faire fonctionner l’Esp32 avec un triac et un relai, la led du triac clignote bleu à un niveau bas de % d’ouverture’ est ce normal?
2ème question , peut on consulter à distance en dehors du domicile au moyen d’un smartphone l’application routeur RMS de l’ESP 32.
Bien cordialement
Une Led clignote à chaque mesure de puissance (toutes les 2s)
L’autre LED clignote dès qu’il y a un peu d’énergie routée.
Il faut mettre une règle NAT au niveau de votre box internet pour un accès extérieur.
https://f1atb.fr/fr/routage-des-ports-internet-ou-nat/
Cdlt
Bonjour André, c’est André…..
J’ai bien appliqué une règle Nat en recherchant un tuto pour le paramétrage d’une box Orange V5, tout fonctionne à merveille avec mon smarphone en extérieur.
Merci encore et bravo pour vos investissements.
Bonjour André.
Merci pour votre travail et le partage.
Mes données brutes dans l’interface web ne me donnent que la tension. Pas d’infos sur les puissances ?
Mon tor sur l’arrivée d’énergie à été testé dans les deux sens.
Ma led jaune clignote normalement.
Avez-vous une explication ?
Cordialement. Michel.
Quel système utilisez vos ?
UxI, UxIx2 UxIx3, Shelly..
Apparemment, vous avez un problème de sonde. Attention, il faut la mettre autour du fil de phase uniquement et non pas phase et neutre.
Cdlt
J’étais en UxIx2, j’ai essayé UxI et là ça marche.
Tout fonctionnera- t- il correctement ?
Merci André.
Je viens de changer de box et je voudrais donc remplacer ma clée wifi dans l’esp32.
Comment faire ?
Cordialement.
Si l’ESP32 n’arrive pas à se connecter au WIFI, il va au bout d’un moment repasser en mode point d’Accès que vous accèderez à l’adresse 192.168.4.1 comme lors de la première installation.
Cdlt
Merci André. J’y suis arrivé en changeant un chiffre dans la ligne 54 du programme comme indiqué dans une réponse que tu as posté.
Cordialement.
Bonsoir André,
Je me demande si le format des données fournies par EDF pour le Tempo n’a pas changé
Depuis qq jours j’ai le message suivant :
En Tetes EDF recues
Pas de données données EDF valides
Les champs J et J+1 restent a blanc
Suis-je le seul a constater le problème?
Oui, cela a changé sur le serveur d’EDF
Installez la version 8.08 qui prend en compte ce changement.
Cdlt
Bonjour André. Je suis dans la configuration UxIx2 avec un
ESP-32S CH9102X 30broches.
Câblage réalisé en tenant compte des repères des broches sur le schéma du site et ceux de l’ESP 32.
Conexion sur l’interface web de l’ESP 32 opérationnelle.
Clignotement des led ok.
Lorsque le choix de UxIx2 est fait, aucune donnée n’est affichée par contre si le choix et fait sur UxI, les affichages des données sont disponibles.
Vérification des différents raccordements.
Le choix de cet ESP 30 broches etait-il judicieux ?
Merci de votre aide et bon 1er mai.
Cordialement.
Vous devez avoir votre interface vers UxIx2 mal câblé. Inversez TX et RX, cest souvent l’erreur.
Cdlt
Bonjour André j’ai fabriqué un second routeur pour un ami il fonctionne très bien chez moi mais chez lui il est très difficile d’accéder à la page du routeur le ssid RMS-ESP32-XXXXXXXX s’affiche et repart sans cesse et quand il reste pas moyen qu’il accroche le wifi un wifi pourtant plein pot sur mon téléphone. Moi je suis chez free en vdsl et chez mon ami c’est une live box 5 fibré. Pensez vous que ce soit lié à un brouilleur ou à la box. En fibre la box n’affiche pas de dns je rentrerais celui d’orange mais je n’en suis pas là (80.10.246.2). Peut être que ça vient du fait que chez moi je l’ai paramétré en ip fixe mais comme vous me l’avez déjà dit le routeur créera son propre wifi s’il n’est pas associé à une box. Existe t-il un moyen de forcer dans l’esp32 un ssid et un mot de passe par Basic OTA par exemple? pour voir si je le vois dans le paramétrage de la box.
Cordialement.
Vous changez un chiffre à la constante près de la ligne 54 et cela virginisera tout.
Cdlt
Oui j’ai vue ça dans un post plus haut c’est ce que j’ai fais je vous tiendrais au courant si cela à fonctionné. Bonne soirée
Oui j’ai vue ça dans un post plus haut c’est ce que j’ai fais je vous tiendrais au courant si cela à fonctionné. Bonne soirée
Bonjour André.
Merci pour le partage et pour tout ce joli travail !!! j’ai fait une version UxIx2 suivant le tuto, tout s’est bien passé Arduino, fichier, transfert etc… cependant je n’arrive pas à faire connecter au WiFi mon esp32.
J’arrive sur la page 192.168.4.1, je sélectionne mon réseau et rentre le MdP, il y a d’écrit patienter 10s puis ESP32 non connecté à : « reseau wifi »
de quoi cela peut-il venir svp
merci par avance et encore bravo
Caractère spécial dans le mot de passe?