近距离的无线通讯技能近几年有很大的开展,其间WiFi(IEEE 802.11)、蓝牙以及ZigBee是运用比较多的几种规范。这几种协议侧重点各有不同,相关于前面两者来讲,Zig Bee由于其牢靠性、低功耗及安全性等特性在无线传感器网络(Wireless Sensor Network)中得到了较为广泛的运用。特别是用于医疗健康监测的可穿戴传感器(Wearable Sensor)范畴开展的较为迅猛。国外对无线传感器技能研究较早,也已经有许多老练的产品问世,如iMote2、TelosB、MicaZ以及WaspMote等。跟着开源单片机体系开发渠道Arduino的遍及,依据ZigBee协议规范的XBee系列产品也日渐盛行。本文首要针对XBee产品系列中的XBee Pro ZB,探讨了运用ZigBee协议进行单片机之间无线通讯的办法。
1 ZigBee
1)简介
ZigBee是一种依据IEEE802.15.4规范的低功耗个域网(PAN)协议,这是一种短距离、低功耗、低成本的通讯技能。它由ZigBee联盟拟定,首要适合于短距离无线数据传输,能够构成一个无线传感器网络。ZigBee依据802.15.4,它在802.15.4所规则的物理层和媒体访问操控层的上面增加了自己的网络层、运用层和安全服务规范。在ZigBee协议中,依据设备的通讯才能,可分为全功用设备(FFD))和精简功用设备(RFD);依据设备的功用,能够分为和谐器(coordinator)、路由器(router)和终端设备(end—device)3种逻辑设备。和谐器是一种FFD设备,它是网络的中心节点,担任网络的发动和装备。一个网络中只允许有一个和谐器,当整个网络发动和装备完结后,它的功用就相当于一个路由器。路由器也是一种FFD设备,它首要担任保护网络的路由信息,并转发消息到其他设备,扩展信号的传输规模。终端设备能够是FFD设备或RFD设备,它具有参加和退出网络的功用,并能接纳和发送报文,一般衔接传感器设备,作为监测点,可睡觉或唤醒,因此能够用电池供电。依据ZigBee协议的产品许多,其间较为盛行的是Digi公司的XBee,因此咱们运用的也是Xbee系列的产品。
2)XBee的装备
XBee的产品品种比较多,不只有依据ZigBee协议的,也有支撑802.15.4以及蓝牙的,咱们选用的是依据ZigBee协议的XBee Pro ZB。运用之前咱们有必要对XBee的相关参数进行设定,能够到Digi的官方网站下载最新版的装备软件X—CTU,其根本界面如下:
装备之前需将XBee经过USB口与电脑相连,运转X—CTU,在“PC Settings”中里挑选XBee适配器映射出来的USB串口通讯端口(USB Serial Port),设置好波特率等参数,XBee模块出厂里默许的设置为9600b/s,这个一般不需求更改。点击Test/Query按钮,假如正常衔接的话会呈现一个显现Modem类型、固件版别以及序列号等信息的对话窗口,其间的序列号是这个无线通讯模块的64位仅有硬件编号。完结测验后到装备软件的“Modem Configuration”选项修正“PANID”等参数并写入到XBee模块。PAN ID指的是两个或多个无线通讯模块所构成的PAN(个域网)的ID编号,因此关于归于同一个网络中的XBee模块来说这个参数必定要相同。
XBee自身仅仅一个无线的通讯模块,尽管仅运用两个XBee自身也能够完结两个点之间的数据传输,但其只具有通讯的功用,不具备什么操控才能,当需求扩展外部器材如传感器时简直不太可能。为了增强整个体系的功用,最好把它衔接到单片机上,咱们挑选开源单片机开发渠道Arduino作为XBee模块的操控面板。用于Arduino扩展XBee的扩展板有许多种,也能够自己着手直接将XBee模块接到Arduino操控板上,不过存在必定的危险。咱们选用的是XBee V5扩展板,市场价格大约在三十元左右。
2 将XBee衔接到Arduino
XBee模块与AMuino之间其实便是经过串行接口(即TX和RX引脚)进行通讯。
关于简略的点对点通讯来讲,只需求经过串行接口向XBee模块写数据就能够完结数据的发送;当XBee模块经过无线通道接纳到数据时,经过读串行接口能够很方便地取得这些数据。用X—CTU软件装备好两个XBee模块的参数后,两个插上XBee模块的AMuino操控器就能够像有线RS232串口通讯相同彼此传送数据了。当然,假如要完结咱们所希望的成果还需求给Arduino增加一个XBee适配器的驱动。关于咱们运用的Arduino UNO操控器,能够在Arduino官网下载一个Arduino 0018版编程软件,它里边的drivers目录里就能够找到这个驱动。先把写到的测验程序下载到Arduino操控板,再将装备好参数的XBee模块经过V5扩展板插到Arduino操控板。
咱们把其间一个XBee模块设为主机,其首要代码如下:主机程序:
以上程序能够完结两个XBee模块间的简略通讯。要完结成块数据的传输比方将收集到的各种传感器数据发送和接纳,进程就变得比较复杂。XBee模块有两种数据传输形式:AT(Transparent/Command) 形式及API(Applieation Program Interface)形式。AT形式首要用于装备XBee模块的参数以及简略的文本传输,运用比较简略,但其功用十分有限。相对而言API形式的功用要强壮许多,不过运用起来也比较复杂,在此咱们只简略讨论一下API形式。
在API形式下信息以数据帧的方法传输,其帧结构首要包含4个部分:
1)开端符
2)数据部分的长度(用2个字节的十六进制表明)
3)帧数据部分(包含附加操控数据)
4)校验和
如表1所示,开端符为0x7E表明一个数据帧的开端。能够用句子if(Serial.read()==0x7E)来检测是否接纳到一个新的数据帧,不能确认一个帧的开端方位无法正确得到有用数据,由于无从判别当时收到数据字节代表的是什么。数据长度是以16进制表明的数据部分的长度。数据部分包含真实要传输的信息以及为了确保数据的牢靠传输而附加的操控信息,包含帧的数据类型、帧的序号、64bit的物理意图地址、16bit网络意图地址及其它相关信息。帧的有用载荷即真实的数据信息首字节的偏移量可由帧结构的第一个字节——帧类型核算得到,其长度可由数据长度字段减去首字节的偏移量得到。数据部分的获取帧结构最终一个部分为一个字节的校验和,需求留意的是校验和部分的核算不包含起帧的开端符及数据长度部分。
运用Arduino的一个优点是咱们在网上能够找到大多数常见外围器材的第三方函数库,在许多情况下能够大大地削减编程工作量或下降编程的难度。关于XBee模块咱们当然能够挑选运用现成的函数库来简化通讯的进程,用户能够依据自己的需求挑选不同的编程言语如C/C++、Python、Java或Processing等。
3 定论
依据ZigBee协议规范的XBee除了能构成一个点到点的通讯操控体系外,还能够依据实际需求构建一个具有可弹性特性的无线传感器网络。每一个XBee模块类似于MAC网卡,有自己仅有的64位物理地址,而参加网络后会由和谐器分配一个16位的网络地址,这意味着一个传感器网络最多能够到达65 000个节点,因此有着很大的运用远景。