Indice
Comunicazione wireless con moduli Xbee
Introduzione
In laboratorio sono presenti degli shield XBee che permettono di comunicare via radio tra schede Arduino. Gli shield montano i moduli wireless Xbee S2 della Digi International che trasmettono via radio usando il protocollo ZigBee/ZNet 2.51). Rimuovendo i moduli si può leggere il product number (XB24-BCIT-
) che identifica la versione a corto raggio (non PRO) del modulo (vedi il data sheet e il confronto tra i vari modelli).
Gli shield sono perfettamente funzionanti ma obsoleti; gli stessi moduli wireless oggi si montano sui Wireless Shield, più facili da usare2) e supportati ufficialmente.
Lo shield XBee
Lo shield copre parzialmente la scheda Arduino, replica i pin analogici e quelli digitali da 2 a 7. I pin 0 e 1 sono utilizzati dal modulo per la comunicazione seriale via radio. Sulla scheda è riportata la piedinatura dei moduli, che possono essere sostituiti. Sono presenti due jumper con i quali si seleziona il funzionamento della scheda:
- nella posizione XBEE il microcontrollore riceve solo dal modulo XBee (non da PC) e invia sia al modulo XBee che al PC (via USB)
- nella posizione USB il modulo XBee comunica direttamente col PC via USB ma solo se è stato rimosso il uC, altrimenti la comunicazione è PC-microcontrollore
Una descrizione più completa dello shield si trova nella pagina del sito Arduino.
Configurazione dei moduli
I moduli Xbee permettono di realizzare una vasta serie di applicazioni (connessioni end-to-end a reti mesh, reti a stella) e possono utilizzare protocolli diversi in base al firmware utilizzato. Sono prodotti complessi e ricchi di funzionalità ma non semplici da usare (per farsi un'idea consultare le 200 pagine di manuale). Prima di utilizzare i moduli occorre configurarli; il modo più semplice di procedere è quello di installare il software XCTU e configurare i moduli da PC usando la scheda Arduino e il relativo shield 3).
Il software XCTU è completo e facile da usare: i moduli vengono autorilevati, c'è una guida in linea e su internet ci sono video che ne illustrano il funzionamento. Per configurare i moduli con i nostri shield però occorre:
- rimuovere il microcontrollore dalla scheda Arduino
- montare sulla scheda Arduino lo shield Xbee con i due jumper nella posizione USB
A questo punto è possibile caricare un firmware sul modulo e configurarlo:
- collegare la scheda al PC e selzionare Discover
- rilevato il modulo aggiungerlo
- visualizzare le proprietà del modulo e individuare il firmware caricato
- eventualmente caricare un nuovo firmware col pulsante Update Firmware
I parametri più importanti sono:
- ID (PAN ID): deve essere lo stesso per tutti i moduli
- BD (Baud Rate): 9600
- SH e SL: il serial number alto e basso del modulo
- DH e DL: il serial number alto e basso del modulo destinatario della connessione
La comunicazione tra moduli può avvenire il broadcast (verso tutti) o unicast (un solo destinatario). Nel secondo caso bisogna specificare il serial number del destinatario utilizzando i parametri DH e DL. Per una connessione di tipo multicast è possibile accettare tutti i valori di default.
Il firmware caricato specifica la funzione svolta dal modulo e il protocollo utilizzato, cioè ZigBee o ZNet 2.5 (NB i due protocolli sono simili ma non compatibili). Nel fare la scelta occorre tener conto del fatto che una rete ZigBee o ZNet richiede che un nodo svolga la funzione di coordinator gestendo la rete; gli altri sono router (inoltrano i pacchetti di cui non sono destinati) o end device (destinatario).
Ad esempio per una comunicazione end-to-end (unicast) si può usare:
- un modulo con firmware ZigBee Coordinator AT4)
- l'altro con firmware ZigBee Router/End Device AT
Test dei moduli
Seguendo i suggerimenti della pagina sul Wireless Shield si può testare la comunicazione tra moduli usando due schede Arduino e due shield XBee con moduli XBee S2:
- senza lo shield inserito carichiamo nella prima scheda lo sketch di esempio Physical Pixel; il programma accende e spegne il LED sulla scheda Arduino in base a ciò che riceve via seriale ('H' accende il LED, 'L' lo spegne); prima di procedere si può provare se funziona inviando i due caratteri da PC col monitor seriale
- inseriamo lo shield XBee con i jumper nella posizione XBEE nella prima scheda
- senza lo shield inserito carichiamo sull'altra scheda uno sketch che invii i caratteri 'H' e 'L' a intervalli di un secondo (anche in questo caso si può fare un test col monitor seriale)
- inseriamo lo shield XBee con i jumper nella posizione XBEE seconda scheda
- alimentando le due schede, se la comunicazione seriale via wireless funziona, il LED della prima scheda lampeggerà
Osservazioni:
- le due schede risultano associate se il coordinator lampeggia ogni secondo e l'end-point due volte al secondo
- per inviare i caratteri si usano le funzioni
print()
eprintln()
; funziona come per il monitor seriale ma i dati sono trasmessi via wireless invece che col cavo USB