Datalogger WiFi con ESP8266
Da qualche anno in campo hobbistico si è diffuso l'interesse per il cosiddetto Internet Of Things, o internet delle cose: dispositivi dagli usi più disparati con i quali è possibile interagire tramite internet con interfacce utente spesso fornite da smatphones e PC. Dopo aver piluccato fra vari articoli in rete mi sono incuriosito all'argomento e dunque ho deciso di sperimentare un po'. Molto popolari sono i dispositivi costruiti attorno ad alcuni chip paricolarmente votati a questo tipo di utilizzo: l'ESP8266 nelle sue varie versioni e l'ESP32, "fratellone" del primo con qualche funzionalità aggiuntiva. Infatti dispongono di notevoli risorse hardware (piedini I/O, ingressi analogici, UART, SPI, I2C ecc) ma soprattutto possono essere programmati con diversi firmware; non ultima la possibilità di utilizzare l'IDE di Arduino. Inoltre il loro prezzo non impegna nessuno, quindi mi sono procurato due schede di sviluppo NodeMCU e due chip ESP-12. Per farci cosa? Innanzitutto per familiarizzare un po' con l'argomento, con l'obiettivo di realizzare qualcosa su misura dei miei interessi. Per i primi passi ho copiato qualche progettino già fatto, poi ho iniziato a pensare a qualcosa di più specifico.
In effetti.. La montagna ha partorito un topolino? Non proprio..
Vero, ho deciso di affrontare un campo in cui ho già acquisito una
certa dimestichezza, tuttavia in questo caso ci sono alcune marce in
più. Questo progetto acquisisce i dati da un sensore di temperatura ad
intervalli impostabili e genera direttamente un file in formato csv
scrivendo su una scheda di memoria flash di tipo microSD. L'orario di
sistema è acquisito via internet dal pool di servers NTP e aggiornato
regolarmente. Il firmware include anche la gestione delle richieste
effettuate su un BOT di Telegram, cosicchè la lettura del sensore possa
essere rilevata tramite internet. Ho anche cercato (invano) di inviare
in chat il file di log come allegato: nessun errore, "message sent" ma
null'altro. Ho aggirato il problema implementando un server FTP
attraverso il quale si accede alla scheda SD ed è possibile scaricare i
log e -udite udite- modificare i parametri di funzionamento. Infatti ho
constatato che inserire i parametri direttamente nel firmware comporta
che per modificare l'intervallo di acquisizione dei dati, modificare i
parametri del wifi, cambiare la password del server FTP occorre
necessariamente riprogrammare il chip. Che significa avere a portata di
mano un PC con l'ambiente di sviluppo installato, ricompilare,
ricaricare.. Troooppo macchinoso. Modificare un file di configurazione
col blocco note e caricarlo sulla SD del datalogger, magari dal
telefonino via FTP è decisamente più comodo.
La scheda NodeMCU è catalogata fra i "sistemi di sviluppo" nei principali siti e-commerce, dunque sono partito da quella base. Buona parte della circuiteria è a bordo: regolatore di tensione a 3.3 volt, convertitore USB/seriale, componentistica per il RESET, varie resistenza di pull-up e pull-down per il boot e il funzionamento ottimale della scheda. Dunque mi è bastato aggiungere l'adattatore microSD, un connettore per il sensore DS18B20 (potrebbe essere usato tal quale anche per un DHT22 o simili cambiando due righe di codice) uno per eventuali dispositivi I2C (ulteriori sensori, display, espansioni I/O ecc. uno per l'ingresso ADC e l'alimentazione esterna. Sono inoltre accessibili i pin di input/ output inutilizzati.
In un primo momento ho ritenuto opportuno montare il circuito su bread board con l'intento, verificato il corretto funzionamento e il dimensionamento dei componenti, di realizzare una piccola scheda attorno al solo ESP-12. Successivamente mi sono reso conto che in questo genere di progetti la cosa non ha senso, in quanto lo spazio occupato dai componenti necessari allo stadio di alimentazione e all'eventuale convertitore USB-seriale, nonchè l'esigua differenza di prezzo tra il solo chip e l'intera NodeMCU non giustificano lo sforzo. Quindi ho realizzato uno stampato con la zoccolatura per la NodeMCU e i pochi componenti aggiuntivi:
Attingere nei vari articoli in rete mi ha permesso
di approntare in tempo ragionevole un sketch "quasi" funzionante, perfezionandolo
poco a poco nelle settimane di test seguite alla prima accensione. In effetti ho
dovuto affrontare alcuni problemi inaspettati che nelle prime compilazioni del codice
provocavano reset casuali ogni due-tre giorni ed in generale instabilità di
funzionamento a lungo termine. Non avendo ottenuto risultati dalla
consultazione di guide, forum e blog vari, mi sono arrangiato fino a scoprire che
-udite udite- l'ultima versione dell'esp core caricato nel gestore schede dell'IDE
di Arduino semplicemente si "mangia" qualche byte della memoria heap ad ogni
iterazione del loop. Inevitabilmente, anche se la RAM disponibile non è poca, si arriva
al crash del sistema. Installata la versione precedente (2.3.x) lo stesso codice è
magicamente diventato "rock-solid". Successivamente mi sono dedicato agli orpelli,
così che la versione "momentaneamente definitiva" dello sketch prevede o provvede a:
Non entro nei dettagli della creazione e configurazione del bot Telegram, ci sono numerosi
articoli e tutorial ben fatti che spiegano passo passo la procedura. Unica annotazione:
salvo modifiche, lo sketch risponde al solo commando "/command1"; occorre inoltre inserire
la stringa Bot Token generata a sua volta da BotFather affinchè il sistema possa funzionare
correttamente.
Qualche immagine del datalogger wifi all'opera: il file csv generato..
..importato in un foglio di calcolo per ulteriori elaborazioni
La chat generata dal bot Telegram
..infine, l'accesso via FTP alla scheda di memoria
Sketch Arduino | |
Template file di configurazione | |
Pacchetto librerie utilizzate |
Disponendo di un paio di sensori DS18B20 nella versione da inserire negli appositi raccordi a pozzetto degli impianti idraulici ho installato la sonda sul serbatoio di accumulo dell'impianto solare termico, così da monitorarne le prestazioni. Peccato che, testa oggi ritesta domani, sia sopraggiunto l'autunno inoltrato e dunque il periodo meno interessante da questo punto di vista. Ho finito il progetto in ritardo? No, sono MOLTO in anticipo sulla prossima primavera!
praz2004 chiocciola libero punto it | ||