“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.
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.
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.
Bill Of Materials
- Peacefair PZEM004T module
- Hi Link 220V to 5V 600mA power module
- ESP8266 NodeMCU
- Buzzer passivo 5V
- 1 transistor NPN 2N5551, 2N2222 o equivalente (va bene qualsiasi NPN)
- 1 resistore da 10KOhm 1/8W
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:
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:
- ESPAsyncTCP per ESP8266
- ESPAsyncWebServer
- ArduinoJson
- NTP Client
- PZEM004T
- PubSubClient per MQTT
- TaskScheduler
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!
9 comments
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!
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
Salve,
non riesco a compilare , mi restituisce sempre errore sul tipo di board .
Le ho provate tutte.
puoi suggerirmi qualcosa?
Salve Marco,
potresti copia-incollare l’errore che ricevi? Così, senza riferimenti, è difficile darti un consiglio.
Grazie, Michele
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.
Non facciamo confusione! Come prima cosa, assicurati di avere un ambiente Arduino IDE funzionante e ben configurato. Devi essere in grado sia di programmare l’ESP che scrivere dati sulla partizione SPIFFS dello stesso. Ho sempre usato un plugin per l’IDE e spero che questa pagina possa aiutarti: https://microcontrollerslab.com/install-esp32-filesystem-uploader-in-arduino-ide-spiffs/
Fammi sapere e buona giornata 🙂
Michele
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
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!
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!