Squelette d'application web pour ESP32 avec implémentations de fonctions basiques telles que : -Authentification -Responsive design -Mise à jour OTA -Paramétrage
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

8.3 KiB

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

platformio run --environment esp32

2. Téléverser le firmware

platformio run --environment esp32 --target upload

3. Téléverser le système de fichiers (data/)

platformio run --environment esp32 --target uploadfs

4. Moniteur série (optionnel)

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)

{
  "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 :

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!