首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino XBee发送数据API

Arduino XBee发送数据API
EN

Stack Overflow用户
提问于 2014-12-31 14:12:28
回答 1查看 1.2K关注 0票数 2

我想将数据从终端设备发送到XBee和Arduino的协调器。但是,Arduino在发送数据时重新启动(发送数据被中止)。问题是什么?

代码语言:javascript
复制
/* 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]));
                }
            }
        }
    }
}

编辑(其他信息):

如果我更改有效载荷中的值类型,它不会改变任何东西。关于波特率,两个XBees都被配置为57600波特。以下是XBee的配置:

ENDEVICE

协调器

此设备的串口的结果是:

最后,我使用了Arduino ATmega 1284P。我真的不知道会有什么问题。

EN

回答 1

Stack Overflow用户

发布于 2014-12-31 15:48:38

这有一些麻烦

首先,默认的协调器添加是0x0x0,因此行

代码语言:javascript
复制
XBeeAddress64 address = XBeeAddress64 (0x13A200,0x4081B77C );

应该是

代码语言:javascript
复制
XBeeAddress64 address = XBeeAddress64 (0x0,0x0 );

那么,Xbee也是57600波特吗?

要获得ACK,您可以使用:

代码语言:javascript
复制
  if (xbee.readPacket(1000))
  {     
    if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) 
    {
      xbee.getResponse().getZBTxStatusResponse(txStatus);
      if (txStatus.getDeliveryStatus() == SUCCESS) 
      {
        //It's sent
      } 
    }

也可能是你的有效载荷。您最好使用十六进制值或int来确定发送的内容。

编辑:

我看你没有使用Xctu的最后一个版本。试一试,测试他们之间的直接沟通,看看你能不能在协调员和路由器/终端设备之间有直接联系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27722306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档