Sommario:

Leggi il contatore dell'elettricità e del gas (belga/olandese) e carica su Thingspeak: 5 passaggi
Leggi il contatore dell'elettricità e del gas (belga/olandese) e carica su Thingspeak: 5 passaggi

Video: Leggi il contatore dell'elettricità e del gas (belga/olandese) e carica su Thingspeak: 5 passaggi

Video: Leggi il contatore dell'elettricità e del gas (belga/olandese) e carica su Thingspeak: 5 passaggi
Video: Questa purtroppo è Milano....😔 #ruzzaorologi #orologio #rapina 2024, Novembre
Anonim
Leggi il contatore dell'elettricità e del gas (belga/olandese) e carica su Thingspeak
Leggi il contatore dell'elettricità e del gas (belga/olandese) e carica su Thingspeak
Leggi il contatore dell'elettricità e del gas (belga/olandese) e carica su Thingspeak
Leggi il contatore dell'elettricità e del gas (belga/olandese) e carica su Thingspeak

Se sei preoccupato per il tuo consumo energetico o sei solo un po' nerd, probabilmente vorrai vedere i dati del tuo nuovo misuratore digitale sul tuo smartphone.

In questo progetto otterremo i dati attuali da un contatore digitale di elettricità e gas belga o olandese e li caricheremo su Thingspeak. Questi dati includono il consumo energetico corrente e giornaliero e l'iniezione (se si dispone di pannelli solari), tensioni e correnti e il consumo di gas (se un contatore digitale del gas è collegato al contatore elettrico). Attraverso un'app questi valori possono poi essere letti in tempo reale sul tuo smartphone.

Funziona con un contatore digitale belga o olandese che segue il protocollo DSMR (Dutch Smart Meter Requirements), che dovrebbero essere tutti i contatori recenti. Se vivi da qualche altra parte, sfortunatamente, il tuo contatore utilizzerà probabilmente un altro protocollo. Quindi temo che questo Instructable sia un po' limitato a livello regionale.

Useremo la porta P1 del misuratore, che accetta un cavo RJ11/RJ12, colloquialmente noto come cavo telefonico. Assicurarsi che l'installatore del contatore abbia attivato la porta P1. Ad esempio, per Fluvius in Belgio seguire queste istruzioni.

Per elaborare i dati e caricarli su Internet, utilizziamo un ESP8266, che è un microchip economico con wifi integrato. Costa solo qualcosa come 2 dollari. Inoltre può essere programmato utilizzando l'IDE di Arduino. Archiviamo i dati nel cloud su Thingspeak, che è gratuito per un massimo di quattro canali. Per questo progetto utilizziamo un solo canale. I dati possono quindi essere visualizzati sul tuo smartphone utilizzando un'app come IoT ThingSpeak.

Parti:

  • Un ESP8266, come un nodemcu v2. Nota che il nodemcu v3 è troppo largo per una breadboard standard, quindi preferisco il v2.
  • Un cavo da micro USB a USB.
  • Un caricatore USB.
  • Un transistor NPN BC547b.
  • Due resistori da 10k e un resistore da 1k.
  • Un connettore con terminale a vite RJ12.
  • Un tagliere.
  • Fili di ponticello.
  • Opzionale: un condensatore da 1nF.

In totale, questo costa qualcosa come 15 EUR su AliExpress o simili. La stima tiene conto del fatto che alcuni componenti come resistori, transistor e fili sono disponibili in quantità molto maggiori di quelle necessarie per questo progetto. Quindi, se hai già un kit di componenti, sarà più economico.

Passaggio 1: conoscere l'ESP8266

Ho scelto il NodeMCU v2, poiché non è richiesta alcuna saldatura e ha una connessione micro USB che consente una facile programmazione. Il vantaggio del NodeMCU v2 rispetto al NodeMCU v3 è che è abbastanza piccolo da adattarsi a una breadboard e lasciare dei fori liberi sul lato per effettuare le connessioni. Quindi è meglio evitare il NodeMCU v3. Tuttavia, se preferisci un'altra scheda ESP8266, va bene lo stesso.

L'ESP8266 può essere facilmente programmato utilizzando l'IDE Arduino. Ci sono altri Instructables che spiegano questo in dettaglio, quindi sarò molto breve qui.

  • Per prima cosa scarica l'IDE di Arduino.
  • Supporto per la seconda installazione della scheda ESP8266. Nel menu File - Preferenze - Impostazioni aggiungi l'URL https://arduino.esp8266.com/stable/package_esp8266com_index.json agli URL aggiuntivi di Board Manager. Successivamente nel menu Strumenti - Board - Boards Manager install esp8266 by esp8266 community.
  • Terzo, seleziona la scheda più vicina al tuo ESP8266. Nel mio caso ho scelto NodeMCU v1.0 (ESP 12-E Module).
  • Infine seleziona in Strumenti - Dimensione Flash, una dimensione che includa SPIFFS, come 4M (1M SPIFFS). In questo progetto utilizziamo SPIFFS (SPI Flash File System) per memorizzare i valori energetici giornalieri, in modo che non vadano persi se l'ESP8266 perde potenza e anche quando viene riprogrammato.

Ora abbiamo tutto a posto per programmare ESP8266! Discuteremo il codice effettivo in un passaggio successivo. Per prima cosa creeremo un account Thingspeak.

Passaggio 2: crea un account e un canale Thingspeak

Vai su https://thingspeak.com/ e crea un account. Una volta effettuato l'accesso, fai clic sul pulsante Nuovo canale per creare un canale. Nelle Impostazioni canale inserisci il nome e la descrizione come preferisci. Successivamente nominiamo i campi del canale e li attiviamo facendo clic sulle caselle di controllo a destra. Se usi il mio codice invariato i campi sono i seguenti:

  • Campo 1: consumo di punta oggi (kWh)
  • Campo 2: consumo di ore non di punta oggi (kWh)
  • Campo 3: picco di iniezione oggi (kWh)
  • Campo 4: iniezione non di punta oggi (kWh)
  • Campo 5: consumo di corrente (W)
  • Campo 6: iniezione di corrente (W)
  • Campo 7: consumo di gas oggi (m3)

Qui, picco e non di punta si riferiscono alla tariffa elettrica. Nei campi 1 e 2 il consumo si riferisce al consumo netto di energia elettrica oggi: consumo di energia elettrica oggi nel periodo tariffario dalla mezzanotte meno l'iniezione di energia elettrica (prodotta da pannelli solari) oggi nel periodo tariffario dalla mezzanotte con un minimo pari a zero. Quest'ultimo significa che se ci fosse più iniezione che consumo oggi il valore è zero. Analogamente, l'immissione nei campi 3 e 4 si riferisce all'immissione netta di energia elettrica. I campi 5 e 6 indicano il consumo netto e l'iniezione al momento attuale. Infine il campo 7 è il consumo di gas dalla mezzanotte.

Per riferimento futuro, annotare l'ID del canale, la chiave API di lettura e la chiave API di scrittura, che si trovano nel menu Chiavi API.

Passaggio 3: costruire il circuito elettronico

Costruire il circuito elettronico
Costruire il circuito elettronico
Costruire il circuito elettronico
Costruire il circuito elettronico

Leggiamo il contatore elettrico utilizzando la porta P1, che richiede un cavo RJ11 o RJ12. La differenza è che il cavo RJ12 ha 6 fili mentre l'RJ11 ne ha solo 4. In questo progetto non alimentiamo ESP8266 dalla porta P1, quindi in realtà abbiamo solo bisogno di 4 fili, quindi andrebbe bene un RJ11.

Ho usato il breakout RJ12 mostrato nell'immagine. È un po' largo e non c'è molto spazio intorno alla porta P1 nel mio misuratore. Si adatta, ma è stretto. In alternativa, puoi semplicemente utilizzare un cavo RJ11 o RJ12 e rimuovere l'intestazione a un'estremità.

