一、 无线通信理论

Zigbee无线通信,需要高频的载波来提供发射频率,Zigbee模块之间要可以正常通信,接收模块和发送模块的频率要一致。

​ Zigbee有27个载波可以进行通信,载波又叫做信道。这些载波的频率落在某些频率区段,我们把这些区段叫做频段。

​ 2.4G频段 16个信道 ​ 915M频段 896M频段 11个信道

​ 但TI的所有支持Zigbee底层协议的芯片只能在2.4G频段的16个信道里进行通信。即1126信道(010信道在915M和896M的频段内)

网络地址: 在Zigbee无线局域网里,每一个模块都有一个在该网络里唯一的2个字节的地址,这个地址我们叫做网络地址(或者叫做网络短地址)。

PANID: 这也是一个2个字节的编号,用来区分不用的Zigbee无线局域网,我们称为个域网ID。两个模块之间要进行通信,PANID一定要一样。

image-20210528084643979

信道与PANID的设置: 在Tools文件组里的f8wConfig.cfg文件中 (1)设置信道 -DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B (2)设置PANID -DZDAPP_CONFIG_PAN_ID=0x1234 注意:如果把PANID设置为0xFFFF,则意味着该模块不受PANID的限制

二、 网络组建理论

在Zigbee无线局域网里,节点(无线模块)按照在网络里的功能可以划分为:协调器、路由器、终端这三种角色。 它们的硬件可以是一模一样的,之所以在网络里表现出不同的功能,是因为它们下载了不同功能版本的程序,在同一个网络里担当了不同的角色功能。

image-20210528084807987

​ 下载了路由器和终端代码的模块,它们上电后的第一件事情去寻找网络,请求加入。然而网络不会无缘无故产生,是由下载了协调器代码的模块创建的。 ​ 下载了协调器代码的模块上电后的第一件事就是创建网络。 任何一个网络里,第一个节点一定是该网络的协调器,有且只能有一个协调器

​ 如果有一个协调器创建了一个网络ID是0x1234,还有一个协调器也创建了一个网络ID为0x1234,此时后面创建的网络ID加一,即为0x1235。

​ 任何一个Zigbee模块要加入到某个网络,一定要一个处于该网络里的节点作为介绍人,并且这个介绍人不能是终端节点(即路由器或者协调器)。在加入网络以后,介绍人节点和被介绍加入的节点互为父子关系。 介绍人是被介绍人的父节点,被介绍人是介绍人的、子节点。有多个可作为介绍人资格的节点,会选择信号强度高的节点作为介绍人。

​ 协调器在创建完网络后,在网络里的功能与路由器没有任何区别,只不过协调器的网络地址比较特殊只能是0x0000,而其他加入的节点的网络地址是动态分配的。 ​ 终端节点与其他模块的通信必须要通过它的父节点,而路由器(协调器)之间通信可以直接通信的。 因此,路由器在网络里充当的是拓扑扩展的中转站的功能

三、Zigbee三种网络架构

1.星形拓扑

​ 星形拓扑是最简单的一种拓扑形式,他包含一个Co-ordinator(协调者) 节点和一系列的 End Device(终端)节点。每一个End Device 节点只能和 Co-ordinator 节点进行通讯。如果需要在两个 End Device 节点之间进行通讯必须通过Co-ordinator 节点进行信息的转发。

image-20210528085042404

2.树形拓扑

​ 树形拓扑包括一个Co-ordinator(协调者)以及一系列的 Router(路由器) 和 End Device(终端)节点。Co-ordinator 连接一系列的 Router 和 End Device, 他的子节点的 Router也可以连接一系列的 Router 和End Device. 这样可以重复多个层级。树形拓扑的结构如下图所示:

image-20210528085105782

3.Mesh拓扑(网状拓扑)

​ Mesh拓扑(网状拓扑) 包含一个Co-ordinator和一系列的Router 和End Device。这种网络拓扑形式和树形拓扑相同;请参考上面所提到的树形网络拓扑。但是,网状网络拓扑具有更加灵活的信息路由规则,在可能的情况下,路由节点之间可以直接的通讯。这种路由机制使得信息的通讯变得更有效率,而且意味这一旦一个路由路径出现了问题,信息可以自动的沿着其他的路由路径进行传输。 网状拓扑的示意图如下所示:

image-20210528085155248

4.三种网络架构对比

​ MESH 网状网络拓扑结构的网络具有强大的功能,网络可以通过“多级跳”的方式来通信;该拓扑结构还可以组成极为复杂的网络;网络还具备自组织、自愈功能; ​ 星型和族树型网络适合点多多点、距离相对较近的应用。 ​ 我们可以在 “nwk_globals.h” 文件中159行进行修改网络结构,默认为网状拓扑结构。

image-20210528085251909

​ 我们可以在GenericApp.c文件中的GenericApp_ProcessEvent函数中的switch语句的 case ZDO_STATE_CHANGE中修改代码内容,让模块在不同的网络状态下亮不同的灯。

​ 注意:下载了协调器的代码的模块,创建了网络之后就是协调器状态,而终端和路由器要加入了网络才是对应的状态。终端和路由器要加入网络的条件是,信道和PANID要一致。