XBee S2C和XBee S1 Pro通信

时间:2017-06-26 09:31:02

标签: arduino serial-communication xbee

我有一个XBee S1 Pro,它被配置为协调器。和XBee S2C,配置为终端节点。两者都加载了802.15.4固件。通过使用XCTU,我以透明模式发送和接收数据。

我现在已经将终端节点配置为API-1模式并将其连接到Arduino Nano。我想阅读有效载荷。这是我的Arduino代码:

void setup() {
  Serial.begin(9600);
  Serial.println("Setup done...");
  while (!Serial) {;}
}

void loop() {
  if (Serial.available()) {
    for (int i = 0; i < 8;i++) {
      byte discard = Serial.read();
    }
    Serial.write(Serial.read());
    Serial.print(",");
  }

当我从协调员发送'你好'时,我得到:

Setup done...
FFFFFFFF
,FFFFFFFF
,FFFFFFFF
,FFFFFFFF
,FFFFFFFF
,FFFFFFFF
,FFFFFFFF
,FFFFFFFF
,FFFFFFFF
,

有没有比使用Arduino XBee库更简单的方法? 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您是否确认两个XBee模块已加入同一网络?我的理解是S1只是802.15.4,S2是ZigBee。您应该使用相同的网络硬件启动您的项目,以消除它作为问题的根源。

我建议关注a tutorial并使用该代码为您要编写的任何代码建立工作起点。

编辑:添加一些代码

首先,您需要有两个串口。一个用于您的控制台,您可以在其中查看Serial.print()的输出,另一个用于与XBee模块通信。

其次,从这个循环开始:

void loop() {
    // echo bytes received on XBee module to serial console
    if (XBee.available()) {
        Serial.write(XBee.read());
        Serial.print(",");
    }
    // echo bytes received on serial console to XBee module
    if (Serial.available()) {
        XBee.write(Serial.read());
    }
}

这样你就可以转储你收到的每一个字节,只有当有数据可供阅读时才调用XBee.read()

您可能希望将XBee模块保持在9600波特率,但将stdio接口(Serial)增加到115200,因为从XBee模块接收的每个字节打印的字符数不止一个。