简体   繁体   中英

Arduino XBee sending data API

I want to send data from an end device to a coordinator with XBee and Arduino. But, the Arduino reboots when sending data (sending data was aborted). What could the problem be?

/* Transmit */

#include <SoftwareSerial.h>
#include <XBee.h>

int end = 1;
int alim_XbeeRS = A7;
int RX_XBee = 14;
int TX_XBee = 15;
XBee xbee = XBee();

//Allume le périphérique
void powerOn(SoftwareSerial portcom)
{
    portcom.begin(57600);
    digitalWrite(alim_XbeeRS, HIGH);
}


void setup ()
{
    SoftwareSerial XbeeRS(RX_XBee,TX_XBee);
    Serial.begin(57600);
    XbeeRS.begin(57600);
    pinMode(RX_XBee, INPUT);  // Rx
    pinMode(TX_XBee, OUTPUT); // Tx
    pinMode(alim_XbeeRS, OUTPUT);
    powerOn(XbeeRS);
    xbee.setSerial(XbeeRS);
    delay(5000);
    Serial.println("XBee OP");
}


void loop()
{
    if (end == 1)
    {
        Serial.println("sending");
        ZBTxRequest _zbTx;
        uint8_t payload[] = {'Y','E','S','\0'};
        XBeeAddress64 address = XBeeAddress64 (0x13A200,0x4081B77C );
        _zbTx = ZBTxRequest(address, payload, sizeof(payload));
        Serial.println("sending");
        xbee.send(_zbTx); // The program blocks here
    }
    else
    {
        Serial.println("waiting");
        xbee.readPacket(100);
        if (xbee.getResponse().isAvailable())
        {
            Serial.println("waiting 1");
            if( xbee.getResponse().getApiId() == ZB_RX_RESPONSE)
            {
                Serial.println("waiting 2");
                ZBRxResponse _rx;
                xbee.getResponse().getZBRxResponse(_rx);
                uint8_t* response= new  uint8_t[50];
                for(int i=0; i<_rx.getDataLength(); i++)
                {
                   response[i] = _rx.getData()[i];
                   Serial.println(char(response[i]));
                }
            }
        }
    }
}

EDIT (additional information):

It doesn't change anything if I change the value type in the payload. About the baud rate, both of XBees are configured to 57600 baud. Here is the XBee's configuration:

ENDEVICE

设备配置

在此处输入图片说明

COORDINATOR

协调器配置

在此处输入图片说明

The result from the serial port of this device is:

在此处输入图片说明

Finally, I use the Arduino ATmega 1284P . I really have no idea what kind of problem could do this.

There is some trouble :/

First, the default coordinator ADD is 0x0 0x0, so the line where

XBeeAddress64 address = XBeeAddress64 (0x13A200,0x4081B77C );

should be

XBeeAddress64 address = XBeeAddress64 (0x0,0x0 );

Then, is the Xbee at 57600 baud too?

To get an ACK, you can use:

  if (xbee.readPacket(1000))
  {     
    if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) 
    {
      xbee.getResponse().getZBTxStatusResponse(txStatus);
      if (txStatus.getDeliveryStatus() == SUCCESS) 
      {
        //It's sent
      } 
    }

It could be from you payload too. You better use a hexadecimal value or int to be sure of what you send.

EDIT:

I see you don't use the last version of Xctu. Try it and test the direct communication between them to see if you can have direct contact between Coordinator and Routeur/End device.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM