domenica 16 Novembre 2025
Home / Corsi / Corso Python / Sperimentando con moduli radio Tx/Rx LoRa By Ippogrifo
LoRa

Sperimentando con moduli radio Tx/Rx LoRa By Ippogrifo

Introduzione

A volte, dalle discussioni e scambio di idee che avvengono nel forum, nascono esperimenti, spunti, idee di progetto. Le migliori di queste, vengono trasposte nel blog, in modo da essere più fruibili e più facilmente rintracciabili. Quanto segue, è frutto dell’utente Ippogrifo, che ha sperimentato una soluzione per aiutare gli utenti nei forum, e a cui vanno i miei complimenti. 

Zzed

Cos’è LoRa?

Con l’acronimo LoRa si intende una tecnologia di telecomunicazione RF a lungo raggio (Long Range), meglio conosciuta come LoRaWAN (Low Power Wide Area Network). Questa tecnologia è applicabile a sistemi con interazioni lente, esempio variazioni di temperature interne/esterne, umidità, ecc., quindi con fenomeni lenti nel tempo; non può essere applicata a sistemi che richiedono “interventi” in tempo reale.

L’architettura del sistema si basa su tre elementi:

  • gli End Node, distribuiti sul campo per raccogliere i dati da sensori vari
  • i gateway che comunicano con gli end node ed istradano i dati verso i server
  • i vari server che gestiscono i dati ricevuti dai gateway.

LoRaWAN è una rete con struttura a stella (e/o di stelle) senza capacità di comunicazione fra gli end node (ovvero gli end node non possono comunicare tra loro). Il gateway è il centro stella: raccoglie i dati trasmessi dagli end node e li inoltra, usando una connessione con tradizionali protocolli IP, al Network Server (NS) per una prima gestione dei dati stessi. Questi sono successivamente inviati all’ Application Server (AS) che ha il compito di estrarre il dato utile e renderlo disponibile all’applicazione finale. Per maggiori informazioni, in rete è possibile trovare documentazione molto più dettagliata sull’intero processo.

Questo a livello home è forse eccessivo, non necessario; una connessione punto-multipunto potrebbe soddisfare le esigenze del momento (ad esempio per l’IoT).

Una possibilità è la realizzazione di una struttura con un Master e n. Slaves utilizzando dei moduli end-node Tx/Rx LoRa; il master ogni x secondi (minuti, ecc) farà il polling degli slaves ed attenderà la risposta da ciascuno di essi per elaborarla successivamente.

Per sperimentare questa tecnologia di comunicazione a lungo raggio (sino a 10 Km in visibilità ottica) sono stati utilizzati diverse tipologie di moduli end_node.

END-NODE RYLR998

I piccoli moduli LoRa RYLR998 sono interfacciabili tramite connessione seriale UART e comandi AT. Per la realizzazione degli slaves e master sono stati utilizzati dei Raspberry Pi Pico. Successivamente il master pi pico è stato sostituito da un Raspberry Pi4b e SO bookworm. Non sono state testate altre versioni/modelli di Pi Pico.

Il protocollo radio LoRa degli end-node è parte del firmware stesso dei moduli , così come i parametri di configurazione che ne deteminano l’operatività. Questo, alla fine, definisce le funzioni che dovrà svolgere un Pi Pico utilizzato come slave/master e/o di un Pi4 come master: interfaccia per la configurazione, codifica/decodifica dei comandi/dati da inviare e risposte/dati da ricevere.

Prendendo spunto da diversi siti in rete che trattavano l’argomento in micropyton, è stato adottato lo stesso linguaggio per la programmazione dei Raspberry Pi Pico e, quindi, Python per i Raspberry Pi4b (con SO bookworm; in quest’ultimo nel caso non già presente, andrà installata la libreria PiSerial per la gestionedella porta seriale). Thonny come ambiente.

I moduli RYLR998 consentono una elevata possibilità di cofigurazioni, hanno una potenza RF in uscita di 22 dBm (150 mW circa), equipaggiati con antenna elicoidale “on board”. Tensione di alimentazione = 3,3 VDC; tensione linee Tx/Rx uart = 3,3VDC, compatibili con Pi Pico e Rpi4b.

I moduli sono di default così configurati:

  • velocità uart: 115200 bit/sec 8 N 1 (velocità di connessione tra modulo e Pi Pico o Pi4b)
  • banda915MHz (configurata successivamente per 868 MHz)
  • Spreading Factor9
  • Bandwidth125kHz
  • Coding Rate1
  • Preamble Length12
  • Address0 (successivamente configurati diversamente per master e slaves)
  • Network ID18
  • CRFOP22 dBm

La configurazione può essere modificata tramite i comandi AT.

Il tempo che intercorre tra una interrogazione del master (polling) alla risposta dello slave è funzione della configurazione. Con i parametri di default utilizzati (e le variazioni minimali apportate) il tempo di risposta è di citca 2-3 secondi per un pacchetto dati di 10-20 byte.

Il modulo, di default, è in modalità Tx/Rx.

Essendo il sistema aperiodico, ovvero non vi è alcuna sincronizzazione nel polling, molto importanti si sono dimostrate le temporizzazioni, in particolare modo tra l’invio dei comandi dal master (funzione send_command()) e l’attesa della risposta da parte degli slaves.

Sugli slaves è stato attivato il secondo core, come thread. Su uno degli slaves il codice nel thread “comunica” in i2c con un modulino INA219 preposto alla lettura della tensione di alimentazione del modulo stesso (3,3 V). Sugli altri slaves viene prodotto un numero randomico (funzione random.random()). I dati (lettura tensione, numeri randomici) vengono presentati alla funzione main tramite variabile globale da cui verranno inviati poi al master. In questo caso il master si limita a mostrare i dati ricevuti sul display.

Sul Pi4b dovrà essere abilitata la porta seriale: da terminale digitare “sudo raspi-config”, selezionare “Interface Option” , successivamente “Serial Port” (Enable/Disable….); scegliere NO per “Would …login shell …”; scegliere SI per attivare la porta seriale. Uscire dalla configurazione.

Per verificare la capacità di collegamento, sono stati efferruati, velocemete, alcuni test nel centro abitato (non quindi in visibilità ottica): la “coperura” è stata di alcune decine di metri.

Affinchè master e slaves possano comunicare, è necessario che i parametri di confgurazione su tutti i dispositivi siano identici.

La sperimentazione, realizzata con un master (Pi4b), tre slaves (Pi Pico) ed i codici in micropython/python per Slaves e Master, è fine a se stessa, ovvero non vi sono applicazioni che li integrano per svolgere un qualsiasi lavoro.

Collegamenti tra Pi Pico slaves e moduli LoRa:

Pi Pico

RYLR998

Tx – GPIO 0 —>

Pin RXD

Rx – GPIO 1 <—

Pin TXD

Gnd – GPIO38 —>

Pin GND

+3,3V-GPIO36 —>

Pin VDD

Collegamenti tra Pi4b master e modulo LoRa:

Pi4b

RYLR998

Tx-GPIO14 —>

Pin RXD

Rx-GPIO15 <—

Pin TXD

GND-Pin6 —>

Pin GND

I +3,3V per alimentare il modulo LoRa sono stati derivati da un pccolo step-down +5V –> +3,3V, collegando il Pin2 (+5V) e il Pin6 (GND) rispettivamente all’ingesso “VIN” e “GND” dello step-down. L’uscita (a 3,3V) “OUT” e “GND” sono state collegate rispettivamente ai Pin VDD e GND del modulo LoRa.

 Dai links di seguito è possibile scaricare il manuale tecnico e la guida ai comandi AT:

Versione SW/FW utilizzato:

  • Firmware su Pi Pico: RPI-PICO-20250911-v1.26.1.uf2
  • Python 3.11.2 per Raspberry Pi4b

Gli Slaves RYLR998:

tre Slave con Pico
tre Slave con Pico

Codice Pi Pico Slave:

(con modulo INA219)

 

Il Pi4b RYLR998 Master:

Pi4b Master
Il Pi4b usato come Master

Codice Pi4b Master:

 

Se vuoi restare aggiornato, seguici anche sui nostri social: Facebook, XYoutube

Trova prodotti di elettronica, making e accessori Raspberry Pi in offerta, supportaci e risparmia seguendo il nostro canale delle offerte su Telegram!!

 

A proposito di Zzed

Appassionato di informatica alternativa, ma perenne novellino di Linux..

Vedi Anche

RPOM 158 doppia pagina

RPOM in Italiano! Raspberry Pi 500+

Estratto, tradotto in italiano, di RPOM N°158 la rivista ufficiale della Fondazione Raspberry Pi.

Powered by themekiller.com