XBee Arduino API 远程命令响应

问题描述 投票:0回答:2

我在对 Arduino 进行编程时遇到了麻烦。我有两个 XBee Series 2 模块和一个 Arduino UNO。我使用来自以下位置的 XBee-API 库:http://code.google.com/p/xbee-api/。 我生成三个 RemoteATRequest 数据包 (0x17) 来控制远程休眠节点的数字引脚,并将其从 SoftwareSerial 发送到通过 Sparkfun XBee Arduino Shield 插入的 XBee 协调器 (https://www.sparkfun.com/产品/10854)到 Arduino UNO。通讯工作正常。每个请求数据包都发送到远程。对于每个请求数据包,都会收到一个远程数据包。我用串行监视器和 RS232<-> TTL 转换器检查了这一点。但在我的 Arduino 软件中,似乎只收到一个远程数据包。奇怪的是,当我在远程休眠时发送请求数据包时,如果远程处于唤醒状态并从协调器获取请求,我会读取三个响应。

有人尝试过相同的操作或遇到相同的问题吗?我已经尝试了很多,直到知道另一个波特率,发送之前出现延迟。没有任何效果。

api arduino xbee
2个回答
0
投票

我对 ZigBee 和/或 802.15.4 的记忆是,当休眠设备唤醒时,休眠终端设备的父节点只会保留/排队单个帧。请注意,在 ZigBee 中,只能保证排队 7.5 秒。您可能需要修改代码以一次发送一个远程 AT 请求,并等待响应后再发送另一个请求。

此页面对 MAC 层如何工作有很好的描述:

框架组装好后,实际上有两种发送方式。 如果它去往另一个路由器或接收器是的终端设备 始终打开,帧将通过无线电直接发送。否则, 如果目的地是休眠终端设备,则该帧需要 作为间接传输发送。该帧将进入间接队列 直到目标设备唤醒并轮询父设备。一旦 poll 进来,帧将被发送到目的地。

如果 XBee 模块支持包含多个 AT 命令的帧类型,那就太好了,但据我所知,这不是一个选项。


0
投票

我朋友们

我的 ID 0x17 有问题。就我而言,我测试了从 Xbee 协调器(连接到 arduino mega)向最终 Xbee 发送 AT 命令,只是为了更改节点标识(NI),但我在 XCTU 中没有收到任何接收消息。这是代码,也许有人可以帮助我。

byte trama[] = { 0x7E, 0x00, 0x15, 0x17, 0x27, 0x00, 0x13, 0xA2, 0x00, 0x12, 0x34, 0x56, 0x78, 0xFF, 0xFE, 0x02, 0x4E, 0x49, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, 0xF6 };

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  enviarTrama();
  delay(2000);
}

void enviarTrama() {
  Serial.println("Enviando trama...");
  for (int i = 0; i < sizeof(trama); i++) {
    if (trama[i] == 0x7E || trama[i] == 0x7D) {
      Serial1.write(0x7D);
      Serial1.write(trama[i] ^ 0x20);
    } else {
      Serial1.write(trama[i]);
    }
    Serial.print(trama[i], HEX);
    Serial.print(" ");
  }
  Serial.println();
}
© www.soinside.com 2019 - 2024. All rights reserved.