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