Full width home advertisement

Post Page Advertisement [Top]


Moniteur de consommation électrique ESP32 avec affichage OLED et module PZEM-004T

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

  1. Introduction
  2. Liste des Composants
  3. Schéma de Câblage
  4. Guide de Montage Pas à Pas
  5. Code Arduino Complet
  6. Calibrage du Système
  7. Fonctionnalités Avancées
  8. FAQ
  9. 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

Schéma de câblage complet ESP32 PZEM-004T OLED

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

  1. Connectez le transformateur de tension AC-AC aux bornes L et N du PZEM-004T
  2. Enroulez le capteur CT SCT-013 autour du fil de phase (fil actif)
  3. 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

  1. Reliez les broches UART2 de l'ESP32 (GPIO 16 et 17) au PZEM-004T
  2. Connectez l'écran OLED aux broches I2C (GPIO 21 et 22)
  3. Alimentez l'ESP32 via USB ou alimentation externe 5V

Étape 3: Installation Physique

  1. Placez tous les composants dans un boîtier isolant
  2. Assurez une bonne ventilation pour éviter la surchauffe
  3. Utilisez des colliers de serrage pour fixer les câbles
  4. É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:

  • PZEM004Tv30 par Jakub Mandula
  • Adafruit SSD1306 par Adafruit
  • Adafruit GFX Library par Adafruit

6. Calibrage du Système

Calibrage de la Tension:

  1. Mesurez la tension secteur avec un multimètre de référence
  2. Comparez avec la valeur affichée par le PZEM
  3. Ajustez le facteur de calibration dans le code si nécessaire

Calibrage du Courant:

  1. Connectez une charge connue (ex: lampe 100W)
  2. Calculez le courant théorique: I = P/U (ex: 100W/230V = 0.43A)
  3. 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.

📢 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.

Bottom Ad [Post Page]