Bonjour,
A 57 ans je débute en programmation donc soyez indulgent et excusez moi par avance si mes questions ou bêtes ou si je ne présente pas bien les choses.
Voila plusieurs mois que je travail sur mon projet et j'ai surmonté toutes les difficultés en trouvant les réponses sur les forums et autres tuto YouTube.
Malheureusement je rencontre un problème que je n'arrive pas à résoudre.
Mon projet consiste à lire des capteurs branchés sur un ESP32 WROOM 32 et à afficher les valeurs sur une page Web hébergée sur ce même ESP32.
Les pages sont statiques et programmées directement dans le fichier main.cpp
La lecture des capteur fonctionne, l'affichage des pages aussi.
Mon soucis est que quand je laisse l'ESP32 branché, tout fonctionne parfaitement bien un certain temps (aléatoire entre 1h et 48h) puis il perd la connexion Wifi et affiche dans le terminal des suite de caractères illisibles qui défile en continue jusqu'à saturer le terminal.
Je précise que dans mon code tous les Serial.print s'affiche correctement.
Par hasard, je me suis rendu compte que si je ferme la page web sur mon smartphone après avoir consulté les valeurs des capteurs, le système ne plante pas (du moins il a tourné 3 jours complet sans problème contre 2 jours maxi si je laisse la page ouverte).
J'ai donc pensé à un problème de "client" dont il faut forcer la déconnection au bout d'un certain temps. J'ai donc inséré dans mon code
int numClients = server.client().available(); // indique le nombre de client connecté
if (numClients > 0)
{
Serial.print("Nombre de clients connectés : ");
Serial.println(numClients);
}
else
{
Serial.println("Aucun clients connecté");
}
delay(2000);
Mauvaise pioche, même en changeant de page sur mon smartphone le terminal m'affiche toujours Aucun client connecté.
Lors de la compilation je n'ai pas d'erreur:
- Executing task: C:\Users\miche.platformio\penv\Scripts\platformio.exe run --target upload
Processing upesy_wroom (platform: espressif32; board: upesy_wroom; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via -v, --verbose
option
CONFIGURATION: Redirecting...
PLATFORM: Espressif 32 (6.3.0) > uPesy ESP32 Wroom DevKit
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 @ 3.20009.0 (2.0.9)
- tool-esptoolpy @ 1.40501.0 (4.5.1)
- tool-mkfatfs @ 2.0.1
- tool-mklittlefs @ 1.203.210628 (2.3)
- tool-mkspiffs @ 2.230.0 (2.30)
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> Library Dependency Finder (LDF) — PlatformIO latest documentation
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 37 compatible libraries
Scanning dependencies...
Dependency Graph
|-- OneWire @ 2.3.7
|-- DallasTemperature @ 3.11.0
|-- UrlEncode @ 1.0.1
|-- ESPmDNS @ 2.0.0
|-- HTTPClient @ 2.0.0
|-- Preferences @ 2.0.0
|-- WebServer @ 2.0.0
|-- WiFi @ 2.0.0
|-- WiFiManager @ 2.0.16-rc.2
Building in release mode
Compiling .pio\build\upesy_wroom\src\main.cpp.o
Linking .pio\build\upesy_wroom\firmware.elf
Retrieving maximum program size .pio\build\upesy_wroom\firmware.elf
Checking size .pio\build\upesy_wroom\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [== ] 17.3% (used 56700 bytes from 327680 bytes)
Flash: [====== ] 64.7% (used 1356121 bytes from 2097152 bytes)
Building .pio\build\upesy_wroom\firmware.bin
esptool.py v4.5.1
Creating esp32 image...
Merged 25 ELF sections
Successfully created esp32 image.
Configuring upload protocol...
AVAILABLE: cmsis-dap, esp-bridge, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h,
olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esptool
Looking for upload port...
Auto-detected: COM3
Uploading .pio\build\upesy_wroom\firmware.bin
esptool.py v4.5.1
Serial port COM3
Connecting....
Chip is ESP32-D0WD-V3 (revision v3.0)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: a8:42:e3:90:64:80
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00001000 to 0x00005fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00010000 to 0x0015cfff...
Compressed 18960 bytes to 13073...
Writing at 0x00001000... (100 %)
Wrote 18960 bytes (13073 compressed) at 0x00001000 in 0.7 seconds (effective 227.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 134...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (134 compressed) at 0x00008000 in 0.1 seconds (effective 285.8 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 47...
Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.2 seconds (effective 412.2 kbit/s)...
Hash of data verified.
Compressed 1361872 bytes to 799442...
Writing at 0x00010000... (2 %)
.....
Writing at 0x00157f58... (100 %)
Wrote 1361872 bytes (799442 compressed) at 0x00010000 in 19.6 seconds (effective 556.0 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
===================================================== [SUCCESS] Took 54.11 seconds =====================================================
A noter que comme je n'avais pas assez de place en mémoire Flash pour mon programme, j'ai modifié la réservation mémoire en supprimant l'espace réservé pour l'OTA pour disposer de plus de mémoire pour mon programme.
Mes pages web sont envoyées avec les commandes
server.setContentLength(page.length());
server.send(200, "text/html", page);
ou
server.sendHeader("Location","/");
server.send(303);
Dans mon code j'ai ajouté une partie qui surveille l'état du Wifi et qui tente de se reconnecté si l'ESP n'est plus connecté. Cela fonctionne quand je coupe le Wifi de ma box manuellement et que je le remets mais pas quand le système bug. A croire qu'il tourne en boucle dans un sous programme???
Si vous avez des pistes pour m'aider à trouver l'origine du bug et/ou comment le résoudre je suis preneur.
D'avance merci pour votre aide.