Dopo aver disegnato la nostra rete LoRa e progettato i dispositivi necessari al suo funzionamento, in questa seconda parte dell'articolo imposteremo gli sketch che daranno forma alla relazione tra terminali remoti e gateway, e vedremo come rendere fruibili i dati acquisiti su una rete IP.
Una rete LoRa per usi domestici
Come anticipato nella prima parte dell'articolo, lo scopo di questa trattazione è quello di impostare le basi dello sviluppo di una rete LPWAN di tipo LoRa senza però entrare nel dettaglio dei protocolli a più alto livello (LoRaWAN), ma limitandoci a stabilire delle regole di base per la comunicazione tra i nodi terminali e il gateway. Quindi, ci limiteremo a lavorare sullo strato fisico dei collegamenti radio introducendo però degli elementi di riferimento essenziali per far funzionare la nostra rete. La prima cosa da definire è un nome univoco per ogni dispositivo della nostra rete, sostanzialmente una sorta di indirizzo a cui recapitare i messaggi con i dati o, nel caso di ricezione, appunto il destinatario delle informazioni trasmesse. La seconda cosa che dobbiamo stabilire è il tipo di relazione che vogliamo impostare tra i vari elementi che compongono la rete.
Potremmo, ad esempio, decidere che ogni nodo terminale alla rilevazione di un determinato evento, acquisito da qualche sensore, informi immediatamente il gateway trasmettendo tale informazione, ad esempio il superamento di una soglia impostata su qualche grandezza fisica. Oppure, si potrebbe impostare una rilevazione con frequenza periodica in cui i nodi terminali inviino lo stato dei sensori ciclicamente, o ancora si potrebbe pensare invece ad un gateway attivo che su base richiesta selezioni un nodo terminale della rete e si faccia inviare lo stato dei sensori, e così via.
Quindi, dipende tutto da cosa vogliamo far fare alla nostra rete domestica. Nel nostro caso, come anticipato nella prima parte dell'articolo, avremo un gateway dotato di un web server tramite il quale potremo interrogare i singoli nodi terminali.
In Figura 1 è visibile la home page del web server installato sulla board ESP32, l'indirizzo IP a cui connettersi sarà visualizzato sul display OLED una volta che il gateway si sarà registrato sulla rete. La schermata è molto semplice e ci viene chiesto di selezionare uno dei nodi della rete, una volta selezionato quello che ci interessa si avvia la comunicazione radio LoRa e il nodo trasmette lo stato dei sensori collegati. Nel nostro caso, per semplicità, abbiamo ipotizzato di collegare dei sensori di prossimità che possono trasmettere alle porte del microcontrollore (Atmega328p) solo un stato ON/OFF, ma potenzialmente potremmo collegare diversi tipi di sensori capaci di produrre ognuno una risposta diversa (digitale o analogica) e ovviamente si potrebbe pensare anche di configurare alcune porte come output ed inviare comandi di telegestione per il controllo remoto di eventuali periferiche.
Nella nostra ipotesi, avremo invece in risposta una serie di informazioni come quelle visibili in Figura 2.
In pratica, la rete LoRa progettata per questo articolo è composta da uno o più nodi terminali che possono gestire il collegamento simultaneo di sei sensori e inviarne su richiesta il relativo stato (nella fattispecie appunto ON/OFF). Oltre allo stato dei sei sensori, viene trasmesso lo stato di funzionamento generale del nodo terminale "node status" e il livello della tensione di alimentazione applicata al dispositivo "LoRa node power". Nella pagina web, viene anche pubblicata l'intensità del segnale ricevuto da gateway "LoRa node RSSI".
Il gateway
Vediamo ora nel dettaglio lo sketch che è stato sviluppato per far funzionare il gateway (Figura 3). Per la scrittura del codice si è fatto uso dell'IDE di Arduino (versione 1.8.19) e per poter lavorare con la board LOLIN32 lite occorre scaricare ed installare nell'ambiente "board manager" il pacchetto "ESP32 Arduino", selezionando successivamente la board "WEMOS LOLIN32". Installata la board, avremo a disposizione una serie di librerie utili per la creazione e la gestione di un semplice web server locale.
Dando un'occhiata allo sketch del gateway (lora_gateway_ver1.0.ino) possiamo vedere che le principali librerie utilizzate sono 4 e servono per gestire rispettivamente:
- il display OLED
- il modulo LoRa
- il web server
- il collegamento WiFi alla rete locale
Di seguito, gli "header file" delle librerie utilizzate nello sketch:
#include <LoRa.h> #include <WiFi.h> #include <WebServer.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
Il display OLED é gestito tramite le due librerie Adafruit, in particolare, Adafruit_SSD1306 é il vero e proprio driver, mentre Adafruit_GFX é il livello sovrastante che implementa le primitive grafiche e tutti i comandi che permettono di interagire con il display.
Una menzione particolare va fatta per la libreria Arduino-LoRa scritta da Sandeep Mistry, disponibile da diverso tempo. Si tratta di una libreria compatta e dotata di tutti i principali comandi che servono per lavorare con l'hardware dei moduli LoRa più comuni. Consiglio a tutti di dare uno sguardo alle API (Application Programming Interface) che vengono messe a disposizione del programmatore. In questo progetto, sono state utilizzate quelle strettamente necessarie al funzionamento della rete. A tal proposito, riprendendo brevemente quanto detto nella prima parte dell'articolo circa la potenza che il modulo LoRa può erogare, si può fare riferimento al comando LoRa.setTxPower(txPower); con il parametro txPower che può assumere un valore compreso tra 2 e 20 (il default è 17dBm). Per l'installazione della libreria nell'IDE di Arduino, è sufficiente andare nell'ambiente "Manage Libraries..." e cercarla nell'elenco delle librerie disponibili per poi eseguire l'installazione dell'ultima versione.
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2257 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.