Figure 1 : Un système de batterie LiFePO4 DIY avec BMS et surveillance ESP32 offre une solution de stockage d'énergie sûre, durable et connectée.
⚠️ AVERTISSEMENT DE SÉCURITÉ : BATTERIES LITHIUM ET COURANTS ÉLEVÉS
- Risque d'Incendie : Bien que les LiFePO4 soient beaucoup plus sûres que les Li-Ion, un court-circuit ou une surcharge peut provoquer un incendie. Travaillez toujours dans un endroit bien ventilé, éloigné de matériaux inflammables.
- BMS Obligatoire : Ne jamais connecter des cellules LiFePO4 en série ou en parallèle sans un BMS (Battery Management System) approprié. Le BMS protège contre les surtensions, les sous-tensions, les surintensités et les déséquilibres entre cellules.
- Équilibrage des Cellules : Avant l'assemblage, toutes les cellules doivent être chargées individuellement à exactement 3,65V et avoir la même capacité. Des cellules déséquilibrées réduisent drastiquement la durée de vie du pack.
- Outils Isolés : Utilisez des outils avec manche isolé. Un court-circuit accidentel avec une clé peut libérer des centaines d'ampères instantanément.
Bienvenue sur TechFix Hub ! Vous avez construit votre suiveur solaire, votre contrôleur MPPT, et vous produisez de l'énergie verte. Mais sans stockage, cette énergie s'évapore dès que le soleil se couche. Les batteries plomb-acide traditionnelles sont lourdes, lentes à charger, et ne durent que 3-5 ans. Les batteries Li-Ion sont plus légères, mais présentent des risques de sécurité.
La solution idéale en 2026 ? Les batteries LiFePO4 (Lithium Fer Phosphate). Elles offrent une durée de vie de 10 à 15 ans (3000-5000 cycles), une sécurité exceptionnelle, et une efficacité de charge/décharge supérieure à 95%. Dans ce guide complet, nous allons construire un système de batterie 12V 100Ah ou 24V 50Ah avec un BMS intelligent et une surveillance en temps réel via ESP32, le tout intégré à votre écosystème solaire et domotique.
🔋 1. Pourquoi LiFePO4 ? La Révolution du Stockage d'Énergie
Les batteries LiFePO4 représentent un saut technologique majeur par rapport aux technologies précédentes. Voici pourquoi elles dominent le marché en 2026 :
💡 Le calcul est simple : Une batterie plomb-acide de 100Ah à 150€ ne vous donnera que 50Ah utilisables (50% DoD) et durera 3 ans. Une LiFePO4 de 100Ah à 400€ vous donne 90Ah utilisables et dure 15 ans. Sur 15 ans, la LiFePO4 coûte 3x moins cher par cycle de vie !
⚙️ 2. Architecture du Système : De la Cellule au Pack
Un système de batterie LiFePO4 complet se compose de quatre éléments essentiels :
- Les Cellules Prismeatiques : Ce sont les blocs de construction. Pour un système 12V, vous avez besoin de 4 cellules en série (chaque cellule = 3,2V nominal, donc 4 × 3,2V = 12,8V). Pour un système 24V, utilisez 8 cellules en série (8 × 3,2V = 25,6V). Les capacités courantes sont 50Ah, 100Ah, 200Ah ou 280Ah.
- Le BMS (Battery Management System) : Le cerveau du pack. Il surveille la tension de chaque cellule, la température, et le courant. Il coupe la charge/décharge en cas de danger et équilibre les cellules pour maximiser la durée de vie. Choisissez un BMS avec équilibrage actif (pas passif) pour les packs >100Ah.
- Le Système de Surveillance (ESP32 + Capteurs) : Un ESP32 lit les données du BMS (via UART ou CAN bus), mesure la tension et le courant avec un INA226, et surveille la température avec des sondes DS18B20. Il calcule l'état de charge (SOC) et l'état de santé (SOH), et envoie les données à Home Assistant via MQTT.
- Les Protections : Fusibles ANL/Mega pour les courts-circuits, disjoncteurs DC pour l'isolation, et contacteurs de puissance pour couper complètement le pack en cas d'urgence.
🛠️ 3. Liste des Composants (BOM) pour un Pack 12V 100Ah
💡 Coût estimé (2026) : ~800-1200€ pour un pack 12V 100Ah complet (cellules + BMS + surveillance + protections). C'est environ 2x le prix d'un pack plomb-acide équivalent, mais avec une durée de vie 5x plus longue.
🔧 4. Assemblage du Pack : Étapes Critiques
- Étape 1 : Préparation et Équilibrage Initial
- Chargez chaque cellule individuellement à 3,65V avec une alimentation de laboratoire.
- Laissez-
- Vérifiez que toutes les cellules sont à la même tension (±0.01V) avant l'assemblage.
- Mesurez la capacité réelle de chaque cellule avec votre Charge Électronique DIY (voir notre article précédent) pour identifier les cellules faibles.
- Étape 2 : Assemblage Mécanique et Connexions
- Disposez les 4 cellules en série dans le boîtier. Utilisez des entretoises en plastique pour maintenir la compression (les LiFePO4 aiment être comprimées à ~150 kg pour maximiser la durée de vie).
- ⚠️ CRITIQUE : Serrez les vis des bornes au couple de 5-6 N·m avec une clé dynamométrique. Des connexions lâches créent des points chauds qui peuvent fondre les bornes.
- Connectez les barres de cuivre (busbars) entre les cellules : négatif de la cellule 1 → positif de la cellule 2 → négatif de la cellule 2 → ... jusqu'à obtenir 12,8V nominal.
- Connectez les fils d'équilibrage du BMS à chaque borne de cellule (ordre crucial : B- → C0 → C1 → C2 → C3 → B+).
- Étape 3 : Intégration du BMS et des Protections
- Connectez le BMS en série avec la borne négative du pack (configuration courante pour les BMS 4S).
- Installez le fusible ANL 150A entre le pack et les bornes de sortie.
- Ajoutez un disjoncteur DC pour permettre une isolation complète lors de la maintenance.
- Connectez les sondes de température DS18B20 directement sur les cellules (collez-les avec du kapton ou de la colle thermique).
- Étape 4 : Ajout de la Surveillance ESP32
- Connectez l'ESP32 au port UART du BMS (TX du BMS → GPIO 16 de l'ESP32, RX du BMS → GPIO 17).
- Branchez l'INA226 en série avec la charge pour mesurer courant et tension avec précision.
- Alimentez l'ESP32 via un convertisseur buck 12V → 5V (ne jamais alimenter directement depuis les cellules).
- Étape 5 : Premier Démarrage (Procédure Sécurisée)
- Vérifiez TOUTES les connexions avec un multimètre avant d'appliquer la moindre charge.
- Mesurez la tension totale du pack : doit être ~13,2V (4 × 3,3V après équilibrage).
- Vérifiez que le BMS détecte correctement chaque cellule (tension individuelle entre 3,2V et 3,3V).
- Activez la sortie du BMS (souvent via un bouton ou en connectant la charge brièvement).
- Flash le code ESP32 et vérifiez la réception des données sur le moniteur série.
💻 5. Le Code ESP32 : Lecture BMS et Envoi MQTT
Ce sketch lit les données du BMS via UART (protocole JBD/BMS commun), calcule le SOC avec la méthode Coulomb Counting, et publie tout sur MQTT pour Home Assistant :
#include <WiFi.h>
#include <PubSubClient.h>
#include <INA226.h>
#include <DallasTemperature.h>
// Configuration WiFi & MQTT
const char* ssid = "YOUR_WIFI";
const char* password = "YOUR_PASSWORD";
const char* mqtt_server = "192.168.1.100";
WiFiClient espClient;
PubSubClient mqtt(espClient);
// Configuration matérielle
INA226 ina(Wire); // I2C par défaut
HardwareSerial BMS_Serial(2); // UART2 sur GPIO 16/17
OneWire oneWire(4);
DallasTemperature tempSensors(&oneWire);
// Paramètres batterie
const float BATTERY_CAPACITY_AH = 100.0;
float accumulated_Wh = 0.0;
float soc_percent = 100.0;
// Structure pour les données BMS
struct BMSData {
float cellVoltages[4];
float totalVoltage;
float current;
float temperature;
int soc;
} bms;
void setup() {
Serial.begin(115200);
BMS_Serial.begin(9600, SERIAL_8N1, 16, 17); // BMS UART
// Initialisation INA226
ina.begin();
ina.configure(INA226_AVERAGES_16, INA226_BUS_CONV_TIME_1100US,
INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
ina.calibrate(0.002); // Shunt de 0.002 ohm
// Initialisation capteurs de température
tempSensors.begin();
// Connexion WiFi & MQTT
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); }
mqtt.setServer(mqtt_server, 1883);
Serial.println("Système de surveillance batterie démarré !");
}
void loop() {
if (!mqtt.connected()) { mqtt.connect("ESP32_Battery_Monitor"); }
mqtt.loop();
// 1. Lire le BMS via UART
readBMSData();
// 2. Lire INA226 pour mesure précise courant/tension
float voltage = ina.readBusVoltage();
float current = ina.readShuntCurrent();
float power = voltage * current;
// 3. Calculer SOC par Coulomb Counting
accumulated_Wh += (power * 0.001); // Intégration toutes les secondes
soc_percent = 100.0 - (accumulated_Wh / (BATTERY_CAPACITY_AH * 12.8)) * 100.0;
soc_percent = constrain(soc_percent, 0, 100);
// 4. Lire températures
tempSensors.requestTemperatures();
float temp1 = tempSensors.getTempCByIndex(0);
float temp2 = tempSensors.getTempCByIndex(1);
// 5. Publier sur MQTT
publishToMQTT(voltage, current, power, soc_percent, temp1, temp2);
// 6. Alertes de sécurité
checkSafetyLimits(voltage, current, temp1);
delay(1000);
}
void readBMSData() {
if (BMS_Serial.available()) {
// Lecture trame JBD (simplifiée)
byte buffer[40];
int len = BMS_Serial.readBytes(buffer, 40);
// Parser la trame selon le protocole du BMS
// (Voir documentation du BMS spécifique)
}
}
void publishToMQTT(float v, float i, float p, float soc, float t1, float t2) {
char topic[50], payload[20];
sprintf(topic, "battery/voltage"); sprintf(payload, "%.2f", v);
mqtt.publish(topic, payload);
sprintf(topic, "battery/current"); sprintf(payload, "%.2f", i);
mqtt.publish(topic, payload);
sprintf(topic, "battery/power"); sprintf(payload, "%.1f", p);
mqtt.publish(topic, payload);
sprintf(topic, "battery/soc"); sprintf(payload, "%.1f", soc);
mqtt.publish(topic, payload);
sprintf(topic, "battery/temp1"); sprintf(payload, "%.1f", t1);
mqtt.publish(topic, payload);
sprintf(topic, "battery/temp2"); sprintf(payload, "%.1f", t2);
mqtt.publish(topic, payload);
}
void checkSafetyLimits(float voltage, float current, float temp) {
// Surtension
if (voltage > 14.6) {
mqtt.publish("battery/alert", "OVERVOLTAGE");
// Déconnecter la charge via relais
}
// Sous-tension
if (voltage < 10.0) {
mqtt.publish("battery/alert", "UNDERVOLTAGE");
}
// Surtempérature
if (temp > 55.0) {
mqtt.publish("battery/alert", "OVERTEMP");
}
// Surintensité
if (abs(current) > 100.0) {
mqtt.publish("battery/alert", "OVERCURRENT");
}
}
🚀 6. L'Upgrade "TechFix Hub" : Batterie Intelligente et Connectée
Transformez votre pack LiFePO4 en une véritable centrale énergétique intelligente :
- Intégration Home Assistant Complète : Créez des automatisations comme : "Si SOC batterie < 20%, couper les charges non essentielles" ou "Si production solaire > consommation ET batterie < 90%, activer le chauffe-eau".
- Écran de Surveillance Local : Ajoutez un écran TFT ILI9341 (voir notre article) pour afficher en temps réel : tension de chaque cellule, SOC, puissance entrante/sortante, température, et historique sur 24h.
- Estimation SOH (State of Health) : Programmez l'ESP32 pour effectuer un test de capacité complet une fois par mois (décharge contrôlée via votre Charge Électronique DIY). Cela vous donne la santé réelle de la batterie et prédit sa durée de vie restante.
- Alertes Telegram/Email : Recevez une notification instantanée si une cellule dépasse ses limites, si la température monte trop, ou si la batterie atteint un SOC critique. Intégrez la librairie
UniversalTelegramBotsur l'ESP32. - Préchauffage par Temps Froid : Les LiFePO4 ne doivent pas être chargées en dessous de 0°C. Ajoutez un tapis chauffant 12V contrôlé par l'ESP32 qui s'active automatiquement quand la température est trop basse avant de permettre la charge.
- Tableau de Bord Web : L'ESP32 héberge un serveur web local avec des graphiques Chart.js montrant l'historique de tension, courant, SOC et température sur 7 jours. Accessible depuis n'importe quel appareil de votre réseau.
🔧 7. Dépannage des Problèmes Courants
- Le BMS se met en protection dès la première charge : Vérifiez l'ordre des fils d'équilibrage (B-, C0, C1, C2, C3, B+). Une inversion peut griller le BMS instantanément. Mesurez la tension entre chaque paire de fils AVANT de les connecter au BMS.
- Une cellule monte en tension plus vite que les autres : Cellule déséquilibrée ou défectueuse. Isolez la cellule et faites un test de capacité individuel. Si elle perd sa charge rapidement, remplacez-la.
