Go Down

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

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! ;)

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.

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?


Simone72

Ciao a tutti,
rilancio questa discussione per capirci un po di più...
ho tre Xbee S2 che vorrei configurare in Mesh ma fino ad ora mi sto scervellando...
Vedo che pero questo topic non ha riscosso molto successo...

Le Xbee non sono poi cosi amate dai Makers? :smiley-eek:
2 X Arduino MEGA 2560

gazza_mo

Anche io ho aperto un thread sugli Xbee S2, ma secondo me ci sono poche info sia sul forum che anche in internet. Molte si limitano solo a ripetere tutorial ripresi pari pari da altri siti, quindi in realtà sempre la solita zuppa.
Io sto provando ancora a usare un Xbee standalone che manda dati al coordinator, ma anche qui ho trovato pochissime informazioni inrete , e talvolta contraddittorie.
Voi avete trovato qualche tutorial decente sull'tuilizzon della S2 in API ?

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy