2

我正在尝试找到一种方法来获取 Arduino 中XBee收音机的原始地址。

基本上,我希望我的 XBee 芯片发送一个包含其原始地址(或 id)的字符串,以便我可以识别消息的来源,而无需在每个不同的 Arduino 上运行不同的代码。

我应该怎么办?

编辑

我正在使用 xbee-arduino 库 (http://code.google.com/p/xbee-arduino/)。

xbee 通过 Sparkfun Xbee Shield (http://www.sparkfun.com/products/9976) 直接连接到 Arduino

它正在与运行 XIG (http://code.google.com/p/xig/) 的 Connectport X2 通信,因此我无法在那里运行任何查看发件人地址的 arduino 代码 - 它必须在本地找到在板上。

4

2 回答 2

3

我相信您正在寻找的是 XBee 的序列号,它是一个全球唯一的 64 位地址,用于标识该设备。

有两个 AT 命令可用,SHSL,它们为您提供序列号的高 32 位和低 32 位。xbee-arduino 发行版中有一个示例程序可以打印它们的值:AtCommand.pde

然后该程序执行AI命令,该命令返回一个字节,给出最后一个网络加入请求的状态。这将返回0x00成功。

ZigBee 设备也有一个 16 位地址(使用MY命令),它只保证在其网络上是唯一的。使用稳定网络上的 XBee 调制解调器,除非存在地址冲突,否则不会改变,但使用SHSL确定的完整 64 位值可能会更好。

所有这些命令都假设您感兴趣的 XBee 直接连接到 Arduino。它们都可以使用 远程执行RemoteATCommand,但这需要您传递远程调制解调器的序列号,因此如果您可以成功拨打电话,那么您已经有了地址。

如果您感兴趣的 XBee 没有连接到 Arduino,那么您需要使用ND(节点发现)命令来执行网络扫描。我对 xbee-arduino API 不够熟悉,无法知道他们是否提供了它,但是在发现每个节点时获取有关它的信息需要做更多的工作。

于 2011-09-26T23:45:43.700 回答
0

如果您在这些 XBee 芯片上使用 API 模式(当然,如果您使用 XBee-api 库),则不需要在消息中包含发送者的地址。此信息在框架中自动指定。查看ZNetRxBaseResponse类中的 getRemoteAddress16() 和 getRemoteAddress64() 方法。

所以你要做的就是从你想知道地址的节点发送第一条消息“你好”,即到协调器(你可以很容易地寻址为 0x0000)。使用上述方法,您可以获得此信息。

于 2012-11-16T15:04:51.637 回答