PZEM004T e un ESP8266 per monitorare i consumi energetici casalinghi via WiFi

“Finita questa mostra, di luce elettrica non sentiremo più parlare.”
frase pronunciata nel 1878 all’Esposizione di Parigi da Erasmus Wilson

Uno dei dilemmi casalinghi più frequenti sembra essere l’uso contemporaneo di più elettrodomestici. Roba del tipo “Cara, dovrei accendere la lavastoviglie. C’è forse la lavatrice in funzione?”, per evitare di superare la fatidica soglia dei 3000W per più di 30 secondi, che provoca l’antipatico distacco per “superamento potenza”.

Così, un po’ per sfizio e un po’ per sfida, mi lancio nella realizzazione di uno smart power energy meter casalingo usando un modulo PZEM004T, capace di misurare (per induzione, attraverso un toroide) da 80 a 260V e fino a 100A di corrente con una precisione dello 0,5% (dicono nelle specifiche):

PZEM-004T-100A: Campo di Misura 100A 

Tensione = Campo di misura: 80 ~ 260 V con risoluzione: 0.1 e  precisione di misura: 0.5% 
Corrente = Campo di misura: 0 ~ 100A (PZEM-004T-100A) con risoluzione: 0.001A e precisione di misura: 0.5% 
Potenza attiva = Campo di misura: 0 ~ 23kW (PZEM-004T-100A) con risoluzione: 0.1 W e precisione di misura: 0.5% 

Hardware

Il modulo PZEM004T comunica via seriale TTL, attraverso una interfaccia a 4 pin (5V, GND, TX e RX) che collegheremo a un modulo ESP8266. Ho aggiunto un buzzer passivo sulla scheda, per poter segnalare –attraverso un allarme sonoro– l’eventuale sforamento della potenza massima.

Per l’alimentazione della scheda ho usato un modulo alimentatore Hi-Link da 5v con una corrente massima di 600maA.

ATTENZIONE: PERICOLO DI MORTE!

Questo progetto richiede l’utilizzo della 220V, sia per l’installazione del toroide di controllo che per il resto. È necessario fare estrema attenzione e scollegare l’impianto dal contatore a monte prima di qualsiasi intervento sulla rete elettrica casalinga. Inoltre, questo intervento potrebbe invalidare la conformità dell’impianto elettrico.

Non mi assumo alcuna responsabilità per danni, incidenti o quant’altro possa capitarvi. Fate molta attenzione a quello che fate.

Partiamo subito con lo schema elettrico delle connessioni.

Lo schema elettrico dei collegamenti

La parte più difficile è stata l’installazione del toroide “TR1”: deve essere installato su uno solo dei due fili (generalmente blu e marrone) provenienti dal contatore ENEL. Nel mio caso, ho scelto di sfruttare lo spazio dentro la scatola dei differenziali “salvavita”:

Per sicurezza, ho ulteriormente protetto e isolato elettricamente il modulo PZEM004T, usando un pezzo sagomato di multistrato. Sono così riuscito a sfruttare perfettamente lo spazio residuo, cablaggi inclusi, senza modificare l’estetica della casa.

il modulo PZEM004T
Bill Of Materials

E adesso, passiamo al software!

Il Firmware

Per gestire i dati rilevati dal modulo PZEM004T ho usato la libreria scaricabile da github.com/olehs/PZEM004T. Se avere una versione 3.0 del modulo (la mia è 2.0), potete sostituirla con la libreria github.com/mandulaj/PZEM-004T-v30, che in più offre il rilevamento della frequenza e del fattore di potenza.

Potete verificare la versione del firmware della Vostra scheda dalla sigla stampigliata a destra del connettore seriale.

Attraverso la porta seriale si va a interrogare i registri interni del modulo, recuperando i valori di tensione, potenza e corrente misurati (le librerie citate sopra si occupano di tutto).

Partendo da qui, ho costruito il firmware aggiungendo l’interfaccia web, da dove visualizzare i dati in tempo reale e impostare i parametri di configurazione, incluso l’allarme di superamento potenza che fa suonare il buzzer:

Interfaccia web di visualizzazione parametri

Sfruttando il protocollo MQTT, già implementato, è possibile inviare i parametri rilevati a un database remoto e visualizzare l’andamento nel tempo usando una piattaforma come Grafana.

Potete scaricare i sorgenti del firmware da github.com/michelep/ESP8266_EnergyMeter, per poi procedere con la compilazione.

