我在编写Arduino时遇到了麻烦。我有两个XBee Series 2模块和一个Arduino UNO。我使用的是来自http://code.google.com/p/xbee-api/的XBee-API库。 我生成三个RemoteATRequest数据包(0x17)来控制远程睡眠节点的数字引脚并将其从SoftwareSerial发送到XBee协调器,该协调器通过Sparkfun XBee Arduino Shield(https://www.sparkfun.com/products/10854)插入到Arduino UNO。通讯工作正常。每个请求包都发送到远程。并且对于每个请求分组,接收远程分组。我用串行监视器和RS232< - >进行了检查。 TTL转换器。但在我的Arduino软件中,似乎只收到一个远程数据包。奇怪的是,当我在远程休眠时发送请求数据包时,如果它处于唤醒状态并且从协调器获取请求,则读取三个响应。
有没有人尝试过同样的问题或者有同样的问题?我已经尝试了很多,直到知道另一个波特率,延迟发送出去。什么都行不通。
答案 0 :(得分:0)
我对ZigBee和/或802.15.4的回忆是,一个困的终端设备的父节点只会在困的设备唤醒时保持/排队一个帧。请注意,在ZigBee中,它只能保证将其排队7.5秒。您可能需要修改代码以一次发送一个远程AT请求,并在发送另一个之前等待响应。
This page对MAC层的工作方式有很好的描述:
框架组装完成后,实际上有两种发送方式。 如果它去另一个路由器或接收器的终端设备 永远打开,帧将直接通过无线电发送。除此以外, 如果目的地是一个困的终端设备,那么该帧将是必需的 作为间接转移发送。该帧将转到间接队列 直到目标设备唤醒并轮询父级。一旦 轮询进来后,框架将被发送到目的地。
如果XBee模块支持包含多个AT命令的帧类型会很棒,但据我所知,这不是一个选项。