Pages: [1]   Go Down
Author Topic: xbee network - nodi sia tx che rx  (Read 681 times)
0 Members and 1 Guest are viewing this topic.
Fidenza (PR)
Offline Offline
Full Member
***
Karma: 3
Posts: 143
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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???
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 269
Posts: 21837
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9644
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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".


Logged

Fidenza (PR)
Offline Offline
Full Member
***
Karma: 3
Posts: 143
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#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??
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9644
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Fidenza (PR)
Offline Offline
Full Member
***
Karma: 3
Posts: 143
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

cioè da x-ctu?
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9644
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Fidenza (PR)
Offline Offline
Full Member
***
Karma: 3
Posts: 143
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9644
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: