# 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