Arduino 与 Zigbee 接口
Zigbee 是一种无线通信协议,针对电池供电设备(它具有低功耗和低成本的特点)。它通常工作在 2.4GHz 频段(尽管存在地域差异),并且支持 20 到 250 kbits/s 的数据速率。
然而,与 LoRa 相比,传输距离较小。它的传输距离为 10 到 100 米,而 LoRa 可以传输几公里。需要注意的是,如果发射器和接收器之间没有视线,则 Zigbee 通信效果不佳。
即使是轻微的障碍物也会显著降低通信质量。在使用 Zigbee 时请记住这些限制。如果您的应用无法满足这些限制,您可能需要考虑其他选项。
为了使 Zigbee 与 Arduino 配合使用,我们将使用 XBee 模块。
它们与 UART 配合使用,因此,与 Arduino 接口非常容易。但是,需要查看 XBee 的引脚图,以了解哪些是 UART 引脚 -
上图中的 DOUT 和 DIN 引脚是 UART 引脚(TX 和 RX)。它们可以连接到 Arduino 的两个数字引脚(如果您打算使用 SoftwareSerial),或者分别连接到 Arduino 的 0 和 1 引脚(如果您打算使用 HW Serial)。请注意,如果您将硬件串口用于 Zigbee 接口,则无法在串口监视器上读取来自 Arduino 的打印语句。
配置 XBee 模块
XBee 模块(发射器和接收器)需要使用 X-CTU 软件进行配置。它可以从 这里 下载。此软件由 DigiKey 提供,他们提供了详细的配置指南。因此,我在这里重新发明轮子毫无意义。您可以在 这里 找到指南。
Sparkfun 还有一个针对 X-CTU 软件 新版本 的适配版本。
Instructables 还有一个简短的版本。
请注意,打算相互通信的两个 XBee 模块应该属于同一系列。
以下是一些关于配置的注意事项 -
您将需要一个扩展板或一个带有 USB 转 UART 转换器的探索板才能进行此配置。
对于想要相互通信的设备,PAN ID(个人区域网络 ID)必须相同。
一个模块需要设置为发射器,另一个需要设置为接收器(这由 CE 字段决定)。
记下您设置的波特率。这将在配置 Arduino 与 XBee 之间的串行通信时在 Arduino 代码中使用。
电路图 -
配置好 XBee 后,您可以通过扩展板/探索板将其连接到 Arduino。在这种情况下,引脚分配将根据您使用的板/探索板略有不同。这里我们假设您将 XBee 直接连接到 Arduino Uno,在这种情况下,连接方式如下 -
如您所见,我们将 Vcc 连接到 Arduino 上的 3.3V,GND 连接到 GND,DOUT(TX)连接到 2 号引脚(充当 Arduino 上的 RX),DIN(RX)连接到 3 号引脚(充当 Arduino 上的 TX)。
接收端的连接方式也类似。如果您有内置天线,那就很好,否则您需要将天线连接到 UFL 连接器。
代码演练
代码非常简单。如果您使用的是 Arduino Uno 以外的板,则并非所有数字引脚都支持 SoftwareSerial。请 这里 阅读 SoftwareSerial 的限制。
在发送端,代码将是 -
#include <SoftwareSerial.h> SoftwareSerial xbeeSerial(2,3); //RX, TX void setup() { Serial.begin(9600); xbeeSerial.begin(9600); } void loop() { if(Serial.available() > 0){ char input = Serial.read(); xbeeSerial.print(input); } }
如您所见,用户在串口监视器上发送的任何内容都将发送到 XBee 模块,并在接收端接收。接收端的代码是 -
#include <SoftwareSerial.h> SoftwareSerial xbeeSerial(2,3); //RX, TX void setup() { Serial.begin(9600); xbeeSerial.begin(9600); } void loop() { if(xbeeSerial.available() > 0){ char input = xbeeSerial.read(); Serial.print(input); } }
在这里,从 XBee 接收到的任何内容都将转发到串口监视器。因此,在测试组合系统时,您在发送端串口监视器上键入的任何内容都应该在接收端串口监视器上打印出来。