# ESP32 Webapp Squelette d'application web pour ESP32 avec interface de gestion via dashboard web responsive. ## 🔔 FonctionnalitĂ©s - **Dashboard web responsive** - Interface utilisateur moderne et adaptative - **Authentification sĂ©curisĂ©e** - SystĂšme de login avec sessions et hash SHA-256 - **Configuration WiFi** - Mode Station et Point d'AccĂšs automatique - **API REST** - Endpoints pour configuration, statistiques et changement de mot de passe - **Gestion des mots de passe** - Changement sĂ©curisĂ© avec validation de l'ancien mot de passe - **Mise Ă  jour OTA** - Mise Ă  jour du firmware et systĂšme de fichiers via web avec modales de confirmation - **Compression gzip** - Optimisation automatique des assets (~70% de rĂ©duction) - **SystĂšme de fichiers LittleFS** - Stockage de configuration et fichiers web ## 📋 PrĂ©requis - ESP32 - PlatformIO - CĂąble USB pour le tĂ©lĂ©versement initial ## 🚀 Installation ### 1. Compiler le projet ```bash platformio run --environment esp32 ``` ### 2. TĂ©lĂ©verser le firmware ```bash platformio run --environment esp32 --target upload ``` ### 3. TĂ©lĂ©verser le systĂšme de fichiers (data/) ```bash platformio run --environment esp32 --target uploadfs ``` ### 4. Moniteur sĂ©rie (optionnel) ```bash platformio device monitor --environment esp32 ``` ## 🔐 Connexion initiale ### PremiĂšre connexion 1. Au premier dĂ©marrage, l'ESP32 crĂ©e un point d'accĂšs WiFi : - **SSID** : `ESP32-Webapp` - **Mot de passe** : `webapp123` 2. Connectez-vous au point d'accĂšs depuis votre appareil 3. Ouvrez un navigateur web et accĂ©dez Ă  : `http://192.168.4.1` 4. Identifiants par dĂ©faut : - **Utilisateur** : `admin` - **Mot de passe** : `admin` ⚠ **Important** : Changez le mot de passe par dĂ©faut aprĂšs la premiĂšre connexion! ## ⚙ Configuration WiFi ### Configurer la connexion WiFi Station 1. AccĂ©dez Ă  la page **ParamĂštres** 2. Section **Configuration WiFi** 3. Entrez le SSID et le mot de passe de votre rĂ©seau 4. Cliquez sur **Enregistrer WiFi** 5. L'ESP32 redĂ©marre et se connecte Ă  votre rĂ©seau ### Changer le mot de passe 1. AccĂ©dez Ă  la page **ParamĂštres** 2. Section **Changer le mot de passe** 3. Entrez votre mot de passe actuel 4. Entrez le nouveau mot de passe et confirmez 5. Cliquez sur **Changer le mot de passe** 6. Vous serez automatiquement redirigĂ© vers la connexion ### Mode Point d'AccĂšs Si la connexion WiFi Ă©choue ou n'est pas configurĂ©e, l'ESP32 dĂ©marre automatiquement en mode Point d'AccĂšs (AP). ## đŸ“± Interface Web ### Pages disponibles - **Tableau de bord** (`/index.html`) - Statistiques et contrĂŽles - **ParamĂštres** (`/settings.html`) - Configuration WiFi, systĂšme, mot de passe - **Mise Ă  jour** (`/update.html`) - Mise Ă  jour OTA du firmware - **Connexion** (`/login.html`) - Page d'authentification ### Endpoints API #### Configuration - `GET /api/config` - RĂ©cupĂ©rer la configuration - `POST /api/config` - Enregistrer la configuration #### Authentification - `POST /login` - Se connecter (username + password) - `GET /logout` - Se dĂ©connecter (redirection 302 vers `/`) #### Gestion des mots de passe - `POST /api/password` - Changer le mot de passe (validation de l'ancien mot de passe requise) #### Statistiques - `GET /api/stats` - RĂ©cupĂ©rer les statistiques systĂšme (uptime, heap, WiFi, IP) #### Mise Ă  jour - `POST /api/update` - Mise Ă  jour OTA (firmware ou filesystem) ## 🔧 Structure du projet ``` esp32Webapp/ ├── src/ │ ├── main.cpp # Point d'entrĂ©e │ ├── auth.h/cpp # Gestion authentification │ ├── server.h/cpp # Serveur web et API │ └── utils.h/cpp # Fonctions utilitaires ├── data/ │ ├── config.json # Configuration par dĂ©faut │ ├── index.html # Dashboard │ ├── login.html # Page de connexion │ ├── settings.html # Page paramĂštres │ ├── update.html # Page mise Ă  jour OTA │ ├── js/ │ │ ├── api.js # Client API │ │ ├── app.js # Logique UI │ │ └── crypto-js.min.js # Hachage SHA-256 cĂŽtĂ© client │ └── css/ │ └── styles.css # Styles CSS ├── platformio.ini # Configuration PlatformIO ├── platformio_extra.py # Script d'optimisation (compression gzip) ├── compress_assets.py # Compression assets CSS/JS/HTML └── README.md # Cette documentation ``` ## 🔄 Mise Ă  jour OTA ### Via l'interface web 1. Compilez votre nouveau firmware : `platformio run --environment esp32` 2. AccĂ©dez Ă  la page **Mise Ă  jour** 3. SĂ©lectionnez le fichier `.bin` dans `.pio/build/esp32/firmware.bin` 4. Confirmez via le modal de confirmation 5. Attendez la fin du tĂ©lĂ©versement et le redĂ©marrage automatique ### Mise Ă  jour du syst\u00e8me de fichiers 1. Compilez l'image filesystem : `platformio run --environment esp32 --target buildfs` 2. AccĂ©dez Ă  la page **Mise Ă  jour** 3. SĂ©lectionnez le fichier `.bin` de filesystem 4. Confirmez via le modal (⚠ toutes les donnĂ©es seront effacĂ©es) 5. Le systĂšme redĂ©marrera automatiquement ### Compression automatique des assets Tous les assets CSS, JS et HTML sont compressĂ©s automatiquement en gzip avant la construction du filesystem : - **Script** : `compress_assets.py` compresse les fichiers - **Hook** : `platformio_extra.py` l'exĂ©cute automatiquement avant `buildfs` - **Avantage** : ~70% de rĂ©duction de taille des fichiers statiques ## 📊 Configuration (config.json) ```json { "auth": { "username": "admin", "password_hash": "hash_sha256_du_mot_de_passe" }, "wifi": { "ssid": "Nom_du_rĂ©seau", "password": "mot_de_passe_wifi", "ap_password": "webapp123" }, "system": { "hostname": "ESP32-Webapp", "session_timeout": 60 }, "params": { "app_name": "ESP32 Webapp" } } ``` ## đŸ› ïž DĂ©pendances - **ESPAsyncWebServer** - Serveur web asynchrone - **AsyncTCP** - TCP asynchrone pour ESP32 - **ArduinoJson** - Gestion JSON - **LittleFS** - SystĂšme de fichiers - **mbedtls** - Cryptographie (SHA-256) - **Python 3** - Pour scripts d'optimisation (compression gzip) - **CryptoJS** - Hachage SHA-256 cĂŽtĂ© client (inclus dans les assets statiques) ## 🐛 DĂ©pannage ### L'ESP32 ne se connecte pas au WiFi 1. VĂ©rifiez le SSID et le mot de passe dans la configuration 2. Assurez-vous que le rĂ©seau WiFi est en 2.4 GHz (l'ESP32 ne supporte pas le 5 GHz) 3. L'ESP32 passera automatiquement en mode AP si la connexion Ă©choue ### Impossible de se connecter Ă  l'interface web 1. VĂ©rifiez que vous ĂȘtes connectĂ© au mĂȘme rĂ©seau que l'ESP32 2. En mode AP, l'adresse est toujours `192.168.4.1` 3. En mode Station, trouvez l'IP dans les logs du moniteur sĂ©rie 4. DĂ©sactivez le cache du navigateur (Ctrl+F5) ### Erreur lors de la mise Ă  jour OTA 1. VĂ©rifiez que le fichier .bin est correct 2. Assurez-vous d'avoir une connexion stable 3. Ne dĂ©branchez jamais l'ESP32 pendant la mise Ă  jour 4. AprĂšs une mise Ă  jour rĂ©ussie, vous serez automatiquement redirigĂ© vers la page de connexion ### Message de succĂšs mais page reste en erreur C'est normal ! La connexion se ferme intentionnellement aprĂšs la mise Ă  jour (l'ESP redĂ©marre). Vous serez redirigĂ© automatiquement vers la connexion aprĂšs 3 secondes. ## 📝 Logs Les logs sont disponibles via le moniteur sĂ©rie : ```bash platformio device monitor --environment esp32 --baud 115200 ``` ## 🔒 SĂ©curitĂ© - Les mots de passe sont hashĂ©s en SHA-256 (CryptoJS cĂŽtĂ© client, mbedtls cĂŽtĂ© serveur) - Changement de mot de passe sĂ©curisĂ© avec validation de l'ancien mot de passe - Les sessions ont un timeout configurable (60 minutes par dĂ©faut) - Les cookies de session sont HttpOnly - Authentification requise pour tous les endpoints API - Compression gzip des assets pour rĂ©duire la surface d'attaque - Configuration sĂ©curisĂ©e : les vrais mots de passe ne sont jamais exposĂ©s sur le frontend (masquĂ©s en "***") - Redirection automatique vers login aprĂšs dĂ©connexion ou mise Ă  jour OTA - Pas de dĂ©pendance externe obligatoire (crypto-js inclus dans les assets statiques) ## 📄 Licence Ce projet est sous licence libre. ## đŸ‘šâ€đŸ’» Auteur DĂ©veloppĂ© pour ESP32 --- **Note** : Cette application est un template de base. Adaptez-la selon vos besoins spĂ©cifiques!