Go Down

Topic: xbee network - nodi sia tx che rx (Read 755 times) previous topic - next topic

mancio

Devo instaurare una rete a stella dove c'è un xbee coordinatore e N end device. entrambi devono comunicare in entrambe le direzioni. Per ora sono riuscito a far comunicare end device a coordinator. Però ora come posso fare a fare il contrario? come faccio a dire al coordinator di spedire i dati ad un determinato end device??
Come dovrei modificare lo sketch?? per ora legge solamente da seriale

Code: [Select]
#include <SoftwareSerial.h>

SoftwareSerial xbee(10, 9);

unsigned long time;
String tmp;

void setup(){ 
  Serial.begin(9600); 
       
  xbee.begin(19200);
  delay(10);
}

void loop() {
  if(xbee.available()) {   
    time = millis();
    char lettura=(char)xbee.read();
    Serial.print(lettura);   
  }
}


esiste un modo per dirgli di spedire i dati ad un determinato indirizzo senza usare la libreria xbee???

uwefed

spedire a un determinato indirizzo forse no, ma puoi fare che un certo Arduino risponda su una certa richiesta.
Ciao Uwe

astrobeed


Però ora come posso fare a fare il contrario? come faccio a dire al coordinator di spedire i dati ad un determinato end device??


Devi usare la modalità API degli Xbee e specificare l'indirizzo del modulo a cui vuoi trasmettere il pacchetto, immagino che tu attualmente hai impostato su i vari end device l'address del coordinator, in questo modo tutti possono trasmettere a questo, ma lui può trasmettere solo a un end device per volta, quello di cui conosce l'address, oppure a tutti se lavora in modo broadcast, address di destinazione impostato a 0xffffffff.
Se non mi ricordo male c'è una libreria per Arduino che consente di utilizzare la modalità API degli Xbee in modo "semplice".



mancio

Code: [Select]

#include <XBee.h>
#include <NewSoftSerial.h>

XBee xbee = XBee();

uint8_t payload[] = { 0, 0 };

void setup() {
  Serial.begin(9600);
  xbee.begin(9600);
}

void loop() {   
  payload[0] = pin5 >> 8 & 0xff;
  payload[1] = pin5 & 0xff;

  // CAMBIARE QUESTI PARAMETRI OGNI GIRO DI LOOP
  //SALVO SH e SL in base a due valori che arrivano da seriale
  XBeeAddress64 addr64 = XBeeAddress64(SH, SL);
  ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
  ZBTxStatusResponse txStatus = ZBTxStatusResponse();

  xbee.send(zbTx);

  if (xbee.readPacket(500)) {
   
    if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) {
      xbee.getResponse().getZBTxStatusResponse(txStatus);

      if (txStatus.getDeliveryStatus() == SUCCESS) {
        //TODO
      } else {
        //TODO ELSE
      }
    }
  } else if (xbee.getResponse().isError()) {
    //Serial.print("Error reading packet.  Error code: "); 
    //Serial.println(xbee.getResponse().getErrorCode());
  } else {
    //TODO FOR ERROR
  }

  delay(1000);
}


secondo voi è possibile fare una cosa del genere??

astrobeed


secondo voi è possibile fare una cosa del genere??


Non devi cambiare l'address di destinazione di default ogni volta, in questo modo distruggi la memoria non volatile interna degli Xbee in breve tempo, devi includere l'address di destinazione nel comando API.

mancio


astrobeed


cioè da x-ctu?


Xctu serve solo per inserire i parametri di default degli Xbee ed aggiornare il firmware, quello che ti manca è come funziona il modo API degli Xbee, e questa cosa te la devi studiare da solo sul relativo manuale.
Se non usi la modalità API non puoi fare quello che desideri, almeno non a livello di Xbee, l'alternativa è usare il modo broadcast, tutti trasmettono a tutti, e gestire i messaggi da Arduino, cosa dispendiosa come tempo cpu e inutile visto che possono farlo direttamente gli Xbee.
La libreria di Arduino per gli Xbee dovrebbe, uso il condizionale perché non la conosco, supportare la modalità API semplificandoti non poco la vita, però devi consultare bene la sua documentazione.

mancio

ma infatti non cambio secondo me l'indirizzo di default con il codice che ho scritto..ma cambio l'indirizzo di destinazione e basta..ma non sono sicuro

astrobeed

Se quelle istruzioni servono per comporre il comando API con il corretto address vanno bene, se cambiano l'address memorizzato sul Xbee non vanno bene.

Go Up