Sommario:

Una stazione meteo domestica ESP-Now: 9 passaggi (con immagini)
Una stazione meteo domestica ESP-Now: 9 passaggi (con immagini)

Video: Una stazione meteo domestica ESP-Now: 9 passaggi (con immagini)

Video: Una stazione meteo domestica ESP-Now: 9 passaggi (con immagini)
Video: UNA GIOSTRA SI STACCA A ROMA! 2024, Dicembre
Anonim
Una stazione meteo domestica ESP-Now
Una stazione meteo domestica ESP-Now

Volevo avere una stazione meteorologica domestica per un po' di tempo e una che tutti in famiglia potessero facilmente controllare per temperatura e umidità. Oltre a monitorare le condizioni esterne, volevo monitorare anche stanze specifiche della casa e la mia officina in garage. Questo ci farebbe sapere quando è il momento giusto per arieggiare la casa o far funzionare il deumidificatore (in inverno qui piove molto). Quello che ho creato è un sistema di sensori basato su ESP-Now che riporta a un server web locale che chiunque può controllare dal proprio computer o telefono. Per il telefono ho scritto come semplice app Android per renderlo ancora più semplice.

Passaggio 1: dettagli di progettazione

Dettagli di progettazione
Dettagli di progettazione

Volevo avere varie stazioni di sensori da posizionare in posizioni diverse e farle riferire a una stazione principale (o hub) che avrebbe salvato le informazioni. Dopo aver provato varie idee, ho deciso di utilizzare il protocollo ESP-Now di Espressif, poiché consentiva una comunicazione rapida direttamente tra i dispositivi. Puoi leggere qualcosa su ESP-Now qui e questo repository GitHub è stato una grande parte della mia ispirazione.

La prima immagine mostra il layout del sistema. Ogni sensore riporta le sue misurazioni a un dispositivo gateway che inoltra i dati al server principale tramite connessione seriale cablata. Il motivo è che il protocollo ESP-Now non può essere attivo contemporaneamente alla connessione WIFI. Affinché un utente possa accedere alla pagina Web, il WIFI dovrebbe essere sempre attivo e ciò rende quindi impossibile utilizzare le comunicazioni ESP-Now sullo stesso dispositivo. Mentre il dispositivo gateway deve essere un dispositivo basato su Espressif (compatibile con ESP-Now), il server principale potrebbe essere qualsiasi dispositivo in grado di eseguire una pagina web.

Alcune stazioni di sensori funzionerebbero con batterie (o batterie caricate a energia solare) e altre avrebbero semplicemente l'alimentazione di rete. Tuttavia, volevo che tutti utilizzassero la minor potenza possibile ed è qui che la funzione "sonno profondo" disponibile per i dispositivi ESP8266 ed ESP32 è estremamente utile. Le stazioni dei sensori si svegliavano periodicamente, prendevano le misurazioni e le inviavano al dispositivo gateway e tornavano a dormire per un periodo di tempo preprogrammato. Il loro periodo di attivazione di soli 300 ms ogni 5 minuti (nel mio caso) riduce significativamente il consumo energetico.

Passaggio 2: sensori

Sensori
Sensori
Sensori
Sensori

Ci sono vari sensori tra cui scegliere per misurare i parametri ambientali. Ho deciso di utilizzare solo sensori in grado di comunicare con I2C, poiché consentiva misurazioni rapide e funzionava su qualsiasi dispositivo che avevo. Invece di lavorare direttamente con i circuiti integrati, ho cercato moduli pronti per l'uso con gli stessi pin-out per semplificare i miei progetti. Ho iniziato con il voler misurare solo la temperatura e l'umidità e quindi ho scelto un modulo basato su SI7021. In seguito volevo un sensore in grado di misurare anche la pressione e ho deciso di provare i moduli sensore basati su BME280. Per alcune località volevo persino monitorare i livelli di luce e il modulo BH1750 era l'ideale per questo come modulo sensore separato. Ho acquistato i miei moduli sensore su ebay e questi sono i moduli che ho ricevuto:

  • BME280 (GY-BMP/E280), misura temperatura, umidità e pressione
  • SI7021 (GY-21), misura temperatura e umidità
  • BH1750 (GY-302), misura la luce

Ci sono due stili dei moduli PCB GY-BMP/E280 da trovare. Entrambi condividono lo stesso pin out per i pin da 1 a 4. Un modulo ha due pin aggiuntivi, CSB e SDO. Questi due pin sono precollegati sulla versione a 4 pin del modulo. Il livello del pin SDO determina l'indirizzo I2C (Ground = default di 0x76, VCC = 0x77). Il pin CSB deve essere collegato a VCC per selezionare l'interfaccia I2C. Preferisco il modulo a 4 pin, poiché è pronto per l'uso così com'è per il mio scopo.

In generale, questi moduli sono molto comodi da usare in quanto hanno già resistori di pull-up installati per le linee di comunicazione e funzionano tutti a 3,3 V, quindi sono compatibili con le schede basate su ESP8266. Nota che i pin su questi circuiti integrati del sensore non sono generalmente tolleranti a 5 V, quindi interfacciarli direttamente con qualcosa come un Arduino Uno potrebbe danneggiarli in modo permanente.

Passaggio 3: stazioni sensore

Stazioni sensore
Stazioni sensore

Come accennato, le stazioni sensore sarebbero tutte dispositivi Espressif che utilizzano il protocollo di comunicazione ESP-Now. Da precedenti progetti e sperimentazioni, avevo a disposizione diversi dispositivi per condurre i miei test iniziali e incorporarli nel progetto finale. Avevo a portata di mano i seguenti dispositivi:

  • due moduli ESP-01
  • due mini schede di sviluppo Wemos D1
  • una scheda di sviluppo Lolin ESP8266
  • una scheda kit WIFI seriale ESP12E
  • una scheda ESP32 GOOUUU (una scheda di sviluppo a 38 pin)

Avevo anche una scheda di sviluppo Wemos D1 R2, ma c'erano problemi con essa che non gli consentivano di svegliarsi dal sonno profondo e come dispositivo gateway si bloccava e non si riavviava correttamente. L'ho riparato in seguito ed è diventato parte del progetto di apertura della porta del garage. Affinché il "sonno profondo" funzioni, il pin RST dell'ESP8266 deve essere collegato al pin GPIO16, in modo che il timer di spegnimento possa riattivare il dispositivo. Idealmente questa connessione dovrebbe essere effettuata con un diodo Schottky (catodo su GPIO16) in modo che il ripristino manuale tramite la connessione USB-TLL durante la programmazione funzioni ancora. Tuttavia, un resistore di basso valore (300 ish Ohm) o anche un collegamento diretto del cavo può ancora avere successo.

I moduli ESP-01 non consentono un facile accesso al pin GPIO16 e si deve saldare direttamente all'IC. Questo non è un compito semplice e non lo consiglierei a tutti. La scheda del kit WIFI seriale ESP12E era un po' una novità e ha richiesto alcune modifiche per essere utile per il mio scopo. Le schede più facili da usare sono state le schede di tipo mini Wemos D1 e la scheda Lolin. I dispositivi ESP32 non richiedono alcuna modifica affinché il sonno profondo funzioni. Andreas Spiess ha un simpatico Instructable su questo.

Passaggio 4: stazione sensore ESP-01

Stazione sensore ESP-01
Stazione sensore ESP-01
Stazione sensore ESP-01
Stazione sensore ESP-01
Stazione sensore ESP-01
Stazione sensore ESP-01

Su tutte le stazioni sensore i moduli sensore sono montati verticalmente per ridurre la quantità di polvere che può accumularsi su di essi. Non tutti sono in contenitori e potrei non montarli in contenitori. La ragione di ciò è che i dispositivi possono riscaldarsi e influenzare le letture di temperatura e umidità in non sufficientemente ventilati.

Le schede ESP-01 sono molto compatte e hanno pochi pin IO digitali con cui lavorare, ma è sufficiente per l'interfaccia I2C. Le schede richiedono tuttavia una modifica delicata per consentire il "sonno profondo" di funzionare. Nella foto mostrata, un filo è stato saldato dal pin d'angolo (GPIO16) al pin RST sull'intestazione. Il filo che ho usato è un filo di "riparazione" isolato del diametro di 0,1 mm. Il rivestimento isolante si scioglie al riscaldamento, quindi può essere saldato per riparare tracce, ecc. nei PCB e non preoccuparti di creare cortocircuiti in cui il filo entra in contatto con altri componenti. Le sue dimensioni lo rendono difficile da lavorare e ho saldato questo filo in posizione sotto un microscopio (stile per hobbisti / collezionisti di francobolli). Tieni presente che l'intestazione sul lato destro ha una spaziatura dei pin di 0,1" (2,54 mm). Installare un diodo Schottky qui non sarebbe stato affatto facile, quindi ho deciso di provare solo il cavo da solo ed entrambe le unità hanno funzionato per oltre un mese senza problemi.

I moduli sono stati installati su due schede prototipo che ho creato. Una (#1) è una scheda di programmazione che consente anche l'installazione e il test dei moduli I2C, mentre l'altra (#2) è una scheda di sviluppo/test per dispositivi I2C. Per la prima scheda ho saldato insieme un vecchio connettore USB maschio e un piccolo PCB per alimentare l'unità direttamente da un adattatore USB da parete. L'altra unità ha un normale jack CC modificato per adattarsi all'intestazione del terminale a vite ed è alimentato anche tramite un adattatore a parete.

Lo schema mostra come sono collegati e come funziona il programmatore. Non ho altri moduli ESP-01, quindi non ho avuto bisogno immediato del programmatore. In futuro probabilmente realizzerò un PCB per loro. Entrambe queste schede hanno il modulo sensore SI7021 installato poiché non ero interessato alle misurazioni della pressione in quelle posizioni.

Passaggio 5: stazione sensore kit WIFI seriale ESP 12E

Stazione sensore kit WIFI seriale ESP 12E
Stazione sensore kit WIFI seriale ESP 12E
Stazione sensore kit WIFI seriale ESP 12E
Stazione sensore kit WIFI seriale ESP 12E

La scheda ESP12E Serial WIFI Kit non era pensata per lo sviluppo quanto per mostrare cosa si poteva fare con questo dispositivo. L'ho comprato molto tempo fa per imparare qualcosa sulla programmazione di ESP8266 e alla fine ho deciso di dargli un nuovo utilizzo. Ho rimosso tutti i LED installati per le dimostrazioni e ho aggiunto un'intestazione di programmazione USB e un'intestazione I2C adatta ai moduli che utilizzo. Aveva un fotoresistore CdS collegato al suo pin di ingresso analogico e ho deciso di lasciarlo lì. Questa particolare unità stava per monitorare la mia officina in garage e il fotosensore che aveva era sufficiente per farmi sapere se le luci erano state accidentalmente lasciate accese. Per la misurazione della luce ho normalizzato le letture per darmi un output percentuale e qualsiasi cosa oltre "5" di notte significava che le luci erano rimaste accese o una porta della casa non era chiusa correttamente. I pin RST e GPIO16 sono chiaramente etichettati sul PCB e il diodo Schottky che li collega è stato installato sul lato inferiore del PCB. È alimentato tramite una scheda seriale USB collegata direttamente a un caricatore da muro USB. Ho degli extra di queste schede seriali USB e non ho bisogno di questa in questo momento.

Non ho realizzato uno schema per questa scheda e generalmente non consiglio di acquistarne uno da utilizzare per questo scopo. Le schede Wemos D1 Mini sono molto più adatte e verranno discusse in seguito. Tuttavia, se hai uno di questi e hai bisogno di qualche consiglio, sarei felice di aiutarti.

Passaggio 6: mini stazioni sensore D1

Stazioni minisensore D1
Stazioni minisensore D1
Stazioni minisensore D1
Stazioni minisensore D1
Stazioni minisensore D1
Stazioni minisensore D1

Il tipo Wemos D1 Mini di schede di sviluppo ESP8266 sono le mie preferite da usare e se dovessi farlo, userei solo queste. Hanno un gran numero di pin IO accessibili, possono essere programmati direttamente tramite l'IDE di Arduino e sono ancora abbastanza compatti. Il pin D0 è GPIO16 su queste schede e il collegamento di un diodo Schottky è piuttosto facile. Lo schema mostra come ho cablato queste schede ed entrambe usano il modulo sensore BME2808.

Una delle due schede viene utilizzata per monitorare il tempo esterno e funziona con una batteria ad energia solare. Un pannello solare da 165 mm x 135 mm (6 V, 3,5 W) è collegato a un modulo di ricarica della batteria agli ioni di litio TP4056 (vedere lo schema di installazione della stazione del sensore della batteria alimentata a energia solare). Questo particolare modulo di ricarica (03962A) è dotato di un circuito di protezione della batteria che è necessario se la batteria (pacco) non ne contiene uno. La batteria agli ioni di litio è stata riciclata da una vecchia batteria per laptop e può ancora contenere una carica sufficiente per far funzionare la scheda D1 Mini, specialmente con la modalità di sospensione profonda abilitata. La scheda è stata collocata in un involucro di plastica per tenerla in qualche modo al sicuro dagli elementi. Tuttavia, affinché l'interno fosse esposto alla temperatura e all'umidità esterne, sono stati praticati due fori di 25 mm di diametro sui lati opposti e coperti (dall'interno) con un telo paesaggistico nero. Il panno è progettato per consentire all'umidità di penetrare e quindi l'umidità può essere misurata. Ad un'estremità del recinto è stato praticato un piccolo foro e installata una finestra di plastica trasparente. Qui è stato posizionato il modulo sensore di luce BH1750. L'intera unità è posizionata all'aperto all'ombra (non al sole diretto) con il sensore di luce rivolto verso l'esterno. È stato alimentato dalla batteria ad energia solare per quasi 4 settimane nel nostro clima invernale piovoso/nuvoloso qui.

Passaggio 7: gateway e server Web

Gateway e Webserver
Gateway e Webserver
Gateway e Webserver
Gateway e Webserver
Gateway e Webserver
Gateway e Webserver

Per il dispositivo ESP-Now Gateway è stata utilizzata una scheda Lolin NodeMCU V3 (ESP8266) e per il server Web è stata utilizzata una scheda ESP32 (scheda GOOUUU). Quasi tutte le schede ESP8266 o anche ESP32 avrebbero potuto fungere da dispositivo gateway, questa era semplicemente la scheda che avevo "rimasto" dopo aver utilizzato tutte le altre schede che avevo.

Ho usato la scheda ESP32 poiché ho bisogno di una scheda con un po' più di potenza di calcolo per raccogliere i dati, ordinarli, salvarli nella memoria ed eseguire il server web. In futuro potrebbe anche avere un proprio sensore e un display locale (OLED). Per l'archiviazione è stata utilizzata una scheda SD con un adattatore personalizzato. Ho usato un comune adattatore da microSD a scheda SD e ho saldato un'intestazione maschio a 7 pin (passo 0,1 ) ai contatti placcati. Ho seguito i consigli di questo GitHub per effettuare i collegamenti.

La configurazione di prototipazione (con cavi Dupont) non include un modulo sensore, ma il PCB finalizzato che ho progettato ne consente uno e un piccolo display OLED. I dettagli su come ho progettato quel PCB fanno parte di un diverso Instructable.

Passaggio 8: software

Software
Software

Dispositivi ESP8266 (ESP-NOW)

Il software per tutti i dispositivi è stato scritto utilizzando l'IDE Arduino (v1.87). Ogni stazione sensore esegue essenzialmente lo stesso codice. Differiscono solo in base ai pin utilizzati per le comunicazioni I2C e al modulo sensore a cui sono collegati. Soprattutto, inviano lo stesso pacchetto di dati di misurazione alla stazione ESP-Now Gateway, indipendentemente dal fatto che abbiano lo stesso sensore. Ciò significa che alcune stazioni di sensori inseriranno valori fittizi per le misurazioni della pressione e del livello di luce se non dispongono di sensori per fornire valori reali. Il codice per ogni stazione e il gateway è stato adattato dagli esempi di Anthony Elder su questo GitHub.

Il codice del dispositivo gateway utilizzava SoftwareSerial per comunicare con il server Web, poiché ESP8266 dispone di un solo UART hardware completamente funzionante. Funzionando al massimo baud rate di 9600 sembra abbastanza affidabile ed è più che sufficiente per inviare questi pacchetti di dati relativamente piccoli. Il dispositivo gateway è inoltre programmato con un indirizzo MAC privato. Il motivo è che, se è necessario sostituire, le stazioni dei sensori non devono essere tutte riprogrammate con il nuovo indirizzo MAC del destinatario.

ESP32 (Server Web)

Ogni stazione sensore invia il proprio pacchetto dati al dispositivo gateway che lo inoltra al server web. Insieme al pacchetto di dati viene inviato anche l'indirizzo MAC della stazione sensore per identificare ciascuna stazione. Il server web dispone di una tabella di "ricerca" per determinare la posizione di ciascun sensore e ordina i dati di conseguenza. L'intervallo di tempo tra le misurazioni è stato impostato su 5 min più un fattore casuale per evitare che i sensori "scontrino" tra loro durante l'invio al dispositivo di gate way.

Il router WIFI domestico è stato impostato per assegnare un indirizzo IP fisso al server web quando si connette al WIFI. Per il mio era 192.168.1.111. Digitando quell'indirizzo in qualsiasi browser si connetterà al server web della stazione meteorologica purché l'utente si trovi all'interno del raggio Wi-Fi (e si connette) alla rete domestica. Quando l'utente si connette alla pagina Web, il server Web risponde con una tabella delle misurazioni e include l'ora dell'ultima misurazione di ciascun sensore. In questo modo, se una stazione sensore non risponde, si può vedere dalla tabella se una lettura ha più di 5-6 minuti.

I dati vengono salvati in singoli file di testo su una scheda SD e possono anche essere scaricati dalla pagina web. Può essere importato in Excel o in qualsiasi altra applicazione per la stampa dei dati

Applicazione Android

Per semplificare la visualizzazione delle informazioni meteo locali su uno smartphone, ho creato un'app relativamente Android utilizzando Android Studio. È disponibile sulla mia pagina GitHub qui. Usa la classe webview per caricare la pagina web dal server e come tale funzionalità limitata. Non è in grado di scaricare i file di dati e comunque non avevo bisogno di quelli sul mio telefono.

Passaggio 9: risultati

Risultati
Risultati

Infine, ecco alcuni risultati della mia stazione meteorologica di casa. I dati sono stati scaricati su un laptop e tracciati in Matlab. Ho allegato i miei script Matlab e puoi anche eseguirli in GNU Octave. Il sensore esterno funziona con la sua batteria a carica solare da quasi 4 settimane e raramente c'è il sole in questo periodo dell'anno. Finora tutto funziona bene e tutti in famiglia possono controllare il tempo da soli invece di chiedermelo adesso!

Consigliato: