# ESP32 Bluetooth HTML Monitor Système de surveillance Bluetooth permettant de connecter plusieurs modules ESP32 et d'afficher l'état de leurs GPIOs en temps réel sur une page web. ## 📋 Fonctionnalités - ✅ Connexion de plusieurs modules ESP32 via Bluetooth (Web Bluetooth API) - ✅ Affichage en temps réel de l'état des GPIOs - ✅ Interface web moderne et responsive - ✅ Notifications visuelles lors des changements d'état - ✅ Gestion automatique de la reconnexion ## 🔧 Configuration ### ESP32 (src/main.cpp) Par défaut, le code surveille 4 GPIOs : **15, 16, 17, 18** Pour modifier les GPIOs surveillés, éditez cette ligne : ```cpp const int GPIO_PINS[] = {15, 16, 17, 18}; // Modifier selon vos besoins ``` Pour changer le nom du module (important pour différencier plusieurs ESP32) : ```cpp String moduleName = "ESP32-Module-1"; // Changer pour chaque ESP32 ``` ### GPIOs avec Pull-up Les GPIOs sont configurés en **INPUT_PULLUP**, ce qui signifie : - **État normal (non connecté)** : HIGH (3.3V) - **État actif (connecté à GND)** : LOW (0V) Le système envoie une notification à la page HTML **quand un GPIO passe à l'état BAS**. ## 🚀 Installation et utilisation ### 1. Compiler et téléverser sur ESP32 ```bash # Compiler le projet pio run # Téléverser sur l'ESP32 pio run --target upload # Monitorer le port série (optionnel) pio device monitor ``` ### 2. Démarrer le serveur HTTPS ⚠️ **Important** : Web Bluetooth nécessite HTTPS (ou localhost en HTTP) **Option A - Serveur Python (recommandé)** : ```bash python3 server.py ``` **Option B - Serveur Node.js** : ```bash node server.js ``` Les deux serveurs : - Génèrent automatiquement un certificat SSL auto-signé - Démarrent sur `https://localhost:8443` - Servent la page HTML avec support Bluetooth ### 3. Ouvrir dans le navigateur Ouvrez **Chrome**, **Edge** ou **Opera** et accédez à : ``` https://localhost:8443 ``` **Note** : - Vous verrez un avertissement de sécurité (certificat auto-signé) → Cliquez sur "Avancé" puis "Continuer vers localhost" - Firefox et Safari ne supportent pas encore Web Bluetooth ### 3. Connecter les modules 1. Cliquez sur **"Connecter un module"** 2. Sélectionnez votre ESP32 dans la liste 3. Les GPIOs s'affichent en temps réel 4. Répétez pour connecter plusieurs modules ## 🌐 Pourquoi HTTPS est nécessaire ? Web Bluetooth API nécessite un **contexte sécurisé** pour des raisons de sécurité : - ✅ `https://` (avec certificat SSL) - ✅ `http://localhost` ou `http://127.0.0.1` - ❌ `file://` (ouverture directe du fichier HTML) Les serveurs fournis (`server.py` et `server.js`) génèrent automatiquement un certificat SSL auto-signé. ## 🔌 Branchement des GPIOs Pour tester, connectez vos GPIOs à la masse (GND) : ``` ESP32 Bouton/Capteur GPIO 15 ---- [Switch] ---- GND GPIO 16 ---- [Switch] ---- GND GPIO 17 ---- [Switch] ---- GND GPIO 18 ---- [Switch] ---- GND ``` ## 📊 Format des données Les données sont envoyées en JSON : ```json { "module": "ESP32-Module-1", "gpios": [ {"pin": 15, "state": "0"}, {"pin": 16, "state": "1"}, {"pin": 17, "state": "0"}, {"pin": 18, "state": "0"} ] } ``` - `state: "0"` = GPIO HIGH (état normal) - `state: "1"` = GPIO LOW (état actif) ## 🎨 Interface L'interface affiche : - Le nom de chaque module connecté - L'état de chaque GPIO (HAUT/BAS) avec code couleur - L'horodatage de la dernière mise à jour - Des animations visuelles lors des changements d'état ## ⚙️ Personnalisation ### Changer les UUID Bluetooth Dans `main.cpp` et `index.html`, modifiez : ```cpp #define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" #define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" ``` ### Modifier le délai de lecture Dans `main.cpp`, ligne finale : ```cpp delay(100); // Modifier selon vos besoins (en millisecondes) ``` ## 🐛 Dépannage **L'ESP32 n'apparaît pas dans la liste Bluetooth** - Vérifiez que le module est alimenté - Consultez le moniteur série pour voir les messages de démarrage - Assurez-vous que le Bluetooth est activé sur votre PC **Pas de données reçues** - Vérifiez les UUID dans le code ESP32 et HTML - Consultez la console JavaScript (F12) pour les erreurs - Testez en connectant un GPIO à GND **Déconnexions fréquentes** - Vérifiez la distance entre l'ESP32 et le PC - Assurez-vous que l'alimentation de l'ESP32 est stable ## 📝 Notes - Plusieurs modules peuvent être connectés simultanément - Chaque module doit avoir un nom unique - La page HTML doit être servie en HTTPS ou localhost pour Web Bluetooth - Les changements d'état sont détectés et envoyés automatiquement ## 🔐 Sécurité Pour un usage en production, considérez : - Ajouter une authentification Bluetooth - Chiffrer les données transmises - Implémenter une validation côté serveur