Per compilare il sorgente dovete usare Arduino IDE (testato con la versione 1.8.13), precedentemente configurato con la piattaforma per gli ESP8266 e incluso (è molto comodo!) il plugin ESP8266 SPIFFS FS, che vi permetterà di caricare nella partizione SPIFFS i files necessari.

Dovete anche includere le seguenti librerie:

dopodiché la compilazione dovrebbe andare a buon fine. Ricordatevi di selezionale la scheda ESP8266 corretta (NodeMCU 1.0 – ESP12 Module) e il partizionamento della flash (FS:1MB OTA:~1019KB). Eventuali aggiornamenti potranno anche essere caricati via OTA.

Dopo aver caricato il firmware, dobbiamo caricare i files dell’interfaccia Web e di configurazione (nella directory /data) nella SPIFFS. Prima, però, ricordatevi d’impostare i parametri della rete wifi in config.json!

Se tutto è andato a buon fine, la scheda si sarà già connessa alla rete wifi impostata e, navigando con un qualsiasi browser sul server Web, apparirà l’interfaccia di visualizzazione in tempo reale e le impostazioni del sistema:

  • Power alarm: un valore > 0 indica che, al superamento di potenza di questo valore, il buzzer inizierà a “bippare” ogni secondo;
  • WiFi SSID e PSK key: il nome (SSID) e la chiave (PSK) della rete WiFi;
  • MQTT broker host, port, client ID e Timeout: l’IP del broker MQTT, la porta (tipicamente 1883), l’ID univoco del sistema e ogni quanti secondi inviare i dati (di default, ogni 5 minuti);
  • Hostname: MDNS host name;
  • NTP server e NTP timezone: parametri del server NTP per mantenete l’ora sempre aggiornata;
  • Username e Password: se impostati, le credenziali per accedere a questa interfaccia;
  • OTA updates: se spuntato, permette l’aggiornamento del firmware via OTA;

Dovrebbe essere tutto. Per qualunque domanda, suggerimento, consiglio… lasciate pure un commento qui sotto!

Hai trovato utile questo articolo?

Questo articolo è stato visto 3.153 volte (Oggi 1 visite)
9 comments
  1. Grazie per aver condiviso il tuo lavoro che vorrei replicare per gestire i consumi della casa in relazione al fotovoltaico.
    Avrei una domanda sullo schema elettrico: il PZEM004T ha una uscita seriale TTL (dovrebbe essere 5V) e l’hai collegata direttamente all’ingresso del ESP8266 che dovrebbe accettare al max 3,3V. non c’è un traslatore di livello?
    Grazie!

    1. Salve Maurizio,

      gli ESP8266, come da specifiche, hanno ingressi TTL tollerant, a differenza degli ESP32 che accettano solo 3.3V. Quindi, nel caso tu scegliessi di usare un modulo ESP32 al posto dell’ESP8266, sarà necessario un traslatore di livelli logici come da te giustamente indicato.

      Michele

  2. Salve,
    non riesco a compilare , mi restituisce sempre errore sul tipo di board .
    Le ho provate tutte.
    puoi suggerirmi qualcosa?

      1. Buongiorno Michele credo di aver risolto…ora ho un altro problema , non riesco a caricare la cartella DATA
        e di conseguenza non si connette al wifi..
        Ho editato il file json con i dati del mio wifi…
        Nel monitor seriale mi restituisce wifi missing
        Ho scaricato SPIFFS 0.5.0.zip
        Perché il tuo è un formato java..
        Ma niente

        Cmq complimenti per il progetto.

  3. energymeter 0.0.3 Jan 6 2023 18:27:24
    [INIT] Initializing SPIFFS…OK
    [CONFIG] Loading config…ERROR: InvalidInput
    [ERROR] WiFi configuration missing!
    [ERROR] WiFi configuration missing!
    Voltage: -1.00V
    Current: -1.00A
    Power: -1.00W
    Energy: -1.000kWh
    La compilazione non mi da errori nemmeno il caricamento della cartella DATA, ma mi restituisce sempre questo messaggio quando lancio il monitor seriale

  4. Risolto! Ho dovuto ricompilare il file config.json con jsoneditoronline , ora funziona tutto.
    un ultima cosa ti chiedo ho la versione pzem (v3.0) come posso implementare gli ulteriori parametri.
    Grazie di tutto!

    1. Benissimo, grazie Marco per il feedback! Beh, si, è necessario editare il file config.json con i parametri della tua rete WiFi e verificare che sia JSON corretto.

      Per abilitare PZEM 3.0, cambia questa riga:

      // If PZEM004Tv3.0 board, define this.
      #undef V3

      in

      #define V3

      e buon divertimento!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.