基于XBee进行ZigBee组网

该文章转帖自:http://blog.csdn.net/u012261135/article/details/48594419

 

文章简单地介绍了XBee模块、应用组合和2种通讯方式,还有XCTU的基本使用,作为入门很有帮助,可惜博主没有继续更新后续内容。

 

XBee模块是Digi公司的一款采用ZigBee技术的无线模块,通过串口与单片机等设备间进行通信,能够非常快速地实现将设备接入到ZigBee网络的目的,我最近做的一个项目使用了该模块,感觉非常的好用,开发基于ZigBee的无线通信来说是很easy了。此模块采用802.15.4协议栈,通过配置可以用作ZigBee网络中的Coordinator、Router或者End Device节点。XBee按照性能分为XBee和XBee pro两种,XBee pro相对于XBee具有更高的功耗和更远的传输距离,它们对外的接口基本相同,可以根据实际项目的要求来选择。

XBee的引脚如下图所示:

最简单的使用方式下只需要将单片机的串口与XBee模块的串口(Pin2、Pin3、Pin10)相连即可,另外也可通过RTS(Pin16)、CTS(Pin12)进行流控,单片机与XBee模块串口的连接如下图所示:

XBee模块与单片机的串口通信有transparent和API两种操作模式:

(1)transparent操作模式:

单片机直接通过串口将要传输的数据发送给XBee模块,XBee模块按照ZigBee协议将数据通过无线发送给远端的XBee模块,再通过串口发送给远程的单片机,就好像两个单片机之间通过XBee模块建立了一条透明传输通道。如果要通过串口配置本地XBee模块的参数,则可以向XBee模块输入+++,等待XBee模块返回OK后即可通过AT指令集对XBee模块进行参数的配置。这里使用Digi公司的XCTU软件进行演示(XCTU的具体使用以后再进行详细的介绍,其实就是通过串口与XBee模块交互的软件),如下图所示:

(2)API操作模式:

在API操作模式下,所有发送给XBee模块的数据或是从XBee模块接收的数据都会封装成特殊的API帧的格式,包括ZigBee无线发送和接收的数据帧、XBee模块配置的命令帧(等同于transparent操作模式里面的AT指令)、命令响应帧、事件消息帧等。相比于transparent操作模式,API操作模式虽然相对复杂一点,但是提供很多transparent操作模式下无法完成的功能:

API操作模式下,只需要改变API帧里面的目的地址,就可以将数据传输给多个不同的远程节点,而transparent操作模式下要改变远程目的地址只能先进入AT命令下配置目的地址,在进行数据传输。而且API可以接收数据是否发送成功的状态;

接收到的远程节点的数据可以获取远程节点的地址以确认是哪个节点发送的;

获取远程节点的IO采样数据;

通过API帧还可以配置远程XBee模块的参数。

API模式的使用将在以后的文章中进行详细介绍。

 

XBee模块还具有以下的一些比较实用的功能,简要介绍一下:

(1)支持IO的输入输出,AD采样

上面引脚图中的Name列含有DIOx字样的引脚表示可以进行数字IO的采样输入或者输出高低电平,通过AT指令配置引脚复用的参数即可;

含有ADx字样的引脚表示可以进行模拟电压的AD采样输入,采样电压范围为0~1200mV,采样值范围0~0x3FF,此外还可以对Vcc电压进行采样。

XBee可以将采样数据直接通过ZigBee网络发送给远程节点。这样,在API操作模式下,可以使用远程配置命令控制远程XBee节点开启采样,采样后的数据直接传给本节点,还可以控制远程节点IO输出来控制远程XBee接的外围设备。

(2)ZigBee网络安全
XBee支持多个等级安全模式,加密方式采用128位的AES加密,如下图:

(3)可通过串口Xmodem升级XBee的固件

将DTR(Pin9)、DIN(Pin3)置为低电平,RTS(Pin16)置为高电平后复位XBee模块即可进入XBee的bootloader,串口通信波特率变为115200,输入回车后可获得菜单,选择相应的选项后可以通过Xmodem将XBee固件传送给模块进行升级。

本文主要介绍ZigBee网络的基本结构,三种组成ZigBee网络的基本节点:协调器(coordinator)、路由器(router)、终端(end device),如何使用XCTU对XBee进行基本参数的配置,使XBee成为ZigBee网络中的一个节点。

ZigBee网络中定义了三种不同类型的设备:

协调器(coordinator)

每个ZigBee网络中只允许有一个协调器,它是整个网络的开始,协调器首先选择一个信道(channel)和网络标识(PAN ID)来启动一个ZigBee网络,然后允许路由器和终端加入这个网络。协调器在建立ZigBee网络之后,其功能相当于路由器,可以进行数据的路由转发,可以为它的终端子设备缓存数据包,协调器本身不能休眠。

路由器(router)

路由器首先必须加入到一个ZigBee网络中,然后路由器也是允许其他路由器和终端加入这个网络,进行数据的路由转发,为它的终端子设备缓存数据包,同样路由器也不能休眠。

 终端(end device)

终端也必须加入到一个ZIgBee网络中才能工作,但它不支持其他设备加入ZigBee网络,也不能进行数据的路由转发,终端数据的收发必须通过其父设备进行转发。终端可以休眠进入低功耗的模式,一般可以采用电池进行供电。

ZigBee网络的基本拓扑结构如下图所示:

 

 

一个XBee模块只能选择成为以上三种设备类型的其中一种,对于老的硬件XBee S2或Xbee S2B来说,需要给XBee模块升级不同的固件来改变设备类型和操作方式(API或Transparent),固件版本对应类型如下:

20xx - Coordinator - AT/Transparent Operation
21xx - Coordinator - API Operation
22xx - Router - AT/Transparent Operation
23xx - Router - API Operation
28xx - End Device - AT/Transparent Operation
29xx - End Device - API Operation

而对于新的XBee S2C(固件版本为40xx)来说,只需要通过配置XBee参数就可以改变设备类型或操作方式,下面仅以XBee S2C模块为例进行说明。

在默认参数的情况下,XBee模块为路由器transparent模式,通过AT指令设置CE为1可以将XBee设置为协调器,设置SM为一个非零值可以将XBee设置为终端。注意:作为协调器时SM必须设置为0,作为终端时CE必须设置为0,CE和SM同时为0则为路由器。此外,设置AP为0为transparent模式,设置AP为1或2则为API模式。

将XBee模块通过串口与PC相连,使用XCTU对模块进行测试、修改参数,首先搜索与PC连接的XBee模块,默认波特率为9600,如下图:

 成功添加XBee模块后选中XBee模块可以获取到该模块对应的配置参数并进行修改,如下图:

通过修改CE、SM和AP的值可以改变XBee模块的ZigBee设备类型和操作方式。当然,也可以手动向XBee模块的串口发送AT指令来修改参数,如下图:

在配置完XBee模块的参数后,我们进行XBee模块的组网通信,以两个XBee模块为例,一个设置为协调器,一个设置为路由器,都为transparent操作模式,设置DH和DL的值为目的地址(接收数据的XBee模块的MAC地址,即SH和SL的值),如果发送的目的地址为协调器,也可以设置DH和DL为0。上电后XBee模块会按照配置的参数自动完成ZigBee的组网。使用XCTU分别打开协调器和路由器的串口连接,向路由器串口发送数据,可以在协调器的串口观察到路由器发送过来的数据,说明组网通信成功,如下图所示:

当然,可以使用更多的XBee模块,组成一个多跳的ZigBee网络,网络中的XBee节点只要配置目的地址为任何一个在ZigBee网络中存在节点的64位MAC地址,就可以将数据通过ZigBee网络送达,组网和多跳路由的功能将由XBee模块自动完成。需要注意的是,如果一个XBee路由器节点之前已经接入过其他的ZigBee网络,那么他的PAN ID将始终保存,这样就无法再加入其他ZigBee网络,即使断电重启也不会改变,需要使用ATNR0命令来退出之前ZigBee网络,之后就可以自动搜索加入新的ZigBee网络了。

我们可以看到,在采用transparent操作方式下,如果需要将数据发送给网络中的多个节点,需要首先进入AT命令模式修改DH和DL的值,再发送数据,非常繁琐。而采用API操作方式可以指定发送的目的地址,非常方便,API操作方式将在以后进行介绍。

 

posted @ 2017-04-27 14:03  法修1987  阅读(3224)  评论(0编辑  收藏  举报