Files
esp_jardin/plan.md
T
gilles 7aa8cd2a1c init: structure initiale du projet esp_jardin
Spec, plan d'implémentation, design system, documentation de déploiement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 14:58:24 +02:00

2.8 KiB

plan.md — esp_jardin v1.0

Résumé du plan d'implémentation. Plan détaillé avec code complet : docs/superpowers/plans/2026-05-23-esp-jardin-firmware.md

Stack technique retenu

Besoin Bibliothèque Justification
HTTP + WebSocket async esp32async/ESPAsyncWebServer Fork actif (jan. 2025), non-bloquant
TCP async esp32async/AsyncTCP Dépendance d'ESPAsyncWebServer
Sondes DS18B20 paulstoffregen/OneWire + milesburton/DallasTemperature Standard, bien documenté
MQTT knolleary/PubSubClient Plus documenté, non-bloquant avec millis()
JSON bblanchon/ArduinoJson ^7 Sérialization REST + WebSocket
Filesystem LittleFS (natif framework) SPIFFS déprécié
OTA + mDNS ArduinoOTA + ESPmDNS (natifs) Inclus dans Espressif32

Architecture : structures globales partagées

Modules indépendants (.h / .cpp) communiquant via structs globales dans config.h. main.cpp = setup() + loop() uniquement.

network_init()   → setup()
sensors_init()   → setup()
web_server_init()→ setup()
mqtt_init()      → setup()

network_update()         → loop() — à chaque itération
sensors_update() → bool  → loop() — toutes les 10s, retourne true si nouvelle mesure
  └─ si true → web_server_notify_clients()
mqtt_update()            → loop() — à chaque itération

Séquence d'implémentation

Tâche Fichiers Livrable
1 platformio.ini, parametrage.md Config PlatformIO complète
2 include/config.h, src/main.cpp Structs globales, compilation OK
3 include/network.h, src/network.cpp WiFi STA/AP, mDNS, OTA
4 include/sensors.h, src/sensors.cpp DS18B20 non-bloquant, buffer circulaire
5 include/web_server.h, src/web_server.cpp HTTP REST + WebSocket
6 include/mqtt_manager.h, src/mqtt_manager.cpp MQTT + deadband
7 data/index.html Interface web complète
8 Flash + validation série Protocole de test robustesse

Principe non-bloquant (DS18B20)

loop() itération N     → sensors.requestTemperatures()  (retour immédiat)
loop() itération N+75  → getTempCByIndex() après 750 ms (conversion terminée)

Format JSON WebSocket (push)

{
  "sondes": [
    { "nom": "T°C Ext",   "temp": "19.3", "erreur": false },
    { "nom": "T°C Serre", "temp": "28.7", "erreur": false },
    { "nom": "T°C Sol",   "temp": null,   "erreur": true  }
  ],
  "uptime": 3600,
  "rssi": -62
}

Commandes essentielles

pio run                          # Compilation
pio run -t upload                # Flash firmware via USB
pio run -t uploadfs              # Flash filesystem LittleFS (index.html)
pio device monitor               # Moniteur série 115200 baud
pio run -t upload --upload-port 10.0.0.42   # OTA après déploiement