外观
04 · 数据通信与属性上报
对应底座:第四部分·3(基于 AF 的数据通信)、4~7(基于 ZCL 的通信)
学习目标
- 理解 AF(应用框架)层的通信原理:网络地址 + 端点号定位服务
- 掌握 ZigBee 的三种通信方式:点对点、广播、组播
- 理解 ZCL(ZigBee 集群库)的作用与架构
- 了解基于 ZCL 的属性读写与上报机制
AF 层通信原理
AF(Application Framework,应用框架)层位于应用层与 APS 子层之间,开发者基于该层编写代码实现设备间数据通信。
ZigBee 3.0 通信最终是发送到设备的特定服务(端点号)。一次通信需要两个要素定位目标:
- 网络地址:标识设备在网络中的位置
- 端点号:标识设备上的特定服务
类比理解
如同访问 http://www.sxf-iot.com:80——域名定位主机,80 端口定位服务。ZigBee 协调器向网络地址 0x0EF1 的智能插座、端点号 8 发送"打开"指令,就是端点级通信。
端点号分类
| 端点号 | 用途 |
|---|---|
| 0 | 分配给 ZDO(ZigBee 设备对象) |
| 1 ~ 240 | 开发者可自由使用(如 #define SAMPLESW_ENDPOINT 8) |
| 241 ~ 254 | 保留端点,暂不可用 |
| 255 | 广播:设备的所有服务(简单描述符)都会收到数据 |
三种通信方式
mermaid
flowchart LR
subgraph 点对点
P1((设备A)) <--> P2((设备B))
end
subgraph 广播
B1((设备A)) --> B2((所有设备))
end
subgraph 组播
G1((设备A)) --> G2((组内设备1))
G1 --> G3((组内设备2))
end| 方式 | 说明 | 典型场景 |
|---|---|---|
| 点对点(P2P) | 两设备一对一通信 | 控制指令下发 |
| 广播 | 向所有设备发送数据 | 网络发现、全局通知 |
| 组播 | 向特定组的设备发送数据 | 分区控制、场景联动 |
注册简单描述符
使用 AF 通信前,需要先注册简单描述符并让对应端点号生效:
- 创建一个简单描述符(描述设备具备的功能)
- 注册这个简单描述符(在设备初始化函数中完成,如
zclSampleSw_Init())
ZCL 集群库
ZCL(ZigBee Cluster Library,ZigBee 集群库)位于 AF 层与应用层之间,由 ZigBee 联盟定义:
mermaid
flowchart TB
APP["应用层"]
ZCL["ZCL(ZigBee 集群库)"]
AF["AF(应用框架层)"]
APP <--> ZCL <--> AF为什么需要 ZCL? 直接使用 AF 层通信 API 的最大问题是不同公司开发的设备难以互联互通。ZigBee 联盟在 AF 层与应用层之间构建 ZCL,统一定义了:
- 应用领域(Profile)、设备类型(Device)
- 集群(Cluster)、设备属性和命令
各厂商开发 ZigBee 设备时遵循这些统一定义,即可实现互联互通。
ZCL 代码位置:Z-Stack 3.0.1\Components\stack\zcl,一个设备一般只使用其中部分内容(如 SampleSwitch 工程使用 zcl_general、zcl_lighting、zcl_ota 等)。
核心 API:zcl_SendCommand() 用于发送 Profile 与 Cluster 特定命令消息。
属性读写与上报
- 属性读写:通过 ZCL 属性读写 API 读取/设置设备属性(如灯的开关状态、亮度值)
- 属性上报:终端设备(如传感器)定期向协调器上报采集到的数据(如温湿度值),协调器接收解析后在 PC 端展示
这是传感网数据采集系统的核心机制:传感器终端 → 属性上报 → 协调器汇聚 → 上位机展示。
课后自测
- ZigBee 通信中"网络地址 + 端点号"分别起什么作用?
- ZigBee 支持哪三种通信方式?分别适用什么场景?
- ZCL 的作用是什么?为什么说它是不同厂商设备互联互通的基础?
- 传感器终端采集数据并发送给协调器,通常采用哪种 ZCL 机制?