No tuve suerte tratando de hacer que dos XBees se comuniquen en modo API con la biblioteca arduino XBee.

1

He estado tratando de hacer que dos XBees se comuniquen durante mucho tiempo. Lo he comprobado todo y, por fin, vine aquí en busca de ayuda de los expertos o que ya han encontrado el mismo problema que el mío. Estoy usando la serie 2 XBees.

Estoy usando esta biblioteca .

Es un circuito bastante básico.

El coordinador tiene un botón y el enrutador tiene un LED. Cuando presiono el botón del coordinador, envío dos bytes como carga útil al enrutador. El enrutador verifica si el paquete fue recibido. Si lo fue, comprueba si se recibe el byte correcto. Si es así, enciende el LED. Pero, no importa lo que haga, no puedo encender el LED. Aprecio tu ayuda.

El código para el coordinador (remitente):

#include <XBee.h>

// create the XBee object
XBee xbee = XBee();

uint8_t payload[] = { 0, 0 };

// SH + SL Address of receiving XBee
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x408698be);
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
ZBTxStatusResponse txStatus = ZBTxStatusResponse();

int pin5 = 0;

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

void loop() {   
  payload[0] = 0x34;
  payload[1] = 0x76;

  if (digitalRead(7) == HIGH){
    xbee.send(zbTx);
    delay(1000);
  }
}

Y el código para el enrutador (receptor) es:

#include <XBee.h>


XBee xbee = XBee();
XBeeResponse response = XBeeResponse();
// create reusable response objects for responses we expect to handle 
ZBRxResponse rx = ZBRxResponse();
ModemStatusResponse msr = ModemStatusResponse();


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

// continuously reads packets, looking for ZB Receive or Modem Status
void loop() {
    xbee.readPacket();
    if (xbee.getResponse().isAvailable()) {
      // got something
      if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
        // got a zb rx packet
        // now fill our zb rx class
        xbee.getResponse().getZBRxResponse(rx);
        // I check both bytes (or)
        if (rx.getData(0) == 0x34 || rx.getData(0) == 0x76 ) {
          digitalWrite(8, HIGH); 
        }
      } 
   }
}
    
pregunta user734861

1 respuesta

2

He solucionado el problema. Si observa el código, notará que no había especificado el modo de pin de los pines de entrada y salida.

La solución es incluir las siguientes líneas en el código del enrutador y del coordinador, respectivamente:

  • Falta la línea a continuación en el código del enrutador:

    pinMode(8,  OUTPUT);
    
  • Y la línea a continuación falta en el código del coordinador:

    pinMode(7,  INPUT);
    
respondido por el user734861

Lea otras preguntas en las etiquetas