Idee per un progetto finale con Arduino che sfrutti la comunicazione wireless.
Possibili soluzioni:
Abbiamo dei moduli bluetooth RN-42 ma ci manca una scheda breakout per usarli. Bedei ha ordinato degli shield (o schede breakout?) per poterli interfacciare con Arduino. Saranno comunque da saldare e non è facile.
Al momento è la soluzione più difficile per i problemi hardware.
Nel lab 12 abbiamo degli shield XBee con moduli XBee della Digi International. Sono shield obsoleti - il modello attuale è questo - ma funzionano bene e si trova documentazione online.
Gli shield montano moduli XBee S2 (product number XB24-BCIT-). Non è facile identificarli perché ne esistono di varie tipologie e il product number per l'identificazione è indicato sotto il modulo (bisogna toglierlo dallo shield per leggerlo). Ad ogni modo si tratta del modello non PRO (cioè a corto raggio) della serie 2, con il quale è possibile creare anche reti mesh usando i protocolli ZigBee o ZNet 2.5. Questi moduli sono più difficili da usare di quelli della serie 1 che non richiedono configurazione1). Sul sito di Arduino ci sono pagine sui due shield (vecchio e nuovo modello) e guide su come usarli (vedi i link in fondo alla pagina).
Caratteristiche:
Il resto della pagina non interessa perché è sui moduli della serie 1.
Anche la guida dello shield Xbee fa riferimento a moduli della serie 1. Per la serie 2 c'è un dead-link nella pagina a un PDF che dovrebbe essere questo ma non è molto utile.
Per testare la comunicazione wireless:
Altre note:
print()
e println()
si usano come al solito ma inviano dati via wireless invece che col cavo USBQuesta guida fa riferimento a moduli della serie 2 - i nostri - ma è scritta per il nuovo wireless shield.
I moduli della serie 1 (802.15.4) non sono compatibili e permettono solo topologie a stella ma sono molto più facili da usare (la configurazione è opzionale). I moduli della serie 2 possono usare il protocollo ZigBee o quello ZNet 2.5 con la stessa radio; l'impostazione si fa cambiando il firmware; i due protocolli non sono compatibili. E' necessaria una configurazione via firmware anche per una connessione point-to-point dove un nodo va impostato come coordinator e l'altro come end-point/router (in una rete ZigBee ci vuole sempre un solo coordinator che gestisce la rete, e degli end point che comunicano direttamente col coordinator o attraverso dei router).
Configurazione via firmware:
La guida fa riferimento alla vecchia versione di XCTU (ancora disponibile come versione legacy); quella nuova sembra molto migliore. In ogni caso da XCTU si può rilevare il modulo, leggere e scrivere la configurazione. Per una comunicazione unicast (due soli moduli) bisogna:
Primo test effettuato a casa con:
XCTU funziona bene e sembra molto completo (vedi il video). La scheda viene riconosciuta (autodetect o cerca) ed è possibile leggere i parametri e salvarli come profilo.
L'end point montava il firmware 1347 (ZNet 2.5 Router/End device API) che non risponde ai comandi AT; lo sostituisco col firmware 1247 (ZNet 2.5 Router/End device AT) così posso interagire con il modulo da un altro terminale o direttamente dal uC2). Per aggiornare il firmware bisogna prima identificare la product family indicata da una sigla posta sotto il modulo (nel nostri moduli si legge XB24-BCIT-
che corrisponde alla famiglia XB24-B in XCTU). Imposto la seconda scheda come 'ZNet 2.5 coordinator AT' (firmware 1047).
I parametri principali dell'end-point e del coordinator prima della riscrittura del firmware erano:
parametro | end-point | coordinator |
---|---|---|
CH (channel) | 0 | F |
ID (PAN ID) | 234 | 234 |
MY (16bit network address) | FFE | 0 |
SH (serial nuber high) | 13A200 | 13A200 |
SL (serial nuber low) | 407B6C64 | 407B6BEF |
BD (baud rate) | 9600 | 9600 |
DH | 0 | |
DL | 0 |
Nel dubbio ripristino i default e parto da zero. In pratica basta segnare i parametri SH e SL dell'end-point, e controllare che BD e ID corrispondano nei due moduli; per tutto il resto si può lasciare il valore di default. I moduli sembrano associarsi (il coordinator lampeggia ogni secondo e l'altro due volte al secondo). Per creare una rete unicast bisogna specificare l'indirizzo dell'end-point nel coordinator copiando i valori SH e SL dell'end-point nei parametri DH e DL (con il valore di default il coordinator trasmette in broadcast).
Sposto il jumper dello shield dell'end-point su XBEE e carico sul suo Arduino lo sketch Physical pixel (da Esempi|Communication). Il programma accende il led del pin 13 quando riceve via seriale - in questo caso tramite il modulo XBee - il carattere 'H' e lo spegne quando riceve il carattere 'L'. Non so perché ma non riesco a caricare lo sketch con lo shield inserito (avevo appena caricato Blink con lo shield inserito senza problemi). Tolgo lo shield, carico il programma e rimetto lo shield; poi alimento da alimentatore invece che da USB (non si sa mai).
Collego al PC lo shield del coordinator, inserito nella scheda senza uC e con il jumper su USB, e provo a inviare i caratteri 'H' e 'L' all'altra scheda dal terminale di XCTU. Funziona! Rimetto il uC sulla scheda con il modulo coordinator e carico un programma che invia i due caratteri a intervalli di un secondo (vedi la guida per i moduli serie 2, qui il codice). Rimetto lo shield e sposto il jumper su XBee. Funziona! Le due schede comunicano con una normale connessione seriale ma via wireless.