【问题标题】:XBee S2C and XBee S1 Pro communicationXBee S2C 和 XBee S1 Pro 通信
【发布时间】:2017-11-29 02:43:19
【问题描述】:

我有一台 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 库? 有人可以帮助我吗?

【问题讨论】:

标签: arduino serial-communication xbee


【解决方案1】:

您是否确认这两个 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 模块接收到的每个字节打印多个字符。

【讨论】:

  • 是的,我检查了两者在同一个网络上,使用 XCTU ,我可以在它们上发送和接收,我将 xbee S2C 的固件更新为 802.15.4
  • 好的,那就试着用别人的代码作为你的起点吧。
  • 知道了,因为我试图在串行缓冲区被输入填充之前从它读取值,这就是它打印这些垃圾值的原因。
猜你喜欢
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多