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.

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.

Localisation du CP1202

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 par Telnet. Logiciel Putty

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.

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

ESP32 pinout

F1ATB André

Radio Amateur - Domotique - Photovoltaïque

Vous aimerez aussi...

209 réponses

  1. bruey dit :

    Bonjour André,
    Super site et beau travail. Je l’ai parcouru en large et travers. Il semble y avoir des problèmes de lien sur certaines pages en ce moment ou c’est moi ?
    Lien sur pages ou questions réponses !

    • F1ATB André dit :

      Désolé, je suis en train de mettre un forum. Cela m’a mis le bazar sur certains liens. Je corrige.

  2. fontaine dit :

    bonsoir André
    tout d’abord merci pour ce super programme

    pouvez vous me dire à quoi correspond la Led Bleu qui clignote sur l’ ESP32 ?

  3. Dominique F1RWB dit :

    73 André
    J’essaye de compiler le programme Solar_Router_V7_03_RMS et j’ai une erreur qui s’affiche. Avez-vous une idée d’ou cela peut venir ?
    Merci d’avance
    F1RWB

    /Users/domi/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

    • F1ATB André dit :

      Lisez le chapitre Bugs Soft
      Cdlt

      • Dominique F1RWB dit :

        Merci effectivement ça fonctionne mieux mais j’ai une autre erreur au télé versement :

        Le croquis utilise 1187809 octets (90%) de l’espace de stockage de programmes. Le maximum est de 1310720 octets.
        Les variables globales utilisent 84684 octets (25%) de mémoire dynamique, ce qui laisse 242996 octets pour les variables locales. Le maximum est de 327680 octets.
        esptool.py v4.5.1
        Serial port /dev/cu.usbserial-120
        Connecting….
        Chip is ESP32-D0WD-V3 (revision v3.1)
        Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
        Crystal is 40MHz
        MAC: e4:65:b8:4a:1a:d8
        Uploading stub…
        Running stub…
        Stub running…
        Changing baud rate to 921600
        Changed.

        A fatal error occurred: Unable to verify flash chip connection (Invalid head of packet (0xE0): Possible serial noise or corruption.).
        Failed uploading: uploading error: exit status 2

  4. Olivier42 dit :

    Bonjour,
    Que de changements par rapport à la V2 !
    Un énorme travail !
    J’ai une question : en cas d’utilisation e 2 ou trois modules triac déportés, comment est gérée la priorisation ?
    Je m’explique : le premier triac est dédié au chauffage de l’ECS (ballon) sur une résistance de 1kW, le second au chauffage de l’ECS (ballon) sur la deuxième résistance de 1kW et le troisième module au chauffage de l’eau d’un spa (résistance de 3kW). Comment gérer la priorité que l’on souhaite (1, puis 1 et 2, puis 1,2 et 3 si la puissance le permet) par exemple si la température de consigne a été atteinte sur 1 et 2 ?
    Bonne journée.

  5. di gioia dit :

    Je commence mon routeur après avoir fini de poser les panneaux sur le toit je suis en station de ski en Savoie ce n’est pas facile avec la neige

  6. di gioia dit :

    Oui j’ai oublié ma question pour televerser le programme le routeur il faut qu’il soit câblé ?

  7. lionel dit :

    Bonjour,
    Lorsque je compile apparait cette erreur, pourquoi ?
    Merci

    c:\Users\Lionel\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

    • F1ATB André dit :

      Regardez en bas de page, le chapitre Bugs Soft. La solution est donnée

      Cdlt

    • lionel dit :

      Pb resolu en faisant ce qui est ecrit dans la page

      hwcrypto/sha.h

      Sur certaines configurations, lors de la compilation, il y a une erreur de librairie inexistante :…..include
      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
      par
      #include

  8. JJM dit :

    Bonjour André , bonjour à tous
    j’ai cet affichage en fin de téléversement :
    Leaving…
    Hard resetting via RTS pin…
    c’est la version :Solar_Router_V8_01_RMS, que j’essaie d’injecter
    que dois je faire apres ?
    merci pour votre aide

  9. TIGNOL dit :

    Bonjour,
    Je suis novice et je n’arrive pas à installer votre programme dans l’esp32 que ce soit avec l’IDE Aduino ou avec Visual Studio Code.
    Est-ce envisageable que je vous fasse parvenir les esp32 afin de les programmer AVEC DÉDOMMAGEMENT bien sûr?
    Cordialement
    Jean Michel

    • F1ATB André dit :

      Plus simple.
      Vous connectez le routeur à votre PC avec l’IDE Arduino. Je prends le contrôle à distance depuis mon PC (Assistance Rapide Windows).
      Une fois résolu, vous mettez un don 😉

      Contactez-moi sur f1atb.fr@gmail.com et je vous passerai mon mobile.

      André
      F1ATB

  10. DUCATEL Jacques dit :

    Bonjour André
    Encore merci pour ce travail titanesque , j’ai plusieurs esp avec triac mais avec tout ce monde avoir une régulation propre est difficile même en jouant sur le %
    ne serait t-il pas intéressant d’avoir un ESP pilote et des ESP esclaves , le pilote pouvant gérer des priorités triacs, ou relais ssr

  11. Phil33 dit :

    Bonjour André, je n’ai que windows 7, la version « arduino-1.8.19-windows » est-elle compatible avec la dernière version du programme routeur.

  12. Michoua dit :

    bonjour, j’ai un peu de mal à programmer mon esp32. Je suis sur portable et j’ai donc du remplacer hwcrypto/sha.h par esp32/sha.h
    J’ai maintenant ces lignes d’erreurs:
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino: In function ‘void setup()’:
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:451:3: error: ‘init_puissance’ was not declared in this scope
    init_puissance();
    ^~~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:451:3: note: suggested alternative: ‘initVariant’
    init_puissance();
    ^~~~~~~~~~~~~~
    initVariant
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:472:3: error: ‘INIT_EEPROM’ was not declared in this scope
    INIT_EEPROM();
    ^~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:472:3: note: suggested alternative: ‘EEPROM’
    INIT_EEPROM();
    ^~~~~~~~~~~
    EEPROM
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:475:24: error: ‘LectureCle’ was not declared in this scope
    unsigned long Rcle = LectureCle();
    ^~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:478:5: error: ‘LectureEnROM’ was not declared in this scope
    LectureEnROM();
    ^~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:479:5: error: ‘LectureConsoMatinJour’ was not declared in this scope
    LectureConsoMatinJour();
    ^~~~~~~~~~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:482:5: error: ‘RAZ_Histo_Conso’ was not declared in this scope
    RAZ_Histo_Conso();
    ^~~~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:559:3: error: ‘Init_Server’ was not declared in this scope
    Init_Server();
    ^~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:559:3: note: suggested alternative: ‘ntpServer2’
    Init_Server();
    ^~~~~~~~~~~
    ntpServer2
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:573:5: error: ‘Setup_UxIx2’ was not declared in this scope
    Setup_UxIx2();
    ^~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:576:5: error: ‘Setup_UxI’ was not declared in this scope
    Setup_UxI();
    ^~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:579:5: error: ‘Setup_Linky’ was not declared in this scope
    Setup_Linky();
    ^~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:579:5: note: suggested alternative: ‘DataRawLinky’
    Setup_Linky();
    ^~~~~~~~~~~
    DataRawLinky
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:582:5: error: ‘Setup_Enphase’ was not declared in this scope
    Setup_Enphase();
    ^~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:582:5: note: suggested alternative: ‘TokenEnphase’
    Setup_Enphase();
    ^~~~~~~~~~~~~
    TokenEnphase
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino: In function ‘void Task_LectureRMS(void*)’:
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:657:9: error: ‘LectureUxI’ was not declared in this scope
    LectureUxI();
    ^~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:661:9: error: ‘LectureUxIx2’ was not declared in this scope
    LectureUxIx2();
    ^~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:665:9: error: ‘LectureLinky’ was not declared in this scope
    LectureLinky();
    ^~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:669:9: error: ‘LectureEnphase’ was not declared in this scope
    LectureEnphase();
    ^~~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:669:9: note: suggested alternative: ‘TokenEnphase’
    LectureEnphase();
    ^~~~~~~~~~~~~~
    TokenEnphase
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:674:9: error: ‘LectureSmartG’ was not declared in this scope
    LectureSmartG();
    ^~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:679:9: error: ‘LectureShellyEm’ was not declared in this scope
    LectureShellyEm();
    ^~~~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:684:9: error: ‘CallESP32_Externe’ was not declared in this scope
    CallESP32_Externe();
    ^~~~~~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino: In function ‘void loop()’:
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:737:7: error: ‘envoiAuMQTT’ was not declared in this scope
    envoiAuMQTT();
    ^~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:738:7: error: ‘JourHeureChange’ was not declared in this scope
    JourHeureChange();
    ^~~~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:790:5: error: ‘JourHeureChange’ was not declared in this scope
    JourHeureChange();
    ^~~~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:791:5: error: ‘Call_EDF_data’ was not declared in this scope
    Call_EDF_data();
    ^~~~~~~~~~~~~
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino: In function ‘void time_sync_notification(timeval*)’:
    C:\Users\houan\AppData\Local\Temp\326c5471-fd14-4b18-a3d5-3e16eb81fb15_Solar_Router_V8_05_RMS.zip.b15\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:912:3: error: ‘JourHeureChange’ was not declared in this scope
    JourHeureChange();
    ^~~~~~~~~~~~~~~

    et enfin

    exit status 1

    Compilation error: ‘init_puissance’ was not declared in this scope

    que dois je faire?

    • F1ATB André dit :

      Apparament vous n’avez pas dezippé le fichier.zip

      Dezippez dans un dossier

      • Michoua dit :

        apres avoir dezippé voilà les messages d’erreurs:
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino: In function ‘void DeviceToDiscover(String, String, String, String)’:
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino:116:26: warning: ‘DynamicJsonDocument’ is deprecated: use JsonDocument instead [-Wdeprecated-declarations]
        DynamicJsonDocument doc(512); // this is the Payload json format
        ^
        In file included from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:53,
        from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
        from C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:70:
        c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/compatibility.hpp:125:58: note: declared here
        class ARDUINOJSON_DEPRECATED(« use JsonDocument instead ») DynamicJsonDocument
        ^~~~~~~~~~~~~~~~~~~
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino:137:43: warning: ‘ArduinoJson::V703PB2::JsonObject ArduinoJson::V703PB2::JsonDocument::createNestedObject(TChar*) [with TChar = const char]’ is deprecated: use doc[key].to() instead [-Wdeprecated-declarations]
        device = doc.createNestedObject(« device »);
        ^
        In file included from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:33,
        from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
        from C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:70:
        c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/JsonDocument.hpp:325:14: note: declared here
        JsonObject createNestedObject(TChar* key) {
        ^~~~~~~~~~~~~~~~~~
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino: In function ‘void DeviceBinToDiscover(String, String)’:
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino:154:26: warning: ‘DynamicJsonDocument’ is deprecated: use JsonDocument instead [-Wdeprecated-declarations]
        DynamicJsonDocument doc(512); // this is the Payload json format
        ^
        In file included from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:53,
        from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
        from C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:70:
        c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/compatibility.hpp:125:58: note: declared here
        class ARDUINOJSON_DEPRECATED(« use JsonDocument instead ») DynamicJsonDocument
        ^~~~~~~~~~~~~~~~~~~
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino:172:43: warning: ‘ArduinoJson::V703PB2::JsonObject ArduinoJson::V703PB2::JsonDocument::createNestedObject(TChar*) [with TChar = const char]’ is deprecated: use doc[key].to() instead [-Wdeprecated-declarations]
        device = doc.createNestedObject(« device »);
        ^
        In file included from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:33,
        from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
        from C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:70:
        c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/JsonDocument.hpp:325:14: note: declared here
        JsonObject createNestedObject(TChar* key) {
        ^~~~~~~~~~~~~~~~~~
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino: In function ‘void DeviceTextToDiscover(String, String)’:
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino:182:26: warning: ‘DynamicJsonDocument’ is deprecated: use JsonDocument instead [-Wdeprecated-declarations]
        DynamicJsonDocument doc(512); // this is the Payload json format
        ^
        In file included from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:53,
        from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
        from C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:70:
        c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/compatibility.hpp:125:58: note: declared here
        class ARDUINOJSON_DEPRECATED(« use JsonDocument instead ») DynamicJsonDocument
        ^~~~~~~~~~~~~~~~~~~
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino:196:43: warning: ‘ArduinoJson::V703PB2::JsonObject ArduinoJson::V703PB2::JsonDocument::createNestedObject(TChar*) [with TChar = const char]’ is deprecated: use doc[key].to() instead [-Wdeprecated-declarations]
        device = doc.createNestedObject(« device »);
        ^
        In file included from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:33,
        from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
        from C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:70:
        c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/JsonDocument.hpp:325:14: note: declared here
        JsonObject createNestedObject(TChar* key) {
        ^~~~~~~~~~~~~~~~~~
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino: In function ‘void SendDataToHomeAssistant()’:
        C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\MQTT.ino:212:26: warning: ‘DynamicJsonDocument’ is deprecated: use JsonDocument instead [-Wdeprecated-declarations]
        DynamicJsonDocument doc(1024); // 1024 octets = capacité largement suffisante
        ^
        In file included from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:53,
        from c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
        from C:\Users\houan\Downloads\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS\Solar_Router_V8_05_RMS.ino:70:
        c:\Users\houan\OneDrive\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/compatibility.hpp:125:58: note: declared here
        class ARDUINOJSON_DEPRECATED(« use JsonDocument instead ») DynamicJsonDocument
        ^~~~~~~~~~~~~~~~~~~

        et concernant le bug hwcrypto/sha.h aprés avoir remplacé par esp32/sha.h j’ai cette erreur:
        c:\Users\houan\OneDrive\Documents\Arduino\libraries\RemoteDebug\src\utility\WebSockets.cpp:42:
        C:\Users\houan\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11/tools/sdk/esp32/include/mbedtls/port/include/esp32/sha.h:20:2: warning: #warning esp32/sha.h is deprecated, please use sha_parallel_engine.h instead [-Wcpp]
        #warning esp32/sha.h is deprecated, please use sha_parallel_engine.h instead

        Merci beaucoup pour votre aide

        • F1ATB André dit :

          Soit il vous manque des bibliothèques , soit vous n’avez pas lancez la compilation du bon fichier .ino
          Relisez bien la page : https://f1atb.fr/fr/routeur-photovoltaique-realisation-logicielle/

          Cdlt

          • Michoua dit :

            merci pour cette reponse rapide, j’ai installé les bibliothéques : remotedebug, pubsubclient, onewire, dallastemperature, urlencode et arduinojson.
            J’ai telechargé et dezippé Solar router v8_05_rms dans un dossier. Depuis ce dossier j’ai cliqué sur Solar router v8_05_rms qui ouvre l’application Arduino IDE 2.3.2.
            Je remplace hwcrypto par esp32 et je clique sur verifier. J’obtiens alors les lignes d’erreurs de mon message précedent…
            où se situe mon erreur?

          • F1ATB André dit :

            Si ce n’est que des warnings, laissez tomber. Ce ne sont que les erreurs qui sont critiques.

          • Michoua dit :

            En effet malgré les warnings le routeur semble fonctionner parfaitement.
            Merci André pour votre aide.

          • F1ATB André dit :

            Les Warnings ne gênent pas.

            Cdlt

  13. Laurent dit :

    bonsoir André,

    j’ai moi aussi un problème de compilation qui s’arrete sur ces messages :
    Compilation du croquis…
    « C:\\Users\\laurent\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\esp-12.2.0_20230208/bin/xtensa-esp32-elf-g++ » -MMD -c « @C:\\Users\\laurent\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-…………………
    C:\Users\laurent\Documents\Arduino\libraries\ArduinoJson
    Utilisation de la bibliothèque UrlEncode version 1.0.1 dans le dossier: C:\Users\laurent\Documents\Arduino\libraries\UrlEncode
    exit status 1

    Compilation error: invalid conversion from ‘int’ to ‘const esp_task_wdt_config_t*’ [-fpermissive]

    j’ai bien vérifié que j’avais les bonnes bibliothèques et le bon fichier dézippé …
    je suis un peu perdu, merci de bien vouloir m’éclairer.

  14. F1ATB dit :

    Avez vous mis la librairie pour les ESP32 et choisi la bonne carte ESP32 Dev

  15. Laurent dit :

    bonsoir, oui j’ai la librairie pour les ESP32 et j’ai une carte ESP32-wroom-32u avec un cp2102 de silabs et j’ai toujours la même erreur

  16. Laurent dit :

    j’ai tenté de compiler la version précédente la version7 et j’ai les mêmes erreurs, j’en déduis que j’ai un problème au niveau du paramétrage de l’Arduino

  17. laurent dit :

    Pour info, j’ai réussi à compiler le programme sans problème sur le PC portable de ma fille…. il m’a semblé procéder de la même façon qu’avec mon PC ??? l’essentiel c’est que j’ai un modulé qui fonctionne mais je ne sais expliquer pourquoi j’avais un plantage sur mon PC et pourquoi ça a fonctionné sur celui de ma fille ?Merci à André pour l’assistance et la disponibilité.

  18. Cédric B dit :

    Bonjour André,
    J’ai découvert votre site et vos vidéos récemment, et vous félicite pour la qualité du contenu, votre maitrise technique et votre pédagogie pour vulgariser ces sujets
    Je souhaiterais mettre en place un routeur solaire pour alimenter mon chauffe-eau ; sur les infos présentes sur votre site, j’ai commandé les éléments suivants :
    – Pour la mesure : JSY-MK-194
    – Pour le traitement : ESP32-WROOM
    – Pour l’actionneur : un gradateur RobotDyn 24A + BTA40-800B pour remplacer le TRIAC
    Je suis novice sur le sujet et aurais quelques questions (peut-être bêtes…):
    Avec mon installation solaire (7.5kWc), je risque d’avoir régulièrement des surplus supérieurs à 4 voire 5kw. Sachant que mon chauffe-eau a une conso max de 3300kw, comment est-ce qu’on limite la puissance envoyée au chauffe-eau ?
    Est-ce que cette puissance max peut-être définie (dans le code ou ailleurs) ?
    Merci d’avance pour votre retour éclairé
    Cordialement
    Cédric

    • F1ATB André dit :

      Si vous avez 4kW de surplus et que votre chauffe-eau ne peut absorber que 3.3kW, le Triac s’ouvrira à 100%. Le Chauffe-eau n’absorbera que 3.3kw et les 700W restants iront vers Enedis ou un autre appareil chez vous.

      On peut dans le paramétrage des Actions limiter l’ouverture maximum à moins de 100% si on souhaite privilégier l’envoi de la puissance vers un autre dispositif.

      Cdlt

  19. Biodom dit :

    Bonjour André, comment faites vous pour déclencher 2 sorties en décalés lorsque lorsqu’on a par exemple une surproduction de 1200w avec 2 élements délesteurs par relais dont un par ex qui consomme 1000wet l’autre 500w? quel est celui qui va prendre le dessus svp.

    Merci et très beau travail avec ce routeur

    • F1ATB André dit :

      Mettre 2 relais en multi-sinus et décaller les seuils de régulation. Un à 0W et l’autre à -50W par exemple.

      Cdlt

      • Titi21 dit :

        Bonsoir, je rebondi un peu sur le sujet.

        Ayant 1 routeur maitre et 2 autres déclaré en externe pour délester, en utilisant un à 0w l’autre après plusieurs essai -40/-50 etc et sur le 3e routeurs avec des para différent je fais relativement pas mal d’injection.
        Autant sur un seul routeur c’est le top de chez top mais ensuite avec 2 autres routeurs supplémentaire ça change la donne.

        Pour pouvoir arriver à avoir un délestage correct, je pense qu’il serait utile d’avoir une variable ou je ne sais quoi d’autre qui interdit le 2e routeur de déclencher le triac temps que le premier ne soit arriver a la puissance max indiquer dans le Ouvre Max.

        Ce n’est qu’une sujétion de ma réflexion mais cela apporterez une garantie fiable sur le délestage.

        Merci
        Cdil

        • F1ATB André dit :

          Oui si on met -50, on fait une peu d’injection mais ce n’est pas énorme quand on fait le calcul en Wh. Exemple 50W*4h =200Wh=0.06€.
          Ou on peut mettre des seuils près de zéro et baisser la reactivité de ceux moins privilégié.
          On peut aussi faire des plages horaires différentes.

          Passer des ordres entre les ESP. Je ne suis pas pour. Cela complexifie et risque de créer des blocages si un ESP ne fonctionne pas.

          Cdlt

          • Titi21 dit :

            Ok, c’est pas tellement de passer un ordre entre esp mais plutôt dire il a le droit car le triac est a fond sinon il n’a pas le droit.

            C’est bien l’esp externe qui contacte le routeur maître ?

            Merci

  20. Biodom dit :

    ok merci je vais essayer cela alors je n’y avait pas pensé .. La tempo agit elle à l’enclenchement et au déclenchement? si on met 10s par exemple on ne pourra déclencher qu’après 10s de fonctionnement puis après il faudra à nouveau attendre 10s pour réenclencher?
    Merci encore