Zigbee是一种基于802.15.4物理层协议、支持自组网、多点中继,可实现网状拓扑的复杂的组网协议,加上其低功耗的特点,使得网络间的设备必须各司其职,有效地协同工作。
1、Zigbee网络的设备类型
在Zigbee网络中,有三种不同类型的设备,分别叫做:协调器(Coordinator)、路由器(Router)和终端节点(End Device),如下图所示:
1.1 协调器的功能特点
>选择一个频道和PAN ID,组建网络
>允许路由和终端节点加入这个网络
>对网络中的数据进行路由
>必须常电供电,不能进入睡眠模式
>可以为睡眠的终端节点保留数据,至其唤醒后获取。
1.2 路由器的功能特点
>在进行数据收发之前,必须首先加入一个zigbee网络
>本身加入网络后,允许路由和终端节点加入
>加入网络后,可以对网络中的数据进行路由
>必须常电供电,不能进入睡眠模式
>可以为睡眠的终端节点保留数据,至其唤醒后获取。
1.3 终端节点的功能特点
>在进行数据收发之前,必须首先加入一个zigbee网络
>不能允许其他设备加入
>必须通过其父节点收发数据,不能对网络中的数据进行路由
>可由电池供电,进入睡眠模式
协调器在选择频道和PAN ID组建网络后,其功能将相当于一个路由器。协调器或者路由器均允许其他设备加入网络,并为其路由数据。
终端节点通过协调器或者某个路由器加入网络后,便成为其“子节点”;对应的路由器或者协调器即成为“父节点”。由于终端节点可以进入睡眠模式,其父节点便有义务为其保留其他节点发来的数据,直至其醒来,并将此数据取走。
2、PAN ID
PAN的全称为Personal Area Networks,即个域网。每个个域网都有一个独立的ID号,即称为PAN ID。整个个域网中的所有设备共享同一个PAN ID。Zigbee设备的PAN ID可以通过程序预先指定,也可以在设备运行期间,自动加入到一个附近的PAN中。
二、寻址
1、Zigbee设备的地址类型
Zigbee设备有两种不同的地址:16位短地址和64位IEEE地址。其中64位地址是全球唯一的地址,在设备的整个生命周期内都将保持不同,它由国际IEEE组织分配,在芯片出厂时已经写入芯片中,并且不能修改。而短地址是在设备加入一个zigbee网络时分配的,它只在这个网络中唯一,用于网络内数据收发时的地址识别。但由于短地址有时并不稳定,由于网络结构的变化会发生改变,所以在某些情况下必须以IEEE地址作为通讯的目标地址,以保证数据有效送达。
2、FBee的地址分配方法
FBee采用的是最新的Zigbee Pro的协议栈,在此版本的协议栈中:首先,在任何一个PAN中,短地址0x0000都是指协调器。而其他设备的短地址是随机生成的。当一个设备加入网络之后,它从其父节点获取一个随机地址,然后向整个网络广播一个包含其短地址和IEEE地址的“设备声明”(Device Announce),如果另外一个设备收到此广播后,发现与自己地址相同,它将发出一个“地址冲突”(Address Conflict)的广播信息。有地址冲突的设备将全部重新更换地址,然后重复上述过程,直至整个网络中无地址冲突。
3、FBee设备的短地址变化说明
在FBee的“透传”、“采集”与“控制”几大功能中,设备地址是至关重要的一个参数,只有地址设置正确,通讯才能按照预期进行。在此有必要对地址的使用进行详细的说明。
3.1 协调器和路由器的短地址
协调器的短地址为0x0000,不会发生变化。而FBee的路由器短地址,是在其第一次上电时,按照上文2的规则,由其父节点成功分配一次之后,保存在内部flash中,以后无论如何开关机都将保持不变。
值得一提的是,正是由于这种简单的网络结构,用户可以选择一个协调器+n个路由器的方式来组成一个无“低功耗”需求的网络,进行“无线透传”等应用,简单地使用短地址即可保证数据送达至正确的设备。
3.2 终端节点的短地址
上述协调器+路由器的方式可以满足部分应用,但无法体现Zigbee自组网与低功耗的优势。这时就要发挥终端节点的特点。FBee终端节点的使用,将在后续章节中详细说明,此处仅介绍其短地址变化规律与长地址的使用。
FBee终端节点可实现Zigbee的“自组”、“自愈”功能。每次打开终端节点的电源,它将自动检查其附近的路由器/协调器与其连接的信号质量,选择信号质量最好的路由为其父节点加入网络。在加入网络之后,它将周期性地发送数据请求(MAC data requests),如果其父节点没有对其请求进行响应,并且重试几次后,仍无响应,则判定为父节点丢失,此时终端节点将重复上述过程,重新寻找并加入网络。
注:由于FBee遵循的是Zigbee Pro的规范,重新加入新的父节点后,其短地址将保持不变。但在Zigbee 2007协议中,由于采用的是树型的固定地址方式,在更换父地址后,节点短地址会发生变化。
3.3 利用节点的长地址进行寻址
由于短地址的可变性,在具备可移动节点(End Device)的网络中,最好使用长地址进行通讯,以确保数据送到正确的设备中。FBee模块可实现设备的长地址寻址,仅需一个简单的ATDL指令即可。具体的操作将在后续章节进行介绍。
三、数据发送方式
针对FBee模块现有的数据发送方式,我们重点介绍Zigbee的单播和广播两种方式。单播模式下面,数据由一个源设备,发送至一个目标设备;而广播模式,数据是由一个源设备,发送至很多,或者是所有的设备。
1、单播方式
单播方式下,数据由源设备发出,直接或者经过几级中转后,发送至目的地址。加入zigbee网络的所有设备之间都可以进行单播传输,可用16位短地址或者64位长地址进行寻址。具体路由关系由协调器/路由器进行维护、查询。路由表的相关内容将在后续FBee API模式的章节中进行介绍。
2、广播方式
广播方式是由一个设备发送信息至整个zigbee网络的所有设备,其目标短地址使用0xFFFF。另外,0xFFFD与0xFFFC也可作为广播地址。其区别如下:
0xFFFF: 广播数据发送至所有设备,包括睡眠节点
0xFFFD: 广播数据发送至正在睡眠的所有设备
0xFFFC: 广播数据发送至所有协调器和路由器
提到“广播”,可能不少人会认为zigbee的广播就像村里的大喇叭,一个人讲一遍,所有的人竖着耳朵听一次,就完成任务了。其实并不是这样的,Zigbee的广播更像是“传悄悄话”,一传十、十传百,一点点“蔓延”出去的。
举个最简单的例子:
一个网络中,有ABC三个设备,A是B的邻居;B是C的邻居;但A和C不是邻居。
A--------->B-------->C
当A要发广播给整个网络的时候,由于距离关系,A无法直接发送给C,那么A首先广播给它的邻居(此例中只有B),B再广播给它的邻居(此例中有A和C),A此时收到B的广播数据,与自己发送的广播数据对比后得知:自己已经将信息广播给了B,且B已经成功中继此广播数据,此时A完成任务,并不再继续接受广播。
同理,C收到B的广播后,再广播给它的邻居(此例中只有B),B受到C的广播后,得知C也已经收到了自己的广播信息,且成功中继。
以此类推,任何一个数据广播都可以以这种方式,一步步往外蔓延,最终每个节点都成功收到信息,而且保证信息不会无止境地在网络间传播。
这种广播方式成功地将通讯范围扩大至整个网络,但由于这种信息在网络间频繁地转发,导致网络负担陡增,所以建议不要过分使用广播方式,而且每次广播的数据尽可能少,发送的时间间隔尽量不要太短!