Stazione meteo APRS con ESP8266

Un po' per lavoro, un po' per diletto, negli scorsi due anni ho avuto più volte a che fare con il monitoraggio dei parametri ambientali e la misurazione della qualità dell'aria. L'argomento va a nozze con quanto sperimentato nel precedente DataLogger WiFi, occorreva solo un set di sensori in grado di rilevare un maggior numero di grandezze. Sia in campo industriale che amatoriale sono molto diffusi i bus di comunicazione SPI e I2C attraverso i quali è possibile condividere fra più sensori le stesse linee dati. Il connettore I2C bell'e pronto, e il fatto di non aver ancora utilizzato questa tecnologia mi ha convinto a realizzare questo progetto.

Compromessi

Considerando la "utilità marginale" dell'oggetto, lo scopo, il tempo a disposizione, non ultimo il costo dei sensori, alla fine la scelta è caduta sul BME280 (più probabilmente il suo clone cinese): comunicazione su bus I2C, lettura di temperatura, umidità relativa, pressione barometrica. Grandezze bene o male già note, per cui risulta facilmente valutabile l'attendibilità e la coerenza dei dati raccolti. Disponendo della necessaria pazienza è acquistabile dalla cina a qualche euro al pezzo; in caso contrario, o per sensori più "esotici" in grado di misurare la concentrazione di composti volatili, monossido di carbonio, ossidi di azoto e via dicendo, il prezzo può schizzare rapidamente a diverse decine di euro. In termini garbati, tale eventualità esula dallo scopo del progetto. (!)

A cosa serve

Trattandosi di una evoluzione del dalalogger wifi condivide buona parte dell'hardware; sono state manenute alcune funzionalità quali la registrazione dei dati su scheda SD, la modifica dei parametri mediante file di configurazione e l'accesso tramite FTP; abbandonate altre (il bot Telegram, carino e di grande effetto con gli amici ma non così utile) e infine implementate nuove funzionalità con la realizzazione di una mini-stazione meteo APRS/CWOP.

Schema elettrico

Layout

Lato componenti

Lato rame

Realizzazione

Come in precedenza sulla piccola basetta sono presenti connettori per un bus OneWire, un I2C, l'ingresso analogico e i pin I/O inutilizzati della scheda NodeMCU. Le linee dedicate al bus SPI sono utilizzate per la scheda di memoria microSD. Non avendo a disposizione un adattatore "canonico" ho risolto utilizzando quello col quale vengono spesso vendute le microSD adattandole al formato SD standard, saldandone i contatti direttamente ai pin di un connettore a passo 100 mils opportunamente ripiegati. Per questa operazione occorre effettuare saldature veloci in quanto la plastica di cui è costituito l'adattatore si squaglia facilmente; con saldatore ben caldo, stagno "di quello buono" e mano ferma si ottiene comunque un ottimo risultato sia meccanico che elettrico. Come già accennato i file di dati sono accessibili in ambito domestico tramite wifi e FTP. Fuori casa invece ho deciso di sfruttare le potenzialità della piattaforma aprs.fi (come già nel precedente progetto GGM EVO) che si occupa di costruire i grafici con i valori rilevati.

In questo modo ho la possibilità di consultare le misurazioni direttamente in forma grafica e senza i problemi legati all'accesso al datalogger da internet (NATting, port forwarding, IP tunneling, VPN e amenità simili). Con connessione internet attiva, al momento di trasmettere i dati la NodeMCU si connette via telnet al server configurato, si autentica e inoltra una stringa di caratteri opportunamente costruita contenente le letture dei sensori. Per la corrispondente funzione del codice mi è stato di grande aiuto l'amico Gianpiero IW2ESL, che mi ha evitato i grattacapi derivanti dalla comprensione del protocollo di accesso e successivo invio dei dati ai server. Dal momento che il mio router non è connesso permanentemente, nelle ore in cui è spento ho deciso di utilizzare la rete APRS radioamatoriale mediante un TNC esterno dedicato e un ricetrasmettitore. Tramite il mosfet 2N7000 il segnale TXD seriale viene invertito, traslato a livello compatibile RS232 (il segnale RXD non è utilizzato) e portato all'esterno verso il TNC. Per questo progetto lo schema derivato dal lavoro di WB8WGA e costruito attorno a un PIC 16F88 è perfetto; dai cassettini dei miracoli sono usciti quasi tutti i componenti, quindi contemporaneamente ai test del firmware, che hanno occupato diverse settimane, ho realizzato anche questo:

Probabilmente l'ESP8266 ha la potenza sufficiente ad implementare le funzionalità del TNC nel software, ma ho valutato che, viste le già numerose routines che gravano sui timers/interrupt interni, l'ulteriore carico di lavoro non avrebbe portato a nulla di buono. Lo schema è lo stesso utilizzato nel GGM EVO, aggiornato con la possibilità di aggiungere un ulteriore sensore di temperatura. Su questo esemplare ho installato l'ultima versione del firmware modificato da GianFranco IZ8EWD su www.pianetaradio.it, che ringrazio per aver pubblicato la versione a 9600 Bd, e permette al TNC di operare, oltre che nelle modalità tracker e converse, anche nel modo KISS.

Visti i risultati incoraggianti dei test e allettato dalle potenzialità via via aggiunte al codice del logger ho deciso di gestire anche la comunicazione verso il TNC tramite pacchetti (frames) KISS. E meno male che non avevo scadenze per lo sviluppo del progetto! La sintassi da osservare è piuttosto contorta, anche se bisogna dare atto a chi l'ha sviluppata che il risultato è efficiente ed efficace. Oltre al tempo occorso per acquisire la documentazione è stato necessario scomodare quasi tutti i santi prima di ottenere un codice funzionante. Ma, a risultato ottenuto, maggiore la fatica, maggiore la soddisfazione! Oltre ai dispositivi KISS "nativi", come il TNC2 con EEPROM NordLink o i recenti Mobilinkd / MicromodemGP di UnsignedIO, ho deciso di gestire anche quelli in cui la modalità kiss viene attivata con una sequenza di comandi. Nel mio TH-D7 ad esempio occorre immettere i comandi HB 1200, poi KISS ON, infine RESTART. Se inseriti nel file di configurazione del logger, al boot vengono inviate al TNC fino a tre stringhe contenenti i comandi opportuni. In questo modo dovrebbe essere utilizzabile -quasi- ogni aggeggio finora relegato nelle soffitte. Personalmente ho testato con successo il TH-D7, il fidato TNC KISS autocostruito e il NoaPack oltre, naturalmente, l'ultimo arrivato.

Gli ultimi ritocchi, Extra Bonus!

A questo punto dello sviluppo ero già soddisfatto dei risultati, poi ho pensato "Il DataLogger WiFi è al suo posto nel sottotetto, questo pure..." due più due, ho deciso di accorpare le funzioni in un unico dispositivo. Ciò permette di consultare dal web la lettura del DS18B20 e visualizzare uno storico dei valori rilevati tramite le pagine "Pacchetto" e "Stato". Ho incorporato nel firmware le funzioni per la lettura del sensore DS18B20 posto sull'accumulo dell'impianto solare e aggiunto qualche funzionalità extra:

  • dal SETUP.INI è possibile abilitare la lettura del BME280, del DS18B20 o di entrambi;
  • se utilizzati entrambi i sensori la lettura del DS18B20 viene accodata ai pacchetti dati nel campo Commento (vedi foto)
  • nel caso di utilizzo del solo DS18B20 i dati del BME non vengono trasmessi e viene generato un pacchetto APRS di tipo STATUS che quindi può essere associato anche a stazioni base o mobili

Dopo le ultime verifiche non rimane che giocare con i risultati...

Nei files di log sono scritti data e ora della lettura seguite dai valori ricevuti dai sensori abilitati; a mezzanotte sono inoltre "loggati" i valori della temperatura media giornaliera e dei gradi giorno (riscaldamento e raffrescamento) conseguenti. Sono presenti due ulteriori contatori che accumulano le letture stagionali e vengono loggati rispettivamente il 15 ottobre e il 15 aprile.
Ultima operazione, l'inscatolamento. Per quanto mi è stato possibile ho curato il codice affinchè fosse a suo modo razionale ed elegante (!!) mentre per il contenitore ho scelto una soluzione un po' rozza, solo funzionale. Ne ha fatto le spese la calottina da palo che conteneva uno switch DiseqC per un impianto TV satellitare, robusta e... basta:

Download

Sketch Arduino
Template file di configurazione
Pacchetto librerie utilizzate
Documentazione protocollo AX25
Documentazione protocollo APRS
Sintassi frame KISS

praz2004 chiocciola libero punto it