Un esempio di applicazione IoT della rete LoraWAN basata sulla blockchain Helium
Adesso che abbiamo un gateway LoraWAN disponibile vi racconterò cosa significa creare un’applicazione su base Helium.
Nell'articolo precedente ho raccontato la mia esperienza nell'installazione e configurazione di un gateway miner LoraWAN del progetto Helium.
Adesso che abbiamo un gateway LoraWAN disponibile vi racconterò cosa significhi creare un’applicazione su base Helium.
Per la prima applicazione, ho pensato di creare un tracker GPS: un dispositivo con antenna GPS che invia i dati della propria posizione, attraverso la rete LoRaWAN Helium, verso il Cloud Helium. Fatto questo, vedremo insieme come prendere questi dati dal backend per poter servire una applicazione. Il codice di questo piccolo progetto lo trovate qui su GitHub.
Il progetto si articola in tre macro elementi: hardware, backend e frontend.
L’hardware di base è un dispositivo ESP32 Lora connesso ad un modulo GPS; tutto comunicante verso la console Helium tramite uno dei tanti gateway LoRaWAN presenti nella città.
Il cuore del backend è la console Helium, configurata per ricevere il dato dalla rete Helium e inviarlo, con un modulo di integrazione, dalla console verso uno spreadsheet Google (che fungerà da base dati).
Infine il frontend: i dati inseriti sono poi elaborati all’interno dello Gsheet per avere la posizione e un link a Google Maps. Lo spreadsheet Google viene riempito da una Google Form che funge da entry point della nostra applicazione.
Entriamo nel dettagli implementativi.
Configurazione Hardware
Lato Hardware ho usato:
- una scheda di sviluppo SX1276 Modulo per Arduino della DollaTek, con chipset LoRa WiFi Heltec;
- come modulo GPS, l’Ublox Neo 6m nella versione prodotta da Aideepen;
È necessario avere un’account sulla piattaforma Helium: quello usato per l’installazione del gateway va benissimo.
Per configurare la scheda ho usato le istruzioni della pagina della documentazione ufficiale Helium dedicata ad Arduino.
Un paio di accortezze per non farvi perdere tempo:
- il link per scaricare il core della scheda a me non ha funzionato: ho usato invece la versione 0.0.5 descritta dal Json scaricato direttamente da GitHub;
- per gli utenti Linux non è necessario aggiornare alcun driver seriale come descritto nella documentazione.
Il tutorial della documentazione di Helium è ben fatto e la configurazione della scheda risulta molto semplice e lineare. Vi sarà utile po’ di malizia per il fatto che la scheda di sviluppo potrebbe non essere proprio quella del tutorial o che la libreria potrebbe essere cambiata e alcuni passaggi potrebbero non essere più necessari. Tutto sommato, non ci sono grossi trabocchetti.
Per testare la comunicazione ho eseguito l’esempio ESP32_LoRaWAN/OTAA
della libreria ESP32_LoRaWAN
installata durante la configurazione della scheda.
Scritto il firmware sulla scheda, con antenna LoRaWAN connessa e andando sulla console di Helium nella sezione device, possiamo vedere il nostro device che comunica. Al momento il nostro sistema sta comunicando dei dati del tutto farlocchi, ma a noi serve solo dimostrare che abbiamo fatto le cose correttamente e siamo in gradi di parlare con il backend.
Prima di aggiungere la lettura del GPS, ho preferito finire l’integrazione facendo uscire i dati dalla piattaforma Helium. In generale, una buona pratica che seguo quando faccio sviluppo IoT, è quella di realizzare una versione essenziale di tutti i mattoncini subito per essere sicuro che i dati facciano “il giro” così da poter proseguire il lavoro avendo sempre qualcosa di testabile dall’inizio alla fine.
Per questo scopo, le possibili integrazioni sono molte: io ho preferito andare verso Goolge Sheet per semplicità e per utilità per gli scopi dimostrativi.
Per comodità, nella creazione dell'integrazione sulla console di Helium, ho fatto che ridirigere tutto il payload comunicato dal dispositivo verso lo spreadsheet.
Per farlo ho creato una Google Form con un singolo campo di testo:
La funzione di trasferimento dall’input della console verso l’output nello spreadsheet ha una forma molto semplice:
Infine ho integrato tutto in un flow di Helium. Un flow è una vista offerta dalla piattaforma che permette di connettere in modo visuale nodi – che rappresentano dispositivi, funzioni e integrazioni – permettendo una programmazione no-code di base del sistema.
Una nota riguardo la scelta di ridirigere il payload direttamente verso lo spreadsheet: in questo modo sono riuscito ad avere la massima flessibilità e semplicità di lavorazione, con il minimo sforzo. Preparare il dato sulla ESP, parsificarlo sulla console di helium e poi elaborarlo sullo strumento di output mi ha consentito di tenere la parte maggiore della lavorazione del dato su spreadsheet potendo contare su molte funzionalità e garantendomi di poter mantenere una forma dove ogni passaggio (matematico e logico) risultasse chiaro e accessibile anche senza competenze di programmazione.
L’invio dei dati dipende molto dalla copertura Helium, quindi potrebbe non sempre andare a buon fine. Per questo, almeno all’inizio e nella fase prototipale, consiglio di utilizzare intervalli di comunicazione frequenti.
Il modulo GPS
La lettura del GPS avviene attraverso un protocollo seriale. Userò la seriale software dato che sulla mia scheda:
- la seriale fisica primaria è utilizzata per la comunicazione e il debug;
- la seconda seriale fisica viene usata dal modulo Lora.
Per gestire la seriale software in una scheda ESP ho utilizzato la libreria scaricabile direttamente dal gestore delle librerie dell’IDE di Arduino.
Inoltre ho utilizzato la libreria TinyGPS.h
, sempre scaricabile tramite l’IDE di Arduino. Il primo test è stato fatto usando l’esempio simple_test
della libreria, per verificare che il dispositivo fosse in grado di leggere correttamente il dato GPS.
Attenzione: il modulo GPS in questione fa della pre-elaborazione del dato prima di comunicarlo in seriale al nostro device: questo significa che, nel caso si abbia poca copertura GPS, il dispositivo potrebbe non emettere dei dati di ritorno e segnalare l’errore.
Maggiore documentazione riguardo questo problema si può trovare qui.
Integrazione della comunicazione LoRa e GPS
In questa integrazione ho unito i due esempi delle librerie mettendo assieme le configurazioni di:
- libreria
ESP32_LoRaWAN
; - libreria
SoftwareSerial
; - libreria
TinyGPS
.
Per quanto riguarda la comunicazione dei due dati di latitudine e longitudine il problema di fondo è che la libreria LoRa comunica degli unsigned char, mentre la libreria GPS restituisce dei float.
Dato che il mio scopo puramente didattico è mostrare il flusso di azioni per utilizzare LoRaWan su Helium, ho risolto il problema nel modo più semplice possibile ovvero trattando i float come stringhe. Sia per la longitudine che per la latitudine, sulla ESP, ho:
- suddiviso il dato in coppie di cifre;
- trattato poi ogni coppia come un byte (ES: per cui 3.456789 diventa: 03, 45, 67, 89). Questo non è efficiente per grandi quantità di dati, ma per gli scopi dimostrativi dell’articolo era sufficiente e mi permetteva di risolvere in poco tempo e di mantenere la facilità di comprensione dell’esempio;
- comunicato il dato alla console per l’invio allo spreadsheet.
Sullo spreadsheet i byte comunicati sono ricevuti come elenco di byte separati da virgola. Con le funzion SPLIT()
e CONCATENATE()
è stato semplice ricreare i dati di latitudine e longitudine e poi comporre un link che mostrasse su Google Maps la posizione comunicata dal device.
Et voilà! Il nostro prototipo è completo.
Conclusioni
Dall’ideazione di questo esempio alla sua realizzazione, ho impiegato qualche ora di tempo. Ovviamente si tratta di un risultato “molto prototipale”, tuttavia mi ha permesso di testare tutti gli aspetti principali di uno sviluppo su Helium e di avere già un oggetto funzionante e utilizzabile senza impazzire.
La creazione di dispositivi a basso consumo per il monitoraggio e il tracking sono diventati progetti sempre più accessibili e di efficace realizzazione. Lavorando regolarmente su questi temi, penso che il progetto Helium sia molto interessante e che sia sviluppato molto bene. Il pregio principale è che riesce a nascondere la complessità che c’è quando si vogliono usare reti esposte da privati per poter acquisire un proprio dato. Inoltre, il sistema permette sempre di accedere a questa complessità nascosta se se ne ha la necessità. Il Progetto Helium è basato su tecnologie open source e gestito da una open alliance, altro elemento da non sottovalutare perché da la possibilità di accedere direttamente al cuore della tecnologia. Il progetto Helium è in fortissima crescita e sta toccando uno dei suoi massimi di diffusione qui in Europa. Tutti questi elementi rendono Helium un buon candidato per lo sviluppo di prodotti IoT base LoRa.
Contattatemi: fatemi sapere se anche voi avete provato Helium o se ci sono temi che volete approfondire.