Go Down

Topic: Problema configurazione "a stella" Xbee Serie 2 (Read 749 times) previous topic - next topic

michelef87

Salve, da qualche tempo mi sono avvicinato ad arduino e al mondo dell'elettronica in generale per via di un progetto che sto seguendo.
Non mi dilungo troppo a spiegare i dettagli del progetto, in quanto il mio problema è prettamente legato alla configurazione dei moduli xbee... mi rendo conto che questo è un forum su arduino e non su xbee, ma non saprei su quale altro forum chiedere (ogni consiglio o link di documentazioni o altro è sempre ben accetto).

Ho l necessità di collegare più arduino al pc, in modo da controllarli via wireless tramite il pc. A questo proposito ho iniziato ad acquistare 2 Xbee serie 2 per iniziare a fare i test, con relative shield per collagarli rispettivamente all'usb del pc ed all'arduino.

La rete a stella che pensavo di fare vede il coordinator collegato tramite usb shield al pc, e gli altri "routers" collegati ai rispettivi arduino.
Il coordinator dovrà trasmettere i comandi che gli arrivano via usb a tutti i moduli xbee della rete; mentre i routers dovranno trasmettere le risposte solo al coordinator centrale.

A tal proposito io ho impostato i due xbee in questa maniera:

Coordinator:
Modem Xbee: XB24-ZB
Function: ZIGBEE COORDINATOR AT
PAN ID: 1234
Destination Address Hight: 0
Destination Address Low: FFFF (questi due li ho lasciati così com'erano, da quel che ho capito così impostati dovrebbero essere in grado di inviare i dati a tutti i moduli della rete)

Router:
Modem Xbee: XB24-ZB
Function: ZIGBEE ROUTER AT
PAN ID: 1234
Destination Address Hight: "il serial number hight del coordinator"
Destination Address Low: "il serial number low del coordinator"

Il baud rate l'ho lasciato a 9600, il bit di parità idem (disattivato), e l'arduino (è un lilypad) l'ho caricato col codice di quello che deve fare (per ora accendere e spegnere led). Premetto che l'arduino con quel codice, collegato via usb tramite FTDI, rispondeva correttamente a tutti i comandi inviati.
Ho collegato la shield xbee all'arduino in questa maniera: Vin (5v) al +, GRN al -, RX dell'arduino al TX dell'xbee shield, e TX dell'arduino collegata all'RX dell'xbee shield tramite un partitore resistivo (12k e 22k Ohm) per adattare i 3.3v dell'xbee ai 5v dell'arduino (come consigliato da più guide in google).

Ho provato ad iniziare ad inviare qualche comando dal pc, e il tutto funzionava! ottimo!
Poi però ho provato a fare dei test "floodando" un po' gli xbee con sequenze di comandi più ravvicinate, per vedere come si comportavano ad un carico maggiore, e qui ho avuto una brutta sorpresa: Ogni tanto (4-5 secondi) il segnale smetteva di arrivare all'arduino, che smetteva di lavorare. Poi dopo altri 3-4 secondi, ripartiva, per poi ribloccarsi di nuovo... e avanti così.

Purtroppo per il mio progetto ho la necessità che lo scambio di comandi e risposte avvenga quasi in tempo reale. Preciso che i comandi "pesano" pochi byte (sono dei numeri inferiori a 1000), quindi non è un problema di dimensioni dei comandi.

Allora ho fatto una prova: ho stacato l'xbee dall'arduino ed ho "cortocircuitato" il TX e l'RX sulla shield, il modo che "rispondesse" al coordinator con quello che gli arrivava. Ma anche questa prova ha dato gli stessi risultati di prima.

Allora ho fatto un'altra prova: ho invertito il coordinator con il router. Praticamente ora era il router collegato al pc, mentre il coordinator era collegato all'arduino. Ho ripetuto la prova "flood" e con questa configurazione stranamente i comandi arrivavano a destinazione sull'arduino in maniera corretta ad una velocità molto elevata, senza attimi di "stop". Invece erano le risposte dall'arduino verso il pc che sul monitor seriale arrivavano ad intervalli ritardati di 3-5 secondi!

Così, ho provato a cambiare sul coordinator i parametri "Destination Address Hight" e "Destination Address Low", impostandoli rispettivamente con il serial numer hight ed il serial number low del router. Praticamente ho ricreato la classica configurazione P2P riportata nei millemila tutorial che si trovano in google. Con questa configurazione tutto funziona in modo eccellente, ho la massima velocità in entrambe le direzioni, senza alcun rallentamento.

Purtroppo, come ho già scritto, in futuro dovrò aggiungere altri arduino ed altri moduli xbee, ed ho la necessità che la comunicazione tra il pc e gli arduino avvenga il più rapidamente possibile. Qualcuno sa darmi una dritta su come impostare gli l'xbee per avere una configurazione "a stella" con le caratteristiche che mi servono? Sono consapevole che il mondo degli xbee e le sue reti è un qualcosa di immensamente vasto e non si può comprendere in 2 minuti. Mi basterebbe un qualche esempio chiaro che vada oltre alla classica configurazone "p2p" tra 2 xbee per far accendere un led. Ogni dritta è ben accetta!

Grazie in anticipo! ;)

michelef87

Allora,

mi sto documentando, ed ho letto in rete che con gli xbee serie 2 inviare dati in broadcast ( DH:0 DL:FFFF ) in modalità AT è veramente poco performante e problematico, ed è sconsigliato nel caso in cui serva una trasmissione in tempo reale. Il multicast da quel che ho letto non è supportato dagli xbee serie 2. Quindi rimane l'unicast.

Ho impostato i due moduli xbee (ricordo che si tratta di moduli XB24-ZB) in modalità API (parametro "AP" impostato a "2"), e aggiunto in python e sull'arduino le 2 rispettive librerie:
http://code.google.com/p/python-xbee/
http://code.google.com/p/xbee-arduino/

e modificato il codice affinchè sia il software in python che gira sul pc, sia lo sketch che gira sull'arduino siano in grado di usare gli xbee in modalità API. Ora il pc può trasmettere direttamente ai ricevitori usando una lista di indirizzi a 64 bit.

Però ho necessità che i comandi vengano inviati molto velocemente ai ricevitori. Ho fatto delle prove, e finchè si tratta di inviare 1-3 pacchetti, arrivano all'arduino ricevente quasi instantaneamente. Mentre quando iniziano ad essere superiori a 3, il delay dei pacchetti sucessivi inizia a farsi notare, e il buffer della seriale inizia a riempirsi di pacchetti in attesa di essere trasmessi, e questo per l'uso che ne devo fare non è accettabile.

Ho provato anche ad aumentare il baudrate fino a 38400, ma non ho notato un significativo incremento delle performance.

Avete qualche consiglio per rendere la comunicazione tra gli xbee più performante? Se vi può essere utile copio qualche pezzo di codice che ho usato per i test.

Sempre grazie in anticipo.

michelef87

Butto lì un'idea che mi è venuta in mente, magari qualche esperto di reti xbee sa rispondere... i moduli xbee pro sono più performanti per quanto riguarda le trasmissioni in broadcast? Sarebbe fattibile di usare un xbee pro come coordinator e degli xbee "normali" (ma sempre della stessa serie chiaramente) come ricevitori?


Go Up