Se si tiene lo sfondamento come in figura, i perni sono numerati da destra a sinistra e hanno il seguente significato:

  • Pin 1: Alimentazione 5V
  • Pin 2: Richiesta dati
  • Pin 3: terra dati
  • Pin 4: non connesso
  • Pin 5: linea dati
  • Pin 6: massa di alimentazione

Pin 1 e Pin 6 potrebbero essere utilizzati per alimentare ESP8266, ma non l'ho testato. Dovresti collegare il Pin 1 a Vin dell'ESP8266, quindi il regolatore di tensione interno della scheda viene utilizzato per ridurre la tensione da 5V a 3,3V accettata dall'ESP8266. Quindi non collegarlo al pin da 3,3 V, perché ciò potrebbe danneggiare l'ESP8266. Inoltre, l'alimentazione dalla porta P1 consumerebbe nel tempo la batteria del misuratore digitale.

L'impostazione del pin 2 alto segnala allo strumento di inviare telegrammi di dati ogni secondo. I dati effettivi vengono inviati tramite il Pin 5 con una velocità di trasmissione di 115200 per un moderno contatore digitale (DSMR 4 e 5). Il segnale è invertito (basso è 1 e alto è 0). Per un tipo precedente (DSMR 3 e inferiori) la velocità è di 9600 baud. Per un contatore del genere devi modificare il baud rate nel codice firmware del passaggio successivo: cambiare la riga Serial.begin(115200); in configurazione().

Il ruolo del transistor NPN è duplice:

  • Per invertire il segnale in modo che ESP8266 possa capirlo.
  • Per modificare il livello logico dai 5 V della porta P1 ai 3,3 V previsti dalla porta RX dell'ESP8266.

Quindi crea il circuito elettronico sulla breadboard come nello schema. Il condensatore aumenta la stabilità, ma funziona anche senza.

Non collegare il pin RX fino a quando non avrai programmato ESP8266 nel passaggio successivo. In effetti, il pin RX è necessario anche per comunicare tramite USB tra ESP8266 e il tuo computer.

Passaggio 4: carica il codice

Ho reso disponibile il codice su GitHub, è solo un file: P1-Meter-Reader.ino. Basta scaricarlo e aprirlo nell'IDE di Arduino. Oppure puoi selezionare File - Nuovo e semplicemente copiare/incollare il codice.

Ci sono alcune informazioni che devi inserire all'inizio del file: il nome e la password della WLAN da utilizzare, l'ID del canale e la chiave API di scrittura del canale ThingSpeak.

Il codice fa quanto segue:

  • Legge un telegramma di dati dal contatore ogni UPDATE_INTERVAL (in millisecondi). Il valore predefinito è ogni 10 secondi. Normalmente, c'è un telegramma di dati dal contatore ogni secondo, ma l'impostazione della frequenza su alta sovraccaricherà ESP8266 in modo che non possa più eseguire il server web.
  • Carica i dati elettrici sul canale Thingspeak ogni SEND_INTERVAL (in millisecondi). Il valore predefinito è ogni minuto. Per decidere su questa frequenza tenete conto che l'invio dei dati richiede del tempo (tipicamente pochi secondi) e che c'è un limite alla frequenza di aggiornamento su Thingspeak per un account gratuito. Si tratta di circa 8200 messaggi al giorno, quindi la frequenza massima sarebbe di circa una volta ogni 10 secondi se non si utilizza Thingspeak per nient'altro.
  • Carica i dati del gas quando cambia. In genere, il contatore aggiorna i dati di consumo del gas solo ogni 4 minuti circa.
  • Il contatore tiene traccia dei consumi totali e dei valori di iniezione sin dall'inizio. Quindi per ottenere il consumo e l'iniezione giornalieri, il codice salva tutti i giorni i valori totali a mezzanotte. Quindi questi valori vengono sottratti dai valori totali correnti. I valori a mezzanotte sono memorizzati nello SPIFFS (SPI Flash File System), che persiste se ESP8266 perde potenza o anche quando viene riprogrammato.
  • L'ESP8266 esegue un mini server web. Se apri il suo indirizzo IP nel tuo browser, ottieni una panoramica di tutti i valori attuali di elettricità e gas. Questi provengono dal telegramma più recente e includono informazioni che non sono caricate su Thingspeak, come tensioni e correnti per fase. L'impostazione predefinita è che l'indirizzo IP è determinato dinamicamente dal router. Ma è più comodo utilizzare un indirizzo IP statico, che è sempre lo stesso. In questo caso devi inserire staticIP, gateway, dns e subnet nel codice e decommentare la riga WiFi.config(staticIP, dns, gateway, subnet); nella funzione connectWifi().

Dopo aver apportato queste modifiche, sei pronto per caricare il firmware su ESP8266. Collega l'ESP8266 tramite il cavo USB al tuo computer e premi l'icona con la freccia nell'IDE di Arduino. Se non riesci a connetterti all'ESP8266 prova a cambiare la porta COM dal menu Strumenti - Porta. Se continua a non funzionare, è possibile che sia necessario installare manualmente il driver per la porta COM virtuale USB.

Passaggio 5: test

Dopo aver caricato il firmware, scollegare l'USB e collegare il cavo RX dell'ESP8266. Ricorda, avevamo bisogno del canale RX dell'ESP8266 per caricare il firmware, quindi non lo abbiamo collegato prima. Ora collega il breakout RJ12 al misuratore digitale e ricollega l'ESP8266 al tuo computer.

Nell'IDE di Arduino, apri Serial Monitor tramite il menu Strumenti e assicurati che sia impostato su 115200 baud. Se devi modificare la velocità di trasmissione, forse devi chiudere e riaprire il monitor seriale prima che funzioni.

Ora dovresti vedere l'output del codice nel monitor seriale. Dovresti controllare se ci sono messaggi di errore. Inoltre, dovresti essere in grado di vedere i telegrammi. Per me sono così:

/FLU5\xxxxxxxxx_x

0-0:96.1.4(50213) 0-0:96.1.1(3153414733313030313434363235) // Contatore numero di serie esadecimale 0-0:1.0.0(200831181442S) // Timestamp S: ora legale (estate), W: no ora legale (inverno) 1-0:1.8.1(000016.308*kWh) // Consumo netto totale di punta 1-0:1.8.2(000029.666*kWh) // Consumo netto totale di ore non di punta 1-0:2.8.1 (000138.634*kWh) // Iniezione netta totale picco 1-0:2.8.2(000042.415*kWh) // Iniezione netta totale non picco 0-0:96.14.0(0001) // Tariffa 1: picco, 2: non di punta 1-0:1.7.0(00.000*kW) // Consumo di corrente 1-0:2.7.0(00.553*kW) // Iniezione di corrente 1-0:32.7.0(235.8*V) // Fase 1 tensione 1-0:52.7.0(237.0*V) // Tensione fase 2 1-0:72.7.0(237.8*V) // Tensione fase 3 1-0:31.7.0(001*A) // Corrente fase 1 1-0:51.7.0(000*A) // Corrente fase 2 1-0:71.7.0(004*A) // Corrente fase 3 0-0:96.3.10(1) 0-0:17.0.0(999.9*kW) // Potenza massima 1-0:31.4.0(999*A) // Corrente massima 0-0:96.13.0() // Messaggio 0-1:24.1.0(003) // altri dispositivi su M-bus 0-1:96.1.1(37464C4F32313230313037393338) // Matricola contatore gas r esadecimale 0-1:24.4.0(1) 0-1:24.2.3(200831181002S)(00005.615*m3) // Consumo totale timestamp gas !E461 // Checksum CRC16

Se c'è qualcosa che non va, puoi verificare se hai gli stessi tag ed eventualmente devi modificare il codice analizzando i telegrammi nella funzione readTelegram.

Se tutto funziona, ora puoi alimentare l'esp8266 dal caricatore USB.

Installa l'app IoT ThingSpeak Monitor sul tuo smartphone, inserisci Channel ID e Read API Key e il gioco è fatto!

Consigliato: