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:
2026-05-23 14:58:24 +02:00
commit 7aa8cd2a1c
18 changed files with 5503 additions and 0 deletions
+185
View File
@@ -0,0 +1,185 @@
# ESP Jardin — Station de monitoring environnemental
Firmware ESP32 pour une station d'acquisition de températures avec interface web temps réel, API REST et publication MQTT.
---
## Matériel requis
| Composant | Quantité | Notes |
|---|---|---|
| ESP32 DevKit V1 | 1 | ou équivalent 38 broches |
| Sonde DS18B20 | 3 | waterproof recommandé |
| Résistance 4.7 kΩ | 1 | pull-up obligatoire |
| Câbles Dupont | — | |
### Câblage
```
DS18B20 (×3 en parallèle)
VCC → 3.3V
GND → GND
DATA → GPIO 4
Résistance 4.7 kΩ entre 3.3V et GPIO 4 (pull-up)
```
> **Important :** Sans la résistance pull-up, les sondes retournent systématiquement 127°C.
---
## Prérequis logiciels
- [VS Code](https://code.visualstudio.com/) + extension [PlatformIO](https://platformio.org/)
- Python 3 (requis par PlatformIO)
---
## Installation et premier flash
### 1. Configurer le WiFi
Éditer `include/config.h` :
```cpp
#define WIFI_SSID "VotreSSID"
#define WIFI_PASS "VotreMotDePasse"
```
### 2. Configurer le broker MQTT (optionnel)
Dans `include/config.h` :
```cpp
#define MQTT_BROKER "192.168.1.x" // IP du broker Mosquitto
#define MQTT_PORT 1883
```
### 3. Compiler et flasher
```bash
# Flash du firmware
pio run -t upload
# Flash de l'interface web (LittleFS)
pio run -t uploadfs
# Moniteur série (débogage)
pio device monitor
```
### 4. Vérifier le boot
```
[BOOT] esp_jardin v1.0 — démarrage...
[WIFI] Connexion STA → SSID: VotreSSID
[WIFI] Connecté — IP: 192.168.1.42
[mDNS] Accessible via http://esp_jardin.local
[OTA] Prêt
[FS] LittleFS monté
[HTTP] Serveur web démarré sur port 80
[SONDES] 3 capteur(s) DS18B20 détecté(s) sur GPIO 4
```
---
## Accès à l'interface
Une fois connecté à votre réseau :
```
http://esp_jardin.local # Via mDNS
http://192.168.1.42 # Via IP directe
```
---
## Mode Access Point de secours
Si le WiFi est indisponible au démarrage, l'ESP crée automatiquement un point d'accès :
| Paramètre | Valeur |
|---|---|
| SSID | `ESP_CHEF_JARDIN` |
| Mot de passe | `Jardin2026` |
| IP de l'interface | `192.168.4.1` |
L'interface web reste accessible. Le broker MQTT est désactivé en mode AP.
L'ESP tente de se reconnecter au WiFi STA toutes les 60 secondes.
---
## API REST
| Méthode | Endpoint | Description |
|---|---|---|
| GET | `/api/status` | État système (WiFi, MQTT, RAM, uptime) |
| GET | `/api/temperatures` | Températures instantanées |
| GET | `/api/history` | Historique 24h (288 points) |
| POST | `/api/config` | Mise à jour configuration |
**Exemple `/api/temperatures` :**
```json
{ "sonde_1": "19.3", "sonde_2": "28.7", "sonde_3": null, "unit": "C" }
```
`null` = sonde en erreur ou déconnectée.
**Exemple POST `/api/config` :**
```bash
curl -X POST http://esp_jardin.local/api/config \
-H "Content-Type: application/json" \
-d '{"intervalleMs": 5000, "mqttBroker": "10.0.0.3", "mqttPort": 1883}'
```
---
## MQTT
Topics publiés (retain=true) :
| Sonde | Topic | Deadband |
|---|---|---|
| T°C Extérieur | `maison/jardin/ext/temperature` | 0.2°C |
| T°C Serre | `maison/jardin/serre/temperature` | 0.1°C |
| T°C Sol | `maison/jardin/sol/temperature` | 0.1°C |
Payload : valeur numérique en string, ex : `"19.3"`. Les erreurs ne sont jamais publiées.
---
## Mise à jour OTA (après déploiement)
```bash
# Remplacer 192.168.1.42 par l'IP réelle de la carte
pio run -t upload --upload-port 192.168.1.42
# Mot de passe OTA : Jardin2026
```
Le mot de passe OTA peut être changé dans `include/config.h` (`OTA_PASS`) et `platformio.ini` (`upload_flags = --auth=...`).
---
## GPIO disponibles pour extensions futures
| GPIO | Usage futur | Interface |
|---|---|---|
| 21 / 22 | Capteur BH1750 (luminosité) ou SHT31 (T°/Humidité) | I2C |
| 32 / 33 | Capteur humidité sol | ADC1 (compatible WiFi) |
| 25 / 26 | Relais / électrovanne | Digital out |
| 14 | Pluviomètre à augets | Interruption |
| 27 | Bouton reset / forçage AP | Interruption |
> **Ne jamais utiliser ADC2** (GPIO 3439) quand le WiFi est actif — conflit hardware ESP32.
---
## Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
| Sonde affiche 127°C | Résistance pull-up absente ou câble défectueux | Vérifier la résistance 4.7 kΩ sur GPIO 4 |
| Sonde affiche 85.0°C | Sonde en court-circuit ou alimentation insuffisante | Vérifier l'alimentation 3.3V |
| Interface web inaccessible | LittleFS non flashé | `pio run -t uploadfs` |
| `esp_jardin.local` ne répond pas | mDNS non supporté sur certains réseaux | Utiliser l'IP directe |
| OTA échoue | Mauvais mot de passe | Vérifier `OTA_PASS` dans `config.h` |