Arduino Weather Station e MQTT
In precedenza avevo illustrato il progetto di una stazione meteo realizzata con Arduino e uno specifico shield realizzato da Ethermania.
Non voglio ripetere cose già dette quindi vi rimando al post per ulteriori approfondimenti.
Invece voglio raccontarvi in breve di una nuova versione del progetto seppure esclusivamente dal punto di vista software. E questa è proprio la bellezza di Arduino: stesso hardware ma mille diverse soluzioni.
Il progetto iniziale prevedeva che i valori letti dai sensori venissero pubblicati su una pagina html in una stringa che utilizzava il ":" come elemento separatore. Questo per facilitare l'estrazione dei dati da un plugin che avevo realizzato per il progetto Freedomotic.
Ora ho pensato di aggiungere il supporto per MQTT che ormai è lo standard di riferimento (o quasi) per le comunicazioni in ambito IoT.
Fondamentalmente lo sketch è simile alla versione originale per quanto riguarda l'acquisizione dei dati dallo shield, utilizzando un'apposita classe con relativi metodi.
N.B. E' necessario caricare la libreria WeatherShield che trovate sul mio repository GitHub e la PubSubClient disponibile su https://github.com/knolleary/pubsubclient/releases.
Cambia il metodo di pubblicazione che ora viene effettuato su 3 specifici topic (/weathershield/temperature, /weathershield/humidity, /weathershield/pressure) del broker MQTT a cui Arduino è connesso.
Nell'esempio proposto il broker è raggiungibile all'indirizzo 192.168.1.50 mentre l'ethernet shield ha indirizzo 192.168.1.150.
Infatti ho utilizzato un broker sulla mia macchina, per inciso una semplice immagine Docker di mosquitto.
La pubblicazione dei dati avviene ad intervalli di 5 secondi (anche questo valore è configurabile) facendo un semplice confronto tra l'ora corrente e quella precedentemente memorizzata e verificando che la differenza sia maggiore del delay impostato (questo trucco è stato preso in prestito dal sito www.lucadentella.it).
Penso di aver fornito tutte le informazioni necessarie. Lo sketch è abbastanza esplicativo.