# Spécifications générales - Contexte: Application ESP32 - Stack: Arduino C++, ESPAsyncWebServer, LittleFS - Carte: ESP32 - Interface: Dashboard web responsive - Fonctionnalités clés: Gestion GPIO, OTA, WiFi/AP, Authentification, API REST # Arborescence des fichiers ``` src/ ├── main.cpp [Point d'entrée] ├── auth.h/cpp [Authentification] ├── server.h/cpp [API endpoints] └── utils.h/cpp [Helpers] data/ ├── config.json [Config par défaut] ├── index.html [Dashboard] ├── login.html [Page de login] ├── settings.html [Paramètres] ├── update.html [Mise à jour OTA] └── js/ ├── api.js [Client API] └── app.js [UI logic] └── css/ └── styles.css [Styles CSS] ``` # Spécificités ESP32 - Framework: Arduino - Système de fichiers: LittleFS - Utilisation de platformio pour la gestion des dépendances et le build ``` [env:esp32] platform = espressif32 board = esp32dev framework = arduino monitor_speed = 115200 board_build.filesystem = littlefs board_build.partitions = default.csv lib_deps = ESP32Async/ESPAsyncWebServer ESP32Async/AsyncTCP bblanchon/ArduinoJson@^7.0.0 build_flags = -DBOARD_HAS_PSRAM ``` # Spécificités dashboard web - Pages: Login, Dashboard, Paramètres, Mise à jour OTA - Technologies: HTML5, CSS3, JavaScript (Fetch API) - Sécurité: Sessions avec cookies, redirection vers login si non authentifié - Gestion des erreurs: Messages utilisateur clairs et en français - Responsive: Adapté aux mobiles et tablettes # Spécificités stockage fichiers - Système de fichiers: LittleFS - Fichiers: HTML, CSS, JS, config.json - Accès: Lecture seule pour fichiers web, lecture/écriture pour config.json - Création d'une config.json par défaut si absente au démarrage - Pas de fichiers compressés pour compatibilité avec LittleFS # Fonctionnalités OTA - Mise à jour via interface web ou via espota - Mise à jour firmware et système de fichiers depuis interface web # Spécificités API REST - Endpoints: /api/config, /api/stats - Sécurité: Authentification requise pour endpoints protégés - Réponses: Statuts HTTP et messages d'erreur clairs # Spécificités Authentification - Stockage: Nom d'utilisateur et hash SHA-256 du mot de passe dans config.json - Sécurité: Sessions avec timeout configurable - Gestion des sesssions avec cookies - Redirection vers page de login si non authentifié - Appel GET vers /logout pour déconnexion et /login pour connexion # Spécificités wifi - Modes: Station (client) et Point d'accès (AP) si absence de réseau et/ou paramètres non configurés - Sécurité: WPA2 pour Station et pour AP - Configuration: Via interface web ou fichier config.json # Spécificités logs - Sortie série pour debug en français - Niveau de log configurable (DEBUG, INFO, WARN, ERROR) # Format de configuration (config.json) ```json { "auth": { "username": "admin", "password_hash": "SHA-256" }, "wifi": { "ssid": "Réseau WiFi", "password": "***", "ap_password": "Mode AP pwd" }, "system": { "hostname": "WEBAPP", "session_timeout": 60, // minutes }, "params": { } } ```