Non ci sono prodotti a carrello.
Acquisiamo i parametri delle previsioni del tempo a tre giorni via WiFi da un sito Internet specializzato e li visualizziamo su un display e-Ink, realizzando un sistema a bassissimo consumo ideale per lโalimentazione a pile.
Generalmente la stazione meteo รจ, nella sua canonica accezione, un sistema in grado di acquisire delle condizioni ambientali e atmosferiche come temperatura, umiditร , pressione atmosferica, precipitazioni, desumendo da esse il tempo che farร a termine piรน o meno lungo.
In questo progetto vogliamo proporvi una variante della tipica stazione meteo, che non fa previsioni nรฉ rileva alcun parametro locale, ma semplicemente visualizza ciรฒ che le โpassaโ un sito web specializzato (ce ne sono tanti) in previsioni del tempo; in pratica รจ un terminale… un client di un server web che permette di visualizzare le previsioni, nel nostro caso a tre giorni (che sono tipicamente le piรน affidabili), fornite da un sito Internet ma senza dover utilizzare un Personal Computer, un tablet o uno smartphone per farlo, giacchรฉ il nostro sistema รจ stand-alone e dispone di un display da 4,3โ di diagonale, in formato 4:3.
Il tutto รจ molto compatto e prende posto in un frame a cornice che farร bella mostra di sรจ su qualsiasi mobile di casa.
Come funziona la stazione meteo con ePaper e ESP8266
Per svolgere il proprio compito, la nostra speciale centralina meteo si avvale di una board detta NodeMCU, ossia un sistema a microcontrollore dotato di connettivitร wireless, nato e predisposto per funzionare da nodo di una rete wireless, che nel nostro caso รจ la comunissima WiFi; allo scopo integra un modulo basato sul popolare integrato ESP8266 (cuore di una gran quantitร di moduli WiFi low-cost per il mondo Arduino e non solo), che si fa carico dello stack TCP/IP e si occupa della connessione WiFi.
Tale modulo รจ interfacciato al microcontrollore della board NodeMCU che governa la stazione meteo e lo abbiamo programmato affinchรฉ provveda a realizzare la funzione richiesta; nello specifico, il micro del NodeMCU si occupa dellโinterfacciamento allโESP8266 (ma non per la gestione della connessione WiFi, che รจ demandata ad esso), del puntamento al sito di riferimento e allโottenimento dei dati da esso.
Inoltre provvede alla gestione della visualizzazione sul display ePaper.
Per ottenere informazioni meteo attinenti, il NodeMCU legge dal firmware la localitร di cui si richiedono le previsioni (poi spiegheremo come si specifica la localitร …), quindi la comunica al sito di riferimento (abbiamo scelto www.wunderground.com) per avere il meteo della corrispondente area geografica.
Il display ePaper che abbiamo utilizzato nel progetto รจ un 4,3โ di diagonale (codice 2850-EPAPERUART43). Lโampia dimensione dello schermo e la risoluzione che ne consegue (800×600 punti/pixel), la possibilitร di scegliere tra quattro livelli di grigio, lโinterfaccia seriale (di cui รจ strettamente necessario solo il pin RX se si ignorano le risposte ai comandi che il display invia sul pin TX), lโalloggiamento per schede mini SD per la memorizzazione di immagini e la buona velocitร di aggiornamento della schermata (il refresh completo della pagina richiede solo 1,5 secondi) pongono questo visualizzatore al primo posto tra quelli prodotti da Waveshare e lo rendono adatto a tutti quei progetti dove sono richiesti ampio spazio grafico, facilitร dโuso, bassissimo consumo e dove non sia necessario un continuo aggiornamento dei dati visualizzati (ricordiamo che ogni modifica della pagina richiede almeno 1,5 secondi per il refresh) e siano sufficienti i livelli di grigio supportati.
Inoltre la caratteristica intrinseca dei display di tipo ePaper di mantenere memorizzata lโimmagine anche in assenza di alimentazione, lo rende ideale per tutte quelle applicazioni in cui il consumo deve essere ridotto al minimo, magari perchรฉ alimentate a batteria.
Schema di cablaggio della stazione meteo con ePaper e ESP8266
Lโapplicazione
Il modulo NodeMCU ESP8266 permette di gestire la nostra piccola e semplice stazione per la visualizzazione delle previsioni del tempo (attuale e previsione per i seguenti 3 giorni) recuperando i dati dal sito wunderground.com (che per un numero limitato di richieste giornaliere -500 al giorno con un massimo di 10 al minuto- รจ gratuito) e mostrandole in forma iconografica (con alcuni dati in forma testuale).
Volendo superare questo limite, occorre acquistare un account a pagamento.
Per ridurre al minimo i consumi, lโapplicazione รจ strutturata in modo da attivarsi per pochi secondi ogni 20 minuti (questo valore รจ comunque modificabile in una #define dello sketch per adattarlo a specifiche esigenze di utilizzo), recuperare e scaricare i dati dal sito di wunderground.com dopo essersi collegato a questo, visualizzare le informazioni, mettere in power-down il display ePaper e porre in deep-sleep il modulo ESP8266 sino a quando il suo timer interno non avrร contato i suddetti 20 minuti (pari a 1.200 secondi o, come richiesto per lโESP8266, 1.200.000.000 microsecondi); poi viene generato un segnale su GPIO16/D0 che, collegato con un ponticello al pin RST, provocherร il reset della scheda, facendo ripartire il ciclo dallโinizio.
Questo sistema consente di ottenere il completo spegnimento della scheda senza il bisogno di far girare una routine software nel microcontrollore; molto semplicemente, il firmware non prevede un loop ma viene eseguito in sequenza dallโinizio (conseguente a ciascun reset) fino alla messa in deep-sleep del NodeMCU, cui segue lโimpulso su GPIO16/D0 che esegue il reset e fa ripartire lโesecuzione del firmware da capo (vedere il Listato 1).
Listato 1
void setup() { char inChar; // delay(1000); // Serial.begin(115200); // pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); myEPD_Init(); // strcat(httpGet, MY_APIKEY); strcat(httpGet, โ/conditions/forecast / q / โ); strcat(httpGet, MY_LOC); strcat(httpGet, โ.jsonโ); // #ifdef __DEBUG Serial.println(); Serial.println(); Serial.print(โHTTP GET: โ); Serial.println(httpGet); Serial.println(โAttende 5 secondi per stabilizzare ESP8266โ); #endif delay(5000); // Si connette allโaccess point WiFiMulti.addAP(MY_SSID, MY_PASS); // #ifdef __DEBUG Serial.print(โIn attesa della connessione...โ); #endif while (WiFiMulti.run() != WL_CONNECTED) { #ifdef __DEBUG Serial.print(โ.โ); #endif delay(500); } #ifdef __DEBUG Serial.println(โconnesso.โ); #endif // Tutto pronto, inizializza ora il parser JSON parser.setCallback(jsonCallback, NULL); // Effettua la richiesta HTTP al server ... HTTPClient http; http.begin(httpGet); int httpCode = http.GET(); // if (httpCode & gt; 0) { // HTTP GET riuscita ... if (httpCode == HTTP_CODE_OK) { // get lenght of document (is -1 when Server sends no Content-Length header) #ifdef __DEBUG Serial.println(โRichiesta al server fatta con successo...โ); #endif int lung = http.getSize(); // Get the tcp stream WiFiClient * stream = http.getStreamPtr(); // read all data from server #ifdef __DEBUG Serial.println(โ...stampa dei dati ricevuti...โ); #endif // fStartJSON = false; JSONelement = 0; idxArray = 0; parser.reset(); clearArray(); // while (http.connected() & amp; & amp; (lung & gt; 0)) { size_t stSize = stream - & gt; available(); if (stSize) { stream - & gt; readBytes( & amp; inChar, 1); if (inChar == โ{ โ) fStartJSON = true; #ifdef __DEBUG Serial.print(inChar); #endif if (fStartJSON) parser.feed(inChar); lung--; } } #ifdef __DEBUG Serial.println(); #endif showResult(); } } else { // HTTP GET fallita ... #ifdef __DEBUG Serial.println(โErrore HTTP GET, richiesta al server fallita.โ); #endif } http.end(); // Da il tempo al display ePaper di terminare tutte le operazioni delay(10000); epd_enter_stopmode(); delay(2500); digitalWrite(LED_PIN, HIGH); // Entra in โdeep-sleepโ per un periodo di POSTINGINTERVAL microsecondi (ยตsec) ... ESP.deepSleep(POSTINGINTERVAL); // ... ed, al risveglio, effettua un RESET della scheda ripartendo da capo con il setup(). }
Il recupero delle previsioni da wunderground
Torniamo adesso sul modo in cui la nostra stazione meteo preleva i dati sulle previsioni meteo: per recuperare le previsioni del tempo da visualizzare sul display utilizzeremo il sito wunderground.com. Per recuperare i dati occorre una API Key da inserire nelle richieste inviate automaticamente al sito dal nostri sistema; la API key viene assegnata ad ogni utente registrato, quindi dovete:
1. registrarvi (gratuitamente) sul sito di Wunderground: www.wunderground.com/;
2. dal menu in alto alla home page, selezionare โMoreโ che aprirร un menu a tendina; qui, selezionare โWeather API for Developersโ;
3. generare una propria APIkey di tipo โSTRATUS PLANโ, FREE, ovvero gratuita.
Si otterrร un qualche cosa che somiglia a โbf11dccc6988fc42โ che รจ la APIkey che vi occorre.
Le istruzioni per lโutilizzo e lโelenco delle โparole chiaviโ utilizzabili nelle richieste (che si ricevono nelle risposte dal sito), sono recuperabili dalla seguente pagina web: www.wunderground.com/weather/api/d/docs?MR=1 (รจ molto utile il menu a sinistra della pagina).
Ottenuta la API Key la utilizzeremo nel nostro programma per creare le richieste HTTP indirizzate al sito wunderground.com; ciascuna richiesta, per lo scopo che ci siamo prefissati assumerร la forma seguente: http://api.wunderground.com/api/_api_key_assegnata_/conditions/forecast/q/nazione/cittร .json.
In essa, al posto di nazione va scritto lo Stato (con lโiniziale maiuscola, quindi il nostro Paese รจ Italy) e in luogo di cittร , appunto la cittร della quale si desiderano le previsioni meteo (ad esempio Milano).
A ogni richiesta, il sito ci risponderร con una paginata in formato json contenente tutte le informazioni disponibili; siccome la pagina json puรฒ essere molto lunga (anche oltre i 10 kbyte), per risparmiare SRAM il nostro firmware la analizzerร in โtempo realeโ durante la ricezione dei dati. Per fare ciรฒ abbiamo scelto di utilizzare lโottima libreria โJSONStreamingParserโ scritta da โMassimo Del Fedeleโ (estratta dalle sue librerie per Fishino).
A tale libreria vanno passati, man-mano che vengono ricevuti, i caratteri che compongono la pagina json; ogni volta che la libreria, esaminando i vari caratteri, identifica una โchiaveโ (o altri parametri a scelta dellโutente), viene effettuata una chiamata a una funzione (call-back) nella quale cui si puรฒ decidere che azioni intraprendere.
Il compito del firmware รจ catturare i soli valori delle chiavi di interesse (tra le tante presenti nel JSON) e memorizzarli in un array per, al termine della ricezione del json, averli a disposizione e creare la videata con le previsioni del tempo aggiornate.
Come mostrato nel Listato 2, il nostro sketch estrae dal json i dati relativi allโorario locale (โlocal_time_rfc822โ) temperatura e umiditร (โtemp_cโ e โrelative_humidityโ) pressione atmosferica (โpressure_mbโ) visibilitร (โvisibility_kmโ) icone del tempo (โiconโ, ossia sole o nuvole) periodo di validitร delle previsioni (โperiodโ con valore 3) e relative icone.
Anche se la risposta json entra molto nel dettaglio, abbiamo semplificato la sua interpretazione, raggruppando una serie di risposte e creando una serie di icone (di dimensioni diverse per la situazione attuale, che รจ 200×200) e per le previsioni dei giorni successivi (100×100) in B/N (formato bitmap di Windows). Tale icone debbono essere copiate nella directory radice di una scheda mini SD che dovrร essere inserita nellโapposito lettore presente sulla scheda controller del display ePaper; cosรฌ saranno richiamabili direttamente dal programma applicativo attraverso il loro nome.
Ma attenzione: la lunghezza del nome delle icone (e dei file leggibili dal display dalla SD) รจ limitata al formato 6.3 e il nome deve essere tutto in maiuscolo.
Listato 2
void jsonCallback(uint8_t filter, uint8_t level, const char * name, const char * value, void * cbObj) { char sIdx[4]; // switch (JSONelement) { case 0: // JSONelement = 0, attende di trovare โlocal_time_rfc822โ if (strcmp(name, โlocal_time_rfc822โ) == 0) { JSONelement++; strncpy(conditionArray[idxArray], value, MAXSIZE); conditionArray[idxArray++][MAXSIZE] = 0x00; } break; case 1: // JSONelement = 1, attende di trovare โtemp_cโ if (strcmp(name, โtemp_cโ) == 0) { JSONelement++; strncpy(conditionArray[idxArray], value, MAXSIZE); conditionArray[idxArray++][MAXSIZE] = 0x00; } break; case 2: // JSONelement = 2, attende di trovare โrelative_humidityโ if (strcmp(name, โrelative_humidityโ) == 0) { JSONelement++; strncpy(conditionArray[idxArray], value, MAXSIZE); conditionArray[idxArray++][MAXSIZE] = 0x00; } break; case 3: // JSONelement = 3, attende di trovare โpressure_mbโ if (strcmp(name, โpressure_mbโ) == 0) { JSONelement++; strncpy(conditionArray[idxArray], value, MAXSIZE); conditionArray[idxArray++][MAXSIZE] = 0x00; } break; case 4: // JSONelement = 4, attende di trovare โvisibility_kmโ if (strcmp(name, โvisibility_kmโ) == 0) { JSONelement++; strncpy(conditionArray[idxArray], value, MAXSIZE); conditionArray[idxArray++][MAXSIZE] = 0x00; } break; case 5: // JSONelement = 5, attende di trovare โiconโ if (strcmp(name, โiconโ) == 0) { JSONelement++; strncpy(conditionArray[idxArray], value, MAXSIZE); conditionArray[idxArray++][MAXSIZE] = 0x00; } break; case 6: case 8: case 10: case 12: case 14: case 16: // JSONelement = (6, 8, 10 ,12 ,14 , 16) attende di trovare โperiodโ con valore (2, 3, 4, 5, 6, 7) // ovvero di trovare โperiodโ con la stringa equivalente a ((JSONelement / 2) - 1) itoa(((JSONelement / 2) - 1), sIdx, 10); if ((strcmp(name, โperiodโ) == 0) & amp; & amp; (strcmp(value, sIdx) == 0)) JSONelement++; break; case 7: case 9: case 11: case 13: case 15: case 17: // JSONelement = (7, 9, 11, 13, 15, 17) attende di trovare โiconโ if (strcmp(name, โiconโ) == 0) { JSONelement++; strncpy(conditionArray[idxArray], value, MAXSIZE); conditionArray[idxArray++][MAXSIZE] = 0x00; } break; default: break; } }
Configurazione del NodeMCU
Per programmare questa scheda sarร necessario aprire lโIDE Arduino e scrivere http://arduino.esp8266.com/stable/package_esp8266com_index.json nella casella di testo inferiore della finestra โURL aggiuntive per il gestore di schedeโ, quindi fare clic su OK per continuare.
Dopo aver fatto questo primo passaggio possiamo installare la scheda, cliccando dalla schermata principale dellโIDE โStrumenti>Scheda>Gestore schede…โ si aprirร la finestra โGestore schedeโ (Fig. 1).
A questo punto, nella barra โFiltrate la ricercaโ scrivete โesp8266โ e se avete eseguito i passaggi precedenti correttamente, troverete lโopzione โInstallaโ disponibile (raccomandiamo di installare lโultima versione disponibile).
Dopo aver installato la scheda (lo spazio richiesto ammonta a circa 150 MB) potrete passare alla configurazione: nella schermata principale dellโIDE cliccate Strumenti>Scheda>NodeMCU 1.0 (ESP-12E Module) e poi cliccate nuovamente su Strumenti>Upload Speed>115200.
Una volta fatto ciรฒ, avrete terminato la configurazione e lโinstallazione della scheda e sarete pronti a programmare il NodeMCU!
La costruzione della stazione meteo con ePaper e ESP8266
Bene, spiegato a sommi capi come funziona la nostra stazione meteo, vediamo come realizzarla; la prima cosa รจ provvedere allโinterconnessione tra il NodeMCU e il pannello ePaper, il cui cablaggio รจ descritto dallโapposito schema di collegamento visibile nella pagina accanto.
Potete consultare la Tabella 1, che riporta i collegamenti tra il display e il NodeMCU; in particolare, sul modulo ESP8266 bisogna unire il GPIO16/D0 con il contatto RST, al fine di assicurare il reset automatico.
Inoltre รจ necessario collegare una resistenza da 2,2 kฮฉ 1/4W tra il contatto di reset del display ePaper e il GND, cosรฌ da evitare che, quando il Node MCU viene portato in deep-sleep e i pin di I/O vanno in condizione three-state, il pin (divenuto fluttuante) possa causare un livello logico alto e forzare il reset del display, risvegliandolo prima del tempo.
Per alimentare il tutto si puรฒ utilizzare o un alimentatore con uscita 5V su micro USB da collegare direttamente al NodeMCU o una scheda per la gestione e ricarica di un pannello solare con una batteria LiPo 3,7V/2.800 mAh, alimentata da un alimentatore AC/DC da 5V connessa via microUSB al NodeMCU.
Lโinsieme dellโelettronica va inserito in un contenitore di dimensioni adeguate, che frontalmente abbia una cornice che consente di vedere il display ePaper e che sul retro riporti il connettore di alimentazione ed abbia un foro per far passare un cavetto USB/microUSB con cui collegare il NodeMCU al computer per caricare il firmware.
Il nostro prototipo รจ stato assemblato su una cornice in plexiglass brunito composta da un telaio a V con piedistallo e da una cornice frontale che circonda lโePaper, uniti tramite colonnine distanziali.
Sulla parte anteriore del telaio abbiamo fissato il display, mentre allโinterno del piedistallo, tramite distanziali cilindrici in plastica abbiamo montato la scheda NodeMCU, rendendone accessibile il connettore microUSB. Le foto del prototipo che trovate in queste pagine sono un utile spunto per la realizzazione.
Il firmware della stazione meteo con ePaper e ESP8266
Il programma per il nostro sistema รจ stato sviluppato in ambiente Arduino IDE v1.8.5 con lโutlizzo del โcoreโ ESP8266 v2.4.0 ed รจ ampiamente commentato.
Caratteristica peculiare รจ che, contrariamente alla norma, il programma risiede interamente nella funzione setup() (oltre ad una serie di funzioni accessorie da essa richiamate), mentre la funzione loop() รจ completamente vuota.
Questo perchรฉ, come giร descritto, il programma si avvia, effettua le richieste, visualizza i dati e si pone in โdeep-sleepโ, condizione dalla quale esce con un reset che riavvia il processo da capo. In tali condizioni รจ evidente che non cโรจ nulla di ripetitivo e continuo da inserire nel loop(), ma solo una serie di istruzioni che, nel setup(), vengono ogni volta eseguite sempre come fosse la prima volta.
Oltre al โcoreโ per ESP8266, occorre installare la libreria โJSONStreamingParserโ (fa parte delle librerie standard per Fishino) e la libreria โepdโ che si trova nellโarchivio โ4.3inch-e-Paper-Code.7zโ scaricabile dal sito di Waveshare alla pagina https://www.waveshare.com/wiki/File:4.3inch-e-Paper-Code.7z; la libreria, una volta scompattato il file scaricato dal sito della Waveshare, va installata nella vostra cartella delle librerie, tipicamente dentro sketchbook\libraries\.
Una volta configurato lโIDE รจ necessario aprire il programma e personalizzarlo modificando alcune #define che si trovano ad inizio programma subito dopo le #include, quindi salvarlo:
#define MY_SSID โ_ssid_della_rete_wifi_โ #define MY_PASS โ_password_della_rete_wifi_โ #define MY_APIKEY โ_api_key_assegnata_โ #define MY_LOC โ_localitร _di_interesse_โ
Le prime due riguardano lโSSID e la password della rete WiFi cui la stazione si connetterร per raggiungere Internet e da essa il sito www.wunderground.com; le desumete dalla rete wireless, ovvero dalla pagina di impostazione del router WiFi. La terza riguarda la APIKEY assegnata dal sito, secondo quanto giร spiegato.
Relativamente alla #define MY_LOC โ_localitร _di_interesse_โ occorre rispettare la sintassi ricavabile dal sito www.wunderground.com, ovvero la localitร va espressa con il formato nome_nazione_/_nome_cittร _. Nel caso ci interessino le previsioni della zona di Milano dovremo mettere tra gli apici della #define il seguente testo: โItaly/Milanoโ cosรฌ da avere: #define MY_LOC โItaly/Milanoโ
Se volete simulare da browser la richiesta e vedere il codice json che viene ritornato (cosรฌ da verificare anche il corretto formato della localitร ), basta usare il seguente URL: http://api.wunderground.com/api/_api_key_assegnata_/conditions/forecast/q/Italy/Milano.json, mettendo al posto di _api_key_assegnata_ la API KEY precedentemente ottenuta.
Una caratteristica del codice che riteniamo interessante far notare รจ che le varie indicazioni di โiconaโ ritornate nel json possono essere:
โchanceflurriesโ, โchancerainโ, โchancesleetโ, โchancesnowโ, โchancetstormsโ, โclearโ, โcloudyโ, โflurriesโ, โfogโ, โhazyโ, โmostlycloudyโ, โmostlysunnyโ, โpartlycloudyโ, โpartlysunnyโ, โsleetโ, โrainโ, โsnowโ, โsunnyโ, โtstormsโ, โunknownโ
e vengono associate ad un numero piรน ridotto di immagini presenti sulla SD e rappresentate da un numero identificativo che puรฒ essere:
โ04โ, โ09โ, โ04โ, โ04โ, โ13โ, โ11โ, โ06โ, โ04โ, โ15โ, โ15โ, โ07โ, โ07โ, โ07โ, โ07โ, โ04โ, โ10โ, โ03โ, โ11โ, โ13โ, โ16โ
Come si vede, alcune indicazioni di โiconaโ ricevute nel json vengono associate alla stessa icona grafica che viene presentata sul display. Esempio:
โmostlycloudyโ, โmostlysunnyโ, โpartlycloudyโ, โpartlysunnyโ vengono tutti associati allโicona con identificativo โ07โ.
Altra cosa da notare รจ che i nomi sia dei mesi che dei giorni vengono ricevuti nel json in inglese e tradotti dal programma in italiano, tramite lโutilizzo di due array dedicati. I messaggi testuali che vengono quindi inviati al display ePaper sono memorizzati in stringhe classiche del โCโ dichiarate come costanti (per ovvie ragioni di ottimizzazione).
Altro dettaglio interessante รจ che alcuni metodi della libreria โespโ non sono stati utilizzati (perchรฉ richiedono lโutilizzo dei pin prefissati in libreria) ma abbiamo preferito loro delle versioni personalizzate; per lโesattezza, nel firmware sono state create le seguenti funzioni che li rimpiazzano:
– void myEPD_Init(void);
– void myEPD_Reset(void);
– void myEPD_WakeUp(void);
Inoltre abbiamo creato alcune funzioni per โpulireโ dai caratteri non necessari alcuni valori che si ricevono dal file json, eliminando, ad esempio, i doppi apici (โ) o i prefissi (โ_ntโ) al fine di snellire e semplificare il trattamento dei valori stessi.
Una volta compilato il programma e caricato sul NodeMCU, si puรฒ connettere questโultima scheda allโalimentazione che si รจ deciso di utilizzare; una volta alimentato lโinsieme, si vedrร il LED blu presente sul NodeMCU accendersi e in concomitanza con questo evento assisteremo allโaccensione del display ePaper (inizialmente apparirร bianco).
Collegandosi alla rete e da essa a Internet, verranno recuperate le informazioni e una volta visualizzate tali informazioni, atteso il tempo necessario che la visualizzazione sia stabile, si spegnerร sia il display che il LED blu, presente sulla NodeMCU, ad indicare lโentrata in deep-sleep del modulo. Il ciclo si ripeterร aggiornando la situazione ogni 20 minuti (3 volte lโora).
Ad ogni aggiornamento delle informazioni vedrete il display diventare bianco e poco dopo mostrare i nuovi dati meteo con le relative nuove icone e i parametri aggiornati.
Conclusioni
Bene, con questo abbiamo spiegato tutto quanto riguarda la nostra stazione meteo; sebbene sia in realtร un client appoggiato a un server web di previsioni meteorologiche, il progetto presenta spunti interessanti e svolge egregiamente il compito che ci si aspetta.
Il bassissimo consumo ottenuto con la modalitร deep-sleep del NodeMCU e lโassorbimento nullo dellโePaper nei periodi tra un refresh e lโaltro consentono il funzionamento a batterie, volendo, ricaricate da un piccolo pannello solare; infatti lโunico momento in cui la stazione assorbe una corrente significativa รจ quando il modulo ESP2866 trasmette in WiFi.