如何使用XBee快速向其他XBee广播信息?

时间:2012-03-26 15:32:39

标签: embedded arduino microcontroller zigbee xbee

我正在使用几个XBee Zigbee和一些Arduino模块(或微控制器,Arduino不是强制性的)。我将我的XBees配置为AT /透明模式。

我需要广播信息:当触摸一个模块时,每个其他模块必须立即同时做出反应。

不幸的是,如果我在单播模式下获得良好的速度效果,则广播模式会有很多延迟。这是已知和记录的内容,请参阅 XBee ZigBee Addressing

没有数据丢失,但它们有时会被XBee缓冲几秒钟,然后再次发送或传送到我的Arduino。

这似乎不是配置问题,它是广播协议的工作方式。关于如何加快这个过程的任何想法?

我唯一拥有的是使用API​​模式,让每个Arduino保留一份XBee地址列表,并将单播信息添加到这些地址列表......但是我失去了广播方法的舒适度,如果不更新每个Arduino,我都无法轻松添加新模块。

2 个答案:

答案 0 :(得分:8)

使用XBee ZB模块使用广播寻址传输数据通常会比向每个要通信的节点传输单个单播提供更多,更低的性能。这是因为XBee ZB模块上的广播与XBee 802.15.4模块的工作方式完全不同。

当您使用XBee 802.15.4模块发送广播时,单个802.15.4帧将传输到网络,所有可以听到传输的节点都会将其接收并从其串行UART发送信息。 802.15.4网络是一个简单的星型网络,并且网络上的任何节点都不会执行广播的隐式重复。使用XBee ZB,这是不同的。 XBee ZB模块在网状拓扑中起作用,需要将信息重复到原始传输范围之外的其他节点。

当您使用XBee ZB模块发送广播时,接收广播的每个节点将重新广播3次,导致在节点之间传输大量数据。另外,在任何给定时间,网络上只能存在一定数量的“直播”广播。当XBee实际上拒绝传输请求时,这通常会让人们开始认为网络正在丢弃数据。

除非您不经常发送数据 - 可能每分钟播放一次或更慢 - 通常最好遵循以下步骤:

  1. 通过启用AR功能
  2. 执行网络发现或收集路由记录数据包,构建所有节点的列表
  3. 向您要传输的每个节点发送单播
  4. 如果您要向大型ZB网络上的节点发送信息(即超过30个音符),您可能需要阅读本文:Large Networks and Source Routing

答案 1 :(得分:1)

除非只有部分模块需要接收消息,否则我认为您无法对其进行更优化。在这种情况下,您可以使用多播可能仅适用于Xbee 2)而不是广播,这会带来一些非常小的改进当网络变得足够大时(大于16个节点,即基本路由表),网络的整体速度。

您是否尝试过单播,多播和广播之间的比较?可能是制作十几个单播平均更快或至少更可靠,特别是如果您的特定网络中有许多跳(例如:具有8跳的12节点网络)。

使用单播,您可以获得确认或确认,以便了解操作的总体时间和成功,以及是否需要重试。