Construisez votre propre système de surveillance de batterie (BMS) pour véhicule électrique ou vélo électrique avec ESP32. Monitorage en temps réel, alertes SMS et dashboard web.
🔋 Moniteur DIY de Batterie Li-Ion pour VE : Projet ESP32 Complet
Vous possédez un vélo électrique, une trottinette ou vous construisez votre propre véhicule électrique ? Dans ce tutoriel, nous allons créer un système de surveillance de batterie (BMS - Battery Management System) complet avec ESP32, capable de monitorer la tension, le courant, la température et d'envoyer des alertes en temps réel.
🎯 Caractéristiques du Projet
- ✅ Surveillance tension cellule par cellule (6S, 12S, etc.)
- ✅ Mesure du courant et calcul de l'autonomie restante
- ✅ Capteurs de température DS18B20
- ✅ Dashboard web en temps réel (ESP32 Web Server)
- ✅ Alertes SMS via GSM (module SIM800L)
- ✅ Logging des données sur carte SD
- ✅ Protection contre surcharge/décharge profonde
📦 Liste des Composants
| Composant | Quantité | Prix Approx. |
|---|---|---|
| ESP32 DevKit V1 | 1 | $6 |
| Module INA219 (Courant/Tension) | 1-4 | $3 |
| Capteurs DS18B20 | 4 | $2 |
| Module SIM800L (Optionnel) | 1 | $8 |
Schéma de Câblage
ESP32 Pin → INA219 3.3V → VCC GND → GND GPIO 21 → SDA GPIO 22 → SCL ESP32 Pin → DS18B20 GPIO 4 → DATA 3.3V → VCC GND → GND (avec résistance 4.7kΩ entre DATA et VCC)
💻 Code Arduino Complet
#include <Wire.h> #include <Adafruit_INA219.h> #include <OneWire.h> #include <DallasTemperature.h> #include <WiFi.h> #include <WebServer.h> // Configuration WiFi const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; WebServer server(80); // Capteurs Adafruit_INA219 ina219; #define ONE_WIRE_BUS 4 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); // Variables float voltage = 0; float current = 0; float power = 0; float temperature = 0; void setup() { Serial.begin(115200); // Init INA219 ina219.begin(); // Init DS18B20 sensors.begin(); // WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Routes Web server.on("/", handleRoot); server.on("/api/data", handleData); server.begin(); } void loop() { // Lecture capteurs voltage = ina219.getBusVoltage_V(); current = ina219.getCurrent_mA(); power = ina219.getPower_mW(); sensors.requestTemperatures(); temperature = sensors.getTempCByIndex(0); // Alertes if (voltage < 3.0) { sendAlert("Batterie faible!"); } if (temperature > 60) { sendAlert("Surchauffe détectée!"); } server.handleClient(); delay(2000); } void handleRoot() { String html = "<html><head><meta http-equiv='refresh' content='5'>"; html += "<style>body{font-family:Arial; background:#1a1a2e; color:#fff;}"; html += ".card{background:#16213e; padding:20px; margin:10px; border-radius:10px;}"; html += ".value{font-size:32px; color:#0f3460; font-weight:bold;}</style>"; html += "</head><body>"; html += "<h1>🔋 BMS Monitor - ESP32</h1>"; html += "<div class='card'><h2>Tension:</h2><div class='value'>" + String(voltage) + "V</div></div>"; html += "<div class='card'><h2>Courant:</h2><div class='value'>" + String(current) + "mA</div></div>"; html += "<div class='card'><h2>Température:</h2><div class='value'>" + String(temperature) + "°C</div></div>"; html += "</body></html>"; server.send(200, "text/html", html); } void handleData() { String json = "{"; json += "\"voltage\":" + String(voltage) + ","; json += "\"current\":" + String(current) + ","; json += "\"temperature\":" + String(temperature); json += "}"; server.send(200, "application/json", json); } void sendAlert(String message) { // Intégration avec Telegram ou SMS via SIM800L Serial.println("ALERT: " + message); }
Dashboard Web
L'ESP32 héberge un serveur web accessible depuis votre smartphone. Visualisez en temps réel :
- 📊 Tension de chaque cellule
- ⚡ Courant de charge/décharge
- 🌡️ Température des batteries
- 🔋 Autonomie restante estimée
🚀 Améliorations Possibles
- 📡 Intégration Home Assistant via MQTT
- Logging sur carte microSD
- 📱 Notifications Telegram
- 🔌 Équilibrage automatique des cellules
- Graphiques historiques avec Chart.js
⚠️ Précautions de Sécurité
⚡ ATTENTION : Travailler avec des batteries Li-Ion haute tension est DANGEREUX. Respectez ces règles :
- Utilisez des fusibles appropriés
- Isolez correctement tous les câbles
- Ne dépassez jamais les limites de tension/courant
- Testez d'abord avec une batterie basse tension (12V)