Skip to content

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 通信前,需要先注册简单描述符并让对应端点号生效:

  1. 创建一个简单描述符(描述设备具备的功能)
  2. 注册这个简单描述符(在设备初始化函数中完成,如 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_generalzcl_lightingzcl_ota 等)。

核心 APIzcl_SendCommand() 用于发送 Profile 与 Cluster 特定命令消息。

属性读写与上报

  • 属性读写:通过 ZCL 属性读写 API 读取/设置设备属性(如灯的开关状态、亮度值)
  • 属性上报:终端设备(如传感器)定期向协调器上报采集到的数据(如温湿度值),协调器接收解析后在 PC 端展示

这是传感网数据采集系统的核心机制:传感器终端 → 属性上报 → 协调器汇聚 → 上位机展示

课后自测

  1. ZigBee 通信中"网络地址 + 端点号"分别起什么作用?
  2. ZigBee 支持哪三种通信方式?分别适用什么场景?
  3. ZCL 的作用是什么?为什么说它是不同厂商设备互联互通的基础?
  4. 传感器终端采集数据并发送给协调器,通常采用哪种 ZCL 机制?

内容来源:紫甲 IoT《ZigBee 3.0 开发指南》第四部分·3~7,AF 通信原理 · ZCL 简介

Aiot Linker · 物联网专业课程群