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>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# 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)
|
||||
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
Reference in New Issue
Block a user