通俗易懂的介绍ZigBee的特性

本篇文章主要讲述了ZigBee的三种设备角色,数据多跳,广播组播单播,冲突避免,数据加密等特性。

设备的名字

由于人类世界的重名实在太烦人了,所以要坚决避免把这些麻烦带给zigbee同学,好在每一个zigbee同学都有一个全球唯一的名字,叫做MAC地址,也叫做IEEE地址或扩展地址。由于这个名字有64位,所以有时也称为64位地址。不论这个全球唯一的名字有多少称呼,其意义都是使它们不会重复,因为这个名字也会被当做地址来用(或者说就是地址)。 

但是,如果日常通讯就用64位这么长的名字的话,实在有点费劲,比如你想对朋友说一句话,是这样的一段开场白,就有点费劲了:“尼古拉斯·亚历山大·爱新觉罗·弗朗西斯·赵四,你好!”这实在是有点费劲。简称“赵四”的话,身边的人可能就有重名的。所以zigbee又规定了另外一个名字,也可以称之为代号吧,叫做:16位短地址,也称作网络短地址。这个地址是在设备加入网络的时候,由协调器分配的,在同一个网络中是不会出现重名的。也是正是如此,一个zigbee网络的理论最大节点数就是2的16次方也就是65536个节点。网络短地址主要用于网络内的通讯。

zigbee的设备角色

现在来给他们分配角色,并指挥他们建立网络:

角色1:协调器

首先我们选出了一个队长,他要组建一个工作团队(网络)。首先,他要确定两件事,一是,我在什么地方;二是,我的团队叫什么名字;对于第一件事,他所在地方叫做2.4GHz,他的活动不能离开这个地方。当然,也会有别的团队来到2.4GHz这个地方工作,但这个地盘是很大的,我的团队在2.405GHz这个山谷,他的团队2.410GHz这个山腰,总之两个团队互不干扰。这个山谷就是所谓的“信道”。大家也看出来了,不同的信道之间频率是有区别的,也就是说,信道在物理上就区分开了不同的网络;第二件事,团队的名字是可以指定的,然后这个名字就作为这个团队的特有的ID,叫做PAN-ID,意思是个域网ID。同一个信道里边可以由多个个域网,就像多个团队都可以在同一个山谷干活一样。这个PAN-ID可以是队长指出来的,例如设置为0x1001,那么这个队就被成为1001队。也可以设置为0xFFFF,意思是没有名字,别的队可能用队长的名字来称呼这个团队,例如“铁柱队”,“二妞队”,当然,zigbee没有叫做铁柱或者二妞的,所以如果把PAN-ID设置为0xFFFF的话,那么会根据协调器自己的MAC地址来分配一个与之后四位近似的PAN-ID。

角色2 路由器

协调器建立好了网络,要招兵买马,大干一场了。首先他会给自己找一些帮手作为小干部,这些小干部就叫做路由器。这个路由器不是像TP-Link这种里边插着网线,你就能用手机上网的路由器,而是在zigbee网络里边实现了数据路由的节点。所谓的路由就是转发数据包,也就是说,在zigbee网络中,路由器听到了别人喊了一句话后,可以跟着喊话,把这句话传到远一点的地方。就像古装片里,皇帝在金銮殿喊了一声,宣XXX觐见,然后听到这些话的宦官们就一个个按次序跟着喊,把话传到很远的地方。有了数据路由的机制,路由器就可以扩展网络的分布范围。他们还可以介绍别的节点加入网络,所以跟队长离得比较远的小伙伴,可以通过路由器的介绍加入网络,也可以通过路由器的传话来跟队长进行交谈。路由器是zigbee网络的一大特点,正式因为这些路由器的存在,zigbee的大家族才可以人丁兴旺,“党羽”众多,虽然每一个节点喊话的距离都不远,但是路由机制可以把数据发送的很远,就像烽火台点狼烟一样。

角色3 终端设备

最后终于是勤勤恳恳工作的终端设备了,终端设备常常与被监控的对象连接在一起,进行数据的采集。例如,他与一个光敏传感器连在了一起,隔一会他就看看传感器发来的数值,然后把数值告诉收集节点(通常是协调器或路由器)。另外,路由器有的时候也会做数据采集的工作,但是终端设备不会进行数据的路由。对了,节点所在的地方可能有不止一个zigbee网络,他会加入哪一个网络呢?首先要信道一致,信道不一致说话都听不懂,更别说工作了。其次看PANID,如果节点自己设置了PANID,那么就加入跟自己PANID一样的网络。如果节点的PANID是0xFFFF的话,就挑一个自己感觉最好的网络加入。

供电

介绍完设备的角色之后,我们来给他们分配粮食(电池) 

协调器建立网络,本来就很辛苦了,建立好网络之后,就跟路由器一样了,还有其他的一些任务,如给新入网的节点起名字(分配地址),很是辛苦,所以一般用主电源供电。如果用电池的话,会消耗很快。 

路由器一般要给节点当入网介绍人,还要传话,有的时候还要盯着被监控的对象,也很辛苦,所以一般也是主电源供电。注意,喊话是十分浪费体力的。 

节点就比较轻松了,他只需要看着被监控的对象,再把监控数据发送出去就行,所以为了省粮食,他绝大多数的时间在睡觉,定时(几秒到几天都有可能)起来看看数据就行了。所以节点一般用电池供电,普通电池也能使它工作数月之久。由于节点比较省电,zigbee网络的整体功耗是比较低的。 

特别强调一下,zigbee是个没有起床气的勤劳孩子,他从休眠到激活大约只需要15ms,

数据的多跳

前边我们说过,路由器可以传话,这里来具体说一下工作的情形。 

首先是终端设备给协调器发送数据(默认协调器是采集节点)。前边说过,16位网络短地址主要用于网络内的通讯,作为一个终端设备,它入网以后只知道两个网络短地址,一个是自己的,另一个是协调器的。队长的代号是0x0000(协调器的网络短地址是0x0000)。当他有数据汇报的时候,就会喊一句:“老大,光敏值变成588了,over!”。这时可能队长离他比较远,听不到他的话,但是他的小领导,路由器是可以听到的。路由器就会跟着喊:“老大,节点XXXX,有消息了,他说光敏值变成588了,over!”如果这个路由器的直接上级不是协调器的话,还可以通过别的路由器再次喊话,直到协调器接收到这条消息。然后协调器回复一句:“知道了。over。”然后这句话再顺着原路返回去,让汇报了数据的那个终端设备听到。 

特别提一句,“老大,光敏值变成588了,over!”,这个over不是为了耍帅,zigbee的数据包是有校验的,采用了16位CRC校验机制,以保证zigbee的数据包数据位的准确性。

广播,组播与单播

如果一个节点有话要说的话,有三种方式可以选择,方别是广播,组播与单播。以协调器为例,广播就是他给所有的节点喊话:“同志们注意了,现在开会了,over!”,然后路由器听到以后也会大喊:“同志们注意了,现在开会了,over!”,并且记下来,因为可能有的终端设备没听到,他会再说一遍。终端设备收到以后心里就默默记下:哦,现在开会了,并不发声。咱们知道,终端设备是会进入休眠的,进入休眠的时候,广播消息要怎么处理呢?终端设备醒来以后,会向其父节点(它的入网介绍人)发一个data request,问问他在自己睡着的时候有没有什么重要的消息漏掉了,这时路由器存起来的消息就可以说给他听了。 

组播也叫多点传送,就是建立一个组,把组员的代号(网络短地址)都记下来,然后只给这个组的人说话,进行小组的讨论。实质是就是多次进行单播。 
再然后是单播,也叫单点传输,点播,它的特点是说话的时候就指明是说给谁听的,前边说工作情形的时候,终端设备向协调器汇报光敏值,就指明了说给0x0000听,这其实就是点播。我们这里说一下点播的重传机制。如果一个人特意给你发消息,一般来说就是有比较重要的事情,如果你不回复的话,他可能会想网络是不是不好?你是不是在睡觉没收到?会再给你发一次。单播就是这样的。如果协调器给某个节点发消息:“0x1314,把你的灯亮起来一个,over。”听到这句话的路由器会看看这个0x1314是不是自己的兵,或者是不是自己手下路由器的兵,如果是的话他就会把这句话记住,然后传过去。0x1314收到消息后,首先会告诉给他发消息的人,“收到了,over”,然后再亮一个灯。如果协调器听不到这个收到了(ACK),会再发送一次:“0x1314,把你的灯亮起来一个,over。”,一共能发送8次,要是8次,0x1314都不回消息的话,协调器可能就生气了,不再发了。有的同学可能觉得这个应答机制很麻烦,但是无线网络中可能有各种干扰,导致这个消息没有被接收到,所以收不到应答时数据重传是很有必要的。

路径的维护与自愈性

我们已经知道,一条消息从一个节点发送到另一个节点的时候,是可以通过若干个路由器的。但是每经过一个路由器,都会增加一点延时,并且多麻烦一个人,浪费了电,所以消息传递是有路径开销的,而zigbee系统可以计算这些路径的开销,使得消息的传递尽量少麻烦一些路由器。与之类似的,一个路由器可以是若干节点的入网介绍人,但是不一定总是这些节点的小领导,因为zigbee网络会根据实际情况调整网络的拓扑模型,例如一个路由器总是频繁地转发消息,他的电量就会消耗很快,zigbee网络可能综合考虑,决定让他“养老”,少管理几个手下,把他的手下分给他的相邻的路由器(如果有邻居路由器的话,相邻的路由器会交换自己的“组织关系表”)。还有一些更极端的情况,如果一个节点的上级突然“阵亡”了,不管是没电还是死机,这个节点就会成为“孤儿”,然后他会重新扫描网络,发现可以介绍他入网的设备的话,就会申请重新回到组织的怀抱。

先听话,再说话

如果跟别人交谈的时候,打断别人是不礼貌的,所以,我们应当在别人不说话的时候,再发表自己的言论。同样,井然有序的zigbee网络也存在先听话再说话的秩序,叫做CSMA-CA,载波侦听多路访问-冲突避免,意思是一个节点要发送消息,先要进行空闲信道评估,看这个信道没有被别人占用的话,才会说话。zigbee网络有几百上千个节点时,会不会说话的人太多,自己都插不上嘴?答案是,会的。空气中zigbee数据太多的话,是可能发生zigbee数据阻塞的。这也就是为什么zigbee的通讯速度不快的一个主要原因了吧。并且,只要是同一个信道中,不论PANID是否一致,都存在CSMA-CA,所以节点实在多的话,可以尝试不同的信道。这里还要说明一个问题,就是蓝牙,WIFI,都工作在2.4GHz,他们发送信号会干扰zigbee的通讯吗?不会的,因为就算蓝牙或WIFI正在发送射频信号,zigbee听了一会发现听不懂,就可以判断这些信号不会干扰自己的通讯,就像你在叽叽喳喳一堆英文中,也能听到那一句你的家乡话一样。

数据的加密

zigbee网络可以实现数据加密。被发射到空中的无线数据是很容易被截获的,为了保护数据,zigbee的策略是,允许你偷听,但是不让你听懂。在本书所使用的Z-Stack协议栈中,使用了AES-128的加密算法,意思就是使用了一个128位的密钥,只有网络内的节点才知道密钥是什么。不知道密钥的设备即便接收到了数据,也不知道数据的意义是什么。另外特别说明一下,AES-128是一种全球免专利费的技术,zigbee非常注意采用这样的免费技术,所以进一步降低了成本。

定位

使用zigbee网络可以做一些精度不太高的定位,其原理就是,每一个信号的信号强度都是可知的,就像你听到了别人说话,当然知道了他说话声音的大小。声音的大小跟距离是有一定的关系的,同理信号强度跟距离也是有一定关系的,但是却不是一一对应的关系,因为除了距离,环境甚至温度影响信号强度。除此之外,zigbee的定位都是相对距离,也就是说一个节点可以通过信号强度算出自己与另一个节点的大致距离,但仍不知道自己的绝对距离(经纬度),所以使用zigbee的定位可以知道节点的大概位置,并不知道准确位置。不过目前室内定位技术并没有一个很好的方案,zigbee的定位也算是还有一些用的。

特点总结

好了,这个场景基本介绍完了,我们来大概总结一下zigbee的特点: 
1 低功耗:由于节点常常休眠,zigbee是比较省电的; 
2 低成本:每个节点都不贵,还比较机智地使用免专利费技术; 
3 可靠: 数据重传,CSMA-CA,校验以及自动的路由修复都保证了zigbee的无线通信是相对可靠的。 
4 安全:可加密; 
5 网络容量大:实际CC2530组建的网络基本能达到100个节点。“绿野千传”项目成功部署了1000个节点; 
6 短时延,设备激活快,点播中的消息确认是微秒级别;不过路径长的话会增加延时; 
7 近距离,单个节点通讯范围一般是100米以内 
8 自组织和自愈性,协调器自动建立网络,有节点故障时网络可以自我修复。 

现在我们回到zigbee名字的由来。蜜蜂在发现花粉位置时,通过跳优美的“Zigzag”,舞蹈来通知同伴花粉所在的方位信息,它的同伴看到这样的舞蹈之后,也会跟着跳起来,将花粉的方位信息继续传递。zigbee是“Zigzag”和Bee的合成词,这表示zigbee网络具有小巧简洁的无线传感功能。人们通过蜜蜂的启发建立的这种近距离,低功耗的无线网络,就叫做zigbee技术。 
现在你已经知道了zigbee的特点,并且也知道了一个很厉害的无线传感网络应用的案例,那么就赶快开始学习zigbee技术,做成更多有意义的应用吧!

文章来源:geek_yatao灌水的技术博客