Figure 1: Moniteur de consommation électrique complet avec ESP32
Résumé: Apprenez à construire un moniteur de consommation électrique professionnel avec ESP32 et module PZEM-004T. Mesurez tension, courant, puissance active, énergie et facteur de puissance en temps réel. Affichage OLED, envoi de données via WiFi et historique des consommations. Projet DIY complet avec schéma de câblage et code Arduino.
📋 Table des Matières
- Introduction
- Liste des Composants
- Schéma de Câblage
- Guide de Montage Pas à Pas
- Code Arduino Complet
- Calibrage du Système
- Fonctionnalités Avancées
- FAQ
- Conclusion
1. Introduction
Dans un contexte où la maîtrise de la consommation énergétique devient cruciale, disposer d'un outil de mesure précis et en temps réel est essentiel. Ce projet vous permet de construire votre propre moniteur de consommation électrique pour moins de 25€, avec des fonctionnalités dignes des appareils professionnels.
Le système utilise:
- ESP32: Microcontrôleur WiFi puissant et économique
- PZEM-004T v3.0: Module de mesure précis (tension, courant, puissance, énergie)
- Écran OLED 0.96": Affichage local des mesures
- Capteur de température DS18B20 (optionnel): Surveillance thermique
⚠️ Avertissement de Sécurité: Ce projet implique la manipulation de tensions secteur 220V. Si vous n'êtes pas familier avec l'électricité, faites-vous assister par un professionnel. Respectez scrupuleusement les normes de sécurité.
2. Liste des Composants
Composants Principaux:
| Composant | Quantité | Prix approx. |
|---|---|---|
| ESP32 DevKit V1 | 1 | 6-8€ |
| PZEM-004T v3.0 | 1 | 10-12€ |
| Écran OLED 0.96" I2C | 1 | 3-5€ |
| Capteur CT SCT-013-000 (100A) | 1 | 4-6€ |
| Transformateur de tension AC-AC | 1 | 2-3€ |
| Breadboard + Jumpers | 1 lot | 3-5€ |
| Total | - | ~25-35€ |
Outils Nécessaires:
- Fer à souder et étain
- Multimètre numérique
- Pince coupante
- Câble USB pour ESP32
- Boîtier de protection (recommandé)
3. Schéma de Câblage
Figure 2: Schéma de câblage complet du système
Connexions ESP32 ↔ PZEM-004T:
| PZEM-004T | ESP32 | Fonction |
|---|---|---|
| VCC | 5V ou 3.3V | Alimentation |
| GND | GND | Masse |
| RX (TX du PZEM) | GPIO 16 (RX2) | Réception série |
| TX (RX du PZEM) | GPIO 17 (TX2) | Transmission série |
Connexions ESP32 ↔ OLED:
| OLED (I2C) | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SCL | GPIO 22 |
| SDA | GPIO 21 |
4. Guide de Montage Pas à Pas
Étape 1: Préparation du PZEM-004T
- Connectez le transformateur de tension AC-AC aux bornes L et N du PZEM-004T
- Enroulez le capteur CT SCT-013 autour du fil de phase (fil actif)
- Vérifiez que le CT est orienté dans le bon sens (flèche vers la charge)
💡 Conseil: Le capteur CT doit être placé sur le fil de phase uniquement, jamais sur le neutre. Pour un circuit monophasé, un seul CT suffit.
Étape 2: Câblage de l'ESP32
- Reliez les broches UART2 de l'ESP32 (GPIO 16 et 17) au PZEM-004T
- Connectez l'écran OLED aux broches I2C (GPIO 21 et 22)
- Alimentez l'ESP32 via USB ou alimentation externe 5V
Étape 3: Installation Physique
- Placez tous les composants dans un boîtier isolant
- Assurez une bonne ventilation pour éviter la surchauffe
- Utilisez des colliers de serrage pour fixer les câbles
- Étiquetez clairement les entrées/sorties
5. Code Arduino Complet
/*
* Moniteur de Consommation Électrique ESP32 + PZEM-004T
* Auteur: TechFix Hub
* Date: 2026
* Licence: MIT
*/
#include <PZEM004Tv30.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
// Configuration PZEM-004T
#define PZEM_RX 16
#define PZEM_TX 17
PZEM004Tv30 pzem(PZEM_RX, PZEM_TX);
// Configuration OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Configuration WiFi
const char* ssid = "VOTRE_SSID";
const char* password = "VOTRE_MDP";
// Variables de mesure
float voltage = 0;
float current = 0;
float power = 0;
float energy = 0;
float frequency = 0;
float pf = 0;
unsigned long lastUpdate = 0;
const unsigned long updateInterval = 2000; // Mise à jour toutes les 2 secondes
void setup() {
Serial.begin(115200);
// Initialisation OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Échec allocation SSD1306"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Initialisation...");
display.display();
delay(1000);
// Connexion WiFi
WiFi.begin(ssid, password);
Serial.print("Connexion WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Connecté!");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// Test PZEM
while (!pzem.setAddress(0x50)) {
Serial.println("Erreur communication PZEM");
delay(1000);
}
display.clearDisplay();
display.println("Systeme pret!");
display.display();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - lastUpdate >= updateInterval) {
lastUpdate = currentMillis;
// Lecture des mesures
voltage = pzem.voltage();
current = pzem.current();
power = pzem.power();
energy = pzem.energy();
frequency = pzem.frequency();
pf = pzem.pf();
// Affichage série
Serial.println("=== MESURES ===");
Serial.print("Tension: "); Serial.print(voltage); Serial.println(" V");
Serial.print("Courant: "); Serial.print(current); Serial.println(" A");
Serial.print("Puissance: "); Serial.print(power); Serial.println(" W");
Serial.print("Energie: "); Serial.print(energy); Serial.println(" kWh");
Serial.print("Frequence: "); Serial.print(frequency); Serial.println(" Hz");
Serial.print("Facteur puissance: "); Serial.println(pf);
Serial.println();
// Affichage OLED
afficherOLED();
// Envoi données (optionnel - vers serveur MQTT ou API)
// envoyerDonnees();
}
}
void afficherOLED() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("U:"); display.print(voltage, 1); display.print("V ");
display.print("I:"); display.print(current, 2); display.println("A");
display.print("P:"); display.print(power, 1); display.print("W ");
display.print("PF:"); display.println(pf, 2);
display.print("E:"); display.print(energy, 3); display.println("kWh");
display.print("Freq:"); display.print(frequency, 1); display.println("Hz");
display.display();
}
void envoyerDonnees() {
// Code pour envoyer les données vers un serveur
// Exemple: MQTT, ThingSpeak, Blynk, etc.
// À implémenter selon vos besoins
}
Bibliothèques Requises:
Installez via le Gestionnaire de Bibliothèques Arduino:
PZEM004Tv30par Jakub MandulaAdafruit SSD1306par AdafruitAdafruit GFX Librarypar Adafruit
6. Calibrage du Système
Calibrage de la Tension:
- Mesurez la tension secteur avec un multimètre de référence
- Comparez avec la valeur affichée par le PZEM
- Ajustez le facteur de calibration dans le code si nécessaire
Calibrage du Courant:
- Connectez une charge connue (ex: lampe 100W)
- Calculez le courant théorique: I = P/U (ex: 100W/230V = 0.43A)
- Ajustez la sensibilité du CT si l'écart est significatif
✅ Précision: Le PZEM-004T v3.0 offre une précision de ±0.5% pour la tension et ±1% pour le courant après calibrage.
7. Fonctionnalités Avancées
Ajout d'un Serveur Web:
L'ESP32 peut héberger un serveur web pour afficher les mesures en temps réel sur smartphone:
- Tableau de bord en temps réel
- Historique des consommations
- Graphiques d'évolution
- Alertes de surconsommation
Intégration Domotique:
- Home Assistant: Via MQTT ou API REST
- Node-RED: Pour créer des automatisations
- IFTTT: Pour recevoir des notifications
Stockage des Données:
Ajoutez une carte microSD pour enregistrer l'historique des consommations:
- Enregistrement toutes les minutes
- Export CSV pour analyse Excel
- Suivi mensuel/annuel
8. FAQ (Foire Aux Questions)
Le PZEM-004T fonctionne-t-il en triphasé?
Oui, mais vous aurez besoin d'un PZEM-004T par phase (3 modules au total). Chaque module mesure une phase indépendamment. Vous pouvez ensuite additionner les puissances pour obtenir la consommation totale.
Quelle est la puissance maximale mesurable?
Avec le capteur CT SCT-013-000 (100A), vous pouvez mesurer jusqu'à 23kW en 230V (230V × 100A = 23,000W). Pour des puissances plus élevées, utilisez un CT de plus grande capacité.
Puis-je alimenter l'ESP32 directement sur le secteur?
Non, l'ESP32 nécessite une alimentation 5V ou 3.3V. Utilisez une alimentation USB ou un module AC-DC isolé. Ne jamais connecter l'ESP32 directement au 220V!
Comment mesurer la consommation d'un appareil spécifique?
Placez le capteur CT uniquement sur le fil d'alimentation de l'appareil à mesurer. Vous pouvez aussi utiliser une prise intelligente DIY avec PZEM intégré pour mesurer appareil par appareil.
Les données sont-elles précises pour les charges non linéaires?
Le PZEM-004T v3.0 utilise un vrai RMS (True RMS) qui permet des mesures précises même avec des charges non linéaires (LED, alimentations à découpage, variateurs). La précision reste excellente pour la plupart des applications domestiques.
9. Conclusion
Ce moniteur de consommation électrique DIY vous offre un outil professionnel pour:
- ✅ Identifier les appareils gourmands en énergie
- ✅ Réduire votre facture d'électricité
- ✅ Détecter les anomalies de consommation
- ✅ Suivre votre consommation en temps réel
- ✅ Intégrer vos données dans un système domotique
Le coût total du projet (~25-35€) est largement inférieur aux moniteurs du commerce (100-300€) tout en offrant des fonctionnalités équivalentes, voire supérieures grâce à la connectivité WiFi et la personnalisation possible.
🔧 Projets Complémentaires
Découvrez nos autres tutoriels:
📢 Partagez Votre Réalisation!
Vous avez construit ce moniteur? Partagez vos photos et améliorations dans les commentaires!
Abonnez-vous à notre newsletter pour ne rater aucun tutoriel électronique.