Linux 物联网网关主控系统-感知层部分(二)
- 一、物联网通信协议
- 二、Zigbee协议简介
- 三、Zigbee设备类型
- 四、ZigBee网络拓扑
- [五、ZigBee 网络建立全流程](#五、ZigBee 网络建立全流程)
- 六、Zigbee协议栈
一、物联网通信协议
物联网通信协议:支持 TCP/IP 的物联网设备,可以通过 WIFI、蜂窝网络以及以太网,使用 HTTP、MQTT、CoAP、LwM2M 以及XMPP 等应用层协议协议接入云端

接入方式-网关协议:网关协议是适用于短距通信无法直接上云的协议,比如蓝牙、ZigBee、LoRa 等。• 此类设备需要接入网关转换之后,通过TCP/IP 协议进行上云。

二、Zigbee协议简介
Zigbee历史
ZigBee,这个名字来源于蜂群使用的赖以生存和发展的通信方式:蜜蜂通过跳Zig-Zag 形状的舞蹈来分享新发现的食物源的位置,距离和方向等资讯。
ZigBee的前身是1998年由INTEL、IBM等产业巨头发起的"HomeRFLite"技术。
2002年下半年,英国Invensys公司、日本三菱电气公司、美国摩托罗拉公司以及荷兰飞利浦半导体公司四大巨头共同宣布加盟"Zigbee联盟",以研发名为"Zigbee"的下一代无线通信标准。
Zigbee与IEEE 802.15.4
ZigBee 是一种开放式的基于IEEE 802.15.4协定的无线个人局域网(Wireless Personal Area Networks)标准。
IEEE 802.15.4定义了物理层和媒体接入控制层(MAC)
而ZigBee则定义了更高层如网路层及应用层等。
ZigBee技术特点
- 低功耗
由于 ZigBee 的传输速率低,发射功率仅为 1mW,而且采用了休眠模式,功耗低,因此 ZigBee 设备非常省电。
据估算,ZigBee 设备仅靠两节 5 号电池就可以维持长达6 个月到 2 年左右的使用时间。- 低成本
由于 ZigBee 模块的复杂度不高,ZigBee 协议免专利费,再加之使用的频段无需付费,所以它的成本较低。- 时延短
通信时延和从休眠状态激活的时延都非常短,典型的搜索设备时延 30ms,休眠激活的时延是 15ms,活动设备信道接入的时延为 15ms。- 网络容量大
一个星型结构的 ZigBee 网络最多可以容纳254 个从设备和一个主设备,一个区域内可以同时存在最多 100 个 ZigBee 网络,而且网络组成灵活。网状结构的 ZigBee 网络中可有65000 多个节点。- 可靠
采取了碰撞避免策略,同时为需要固定带宽的通信业务预留了专用时隙,避开了发送数据的竞争和冲突。MAC 层采用了完全确认的数据传输模式,每个发送的数据包都必须等待接收方的确认信息。如果传输过程中出现问题可进行重发。- 安全
ZigBee 提供了基于循环冗余校验 (CRC) 的数据包完整性检查功能,支持鉴权和认证,采用了AES-128 的加密算法,各个应用可以灵活确定其安全属性。
三、Zigbee设备类型
在 ZigBee 无线传感器网络中有三种设备类型:
• 协调器、
• 路由器、
• 终端节点
1. ZigBee协调器(Coordinator)
• 它包含所有的网络信息,是3种设备中最复杂的,存储容
量大、计算能力最强。
• 它主要用于发送网络信标、建立一个网络、管理网络节
点、存储网络节点信息、寻找一对节点间的路由信息并
且不断的接收信息。
• 一旦网络建立完成,这个协调器的作用就像路由器节点。
PS:说 "作用就像路由器节点",是指在数据转发和网络维护层面,协调器和路由器的功能高度重合,它本质上也是一个 "全能型的路由节点",只是多了 "创建网络" 这个一次性的初始化功能。
2.ZigBee路由器(Router)
它执行的功能包括允许其它设备加入这个网络,跳跃路由,辅助子树下电池供电终端的通信。
3. ZigBee终端设备(End-device)
•一个终端设备对于维护这个网络设备没有具体的责任,所以它可以睡眠和唤配,看它自己的选择。
•因此它能作为电池供电节点。
四、ZigBee网络拓扑

星型拓扑:所有设备都直接连到一个中心协调器,结构最简单,但范围小。
簇状(树状)拓扑:协调器下面挂多个路由器,路由器下面再挂终端,像树一样分层,适合中等规模网络。
网状(MESH)拓扑:协调器、路由器之间互相连接,数据可以走多条路径,是最灵活、最可靠的结构。
五、ZigBee 网络建立全流程
1、协调器建立新网络流程(网络初始化)
- 协调器节点资格校验
节点必须同时满足两个条件:
具备 ZigBee 协调器功能
未加入任何其他 ZigBee 网络
不满足条件的节点发起建网请求,会被网络层管理实体直接终止。 - 信道扫描
包含两个子过程:能量扫描、主动扫描
作用:遍历可用频段,筛选出无干扰、无已有网络占用的最优信道。 - 配置网络参数
网络层管理实体为新网络分配唯一的PAN 描述符(PAN ID)
PAN ID 约束:
取值 ≤ 0x3fff
取值 ≠ 0xffff
在所选信道内全局唯一 - 运行新网络
完成参数配置后,ZigBee 网络正式启动,进入可运行状态。 - 开启设备入网权限
仅协调器 / 路由器可通过NLME_PERMIT_JOINING.request原语,设置节点为允许设备入网状态,开放网络接入。
2、节点加入网络的两种方式
方式 1:通过 MAC 层关联加入网络(标准自动入网流程)
子节点发起信道扫描,搜索周边可用 ZigBee 网络
子节点存储扫描到的所有 PAN(个人局域网)信息
子节点选择目标 PAN(目标网络)
子节点在目标 PAN 中选择父节点(协调器 / 路由器)
子节点向父节点发送 MAC 关联请求
父节点响应 MAC 关联请求,完成资源分配
子节点确认连接成功
父节点最终响应连接成功,入网完成
注:所有组网操作由 ZigBee 协议栈自动实现,无需手动干预。
方式 2:通过与先前指定父节点连接加入网络
子节点不执行信道扫描,直接与预先指定的父节点(协调器 / 路由器)建立连接,完成入网适用于固定拓扑、已知父节点地址的场景。
六、Zigbee协议栈
1.基础介绍

ZigBee 协议栈具有很多版本,不同厂商提供的 ZigBee 协议栈有一定的区别。
虽然协议是统一的,但是协议的具体实现形式是变化的,即不同厂商提供的协议栈是有区别的•函数名称和参数列表有区别•学习厂商提供的 Demo 演示程序和说明文档学习
ZigBee 协议栈 ZStack-CC2530-2.5.1a 要安装以后才能使用。
协议栈安装文件目录:
物联网实训项目所有资料 \ 环境工具 \ZStack-CC2530-2.5.1a\ZStack-CC2530-2.5.1a.exe
双击 ZStack-CC2530-2.5.1a.exe,即可进行协议栈的安装,默认是安装到 c 盘。然后在路径:C:\Texas Instruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\GenericApp\CC2530DB
下找到 GenericApp.eww 打开该工程
打开之后是这样的
2.Zigbee协议使用
使用 ZigBee 协议栈进行开发的基本思路可以概括为如下三点:
1.用户对于 ZigBee 无线网络的开发就简化为应用层的 c 语言程序开发,不需要深入研究复杂的 ZigBee 协议栈;
2.ZigBee 无线传感器网络中数据采集,只需用户在应用层加入传感器的读取函数即可;
3.如果考虑节能,可以根据数据采集周期进行定时,定时时间到就唤醒 ZigBee 的终端节点,终端节点唤醒后,自动采集传感器数据,然后将数据发送给路由器或者直接发给协调器。
3.Zigbee协议栈函数
整体框架

取自公众号:一口Linux
初始化部分流程基本一样,但是Generic_APP_Init()部分可以自己修改。
GenericApp_ProcessEvent()部分也要自己修改。
无线发送函数AF_DataRequest()
向zigbee网络发送函数都调用该函数

接收数据函数GenericApp_MessageMSGCB()
无线信道接收到的数据都会调用到该函数

如何给串口注册回调函数
作为协调器,需要通过串口从上位机读取数据,可以通过下方方法注册回调函数。波特率:115200 •流控:无•收发缓冲区:255 •回调函数 :rxCB


如何添加定时器功能
我们希望终端节点可以定时上传传感器数据,这就需要定时器操作。
思路如下:
1.ZDO 层更改网络状态后就启动定时器
2.主任务处理函数
3.GenericApp_ProcessEvent () 中,增加超时事件处理逻辑,上传传感器数据
通过函数 osal_start_timerEx () 重新启动定时器
开启定时器函数

实例


