STM32WB 系列 ZigBee 配网的核心是通过协议栈 API 配置启动参数,支持集中式、分布式、ZCL 配网群集、Touchlink、预配置启动 5 种模式,适配家庭自动化、工业控制等不同场景,可实现网络形成、设备加入、安全密钥协商与设备绑定,全程无需复杂底层开发。
1. 核心概述
1.1 配网核心价值
- 灵活适配:支持集中式(有信任中心,高安全)、分布式(无信任中心,简化部署)等多种拓扑;
- 安全可控:支持全局链路密钥、安装代码密钥、信任中心密钥协商,保障配网与通信安全;
- 易用高效:通过
ZbStartup等核心 API 统一配置,配合回调函数快速实现配网流程,无需深入协议栈底层。
1.2 关键术语速览
- TC(信任中心):集中式网络的安全核心,管理网络密钥与设备接入;
- ZC(Zigbee 协调器):负责形成网络,分配 PANID 与设备地址;
- ZCL(Zigbee 群集库):提供配网、绑定等标准化功能接口;
- Touchlink:近距离配网机制,支持设备靠近时自动发现与加入网络。
2. 五大配网模式实操(按场景选型)
2.1 集中式网络(有信任中心,高安全)
核心逻辑
由 ZC 形成网络,TC 统一管理接入与密钥,适合需要严格安全控制的场景(如工业设备、智能家居网关)。
配置步骤
(1)形成网络(ZC 侧)
// 1. 初始化启动配置
struct ZbStartupT config;
ZbStartupConfigGetProDefaults(&config);
// 2. 设置为形成网络
config.startupControl = ZbStartTypeForm;
// 3. 配置扩展PANID(可选,0则用设备扩展地址)
config.extendedPanId = 0x1234567812345678ULL;
// 4. 配置预共享链路密钥(全局密钥或安装代码)
memcpy(config.security.preconfiguredLinkKey, sec_key_ha, ZB_SEC_KEYSIZE);
// 5. 启动网络形成
ZbStartup(zb, &config, callback, arg);
// 6. 允许设备加入(持续180秒)
struct ZbZdoPermitJoinReqT req;
req.destAddr = ZB_NWK_ADDR_BCAST_ROUTERS;
req.duration = 180;
ZbZdoPermitJoinReq(zb, &req, callback, arg);
(2)加入网络(终端设备侧)
struct ZbStartupT config;
ZbStartupConfigGetProDefaults(&config);
// 设置为加入网络
config.startupControl = ZbStartTypeJoin;
// 配置要加入的扩展PANID(0则加入任意开放网络)
config.extendedPanId = 0x1234567812345678ULL;
// 配置与ZC一致的链路密钥
memcpy(config.security.preconfiguredLinkKey, sec_key_ha, ZB_SEC_KEYSIZE);
// 启动加入流程
ZbStartup(zb, &config, callback, arg);
关键要点
- 链路密钥二选一:全局密钥(如 “ZigBeeAlliance09”,适合批量生产)、安装代码密钥(唯一密钥,高安全);
- 自动密钥协商:设备加入后,与 TC 自动协商唯一链路密钥,提升通信安全性。
2. 分布式网络(无信任中心,简化部署)
核心逻辑
无集中 TC,所有路由器均可作为接入点,使用全局分布式链路密钥,适合无网关的小型网络(如传感器网状网络)。
核心配置(形成网络)
struct ZbStartupT config;
ZbStartupConfigGetProDefaults(&config);
config.startupControl = ZbStartTypeForm;
// 关键:设置信任中心地址为分布式(0xFFFFFFFFFFFFFFFF)
config.security.trustCenterAddress = ZB_DISTRIBUTED_TC_ADDR;
// 配置分布式全局链路密钥(测试用默认密钥)
memcpy(config.security.distributedGlobalKey, sec_key_distrib_uncert, ZB_SEC_KEYSIZE);
// 启动网络
ZbStartup(zb, &config, callback, arg);
注意事项
- 加入网络时,终端设备需配置相同的分布式链路密钥;
- 安全性低于集中式,适合无敏感数据的场景。
3. ZCL 配网群集(批量部署,工具化配置)
核心逻辑
通过配网工具(如专用网关)向设备发送 ZCL 指令,批量配置配网参数(如 PANID、链路密钥),适合大规模设备部署。
- 设备端:初始化 ZCL 配网服务器群集,注册回调(重启、保存配置);
struct ZbZclCommissionServerCallbacksT callbacks;
memset(&callbacks, 0, sizeof(callbacks));
callbacks.restart_device = app_commission_svr_restart_cb;
callbacks.save_startup = app_commission_svr_save_cb;
// 分配配网服务器群集
struct ZbZclClusterT *cluster = ZbZclCommissionServerAlloc(zb, ZCL_PROFILE_HOME_AUTOMATION, true, &callbacks, arg);
- 配网工具端:通过 InterPAN 或临时网络,发送 ZCL 写入指令配置设备启动参数;
- 设备接收指令后,重启并执行配网流程。
4. Touchlink 配网(近距离,即插即用)
核心逻辑
设备靠近时通过 InterPAN 消息发现,自动形成 / 加入分布式网络,适合家庭自动化(如灯具、传感器近距离配网)。
关键配置
struct ZbStartupT config;
ZbStartupConfigGetProDefaults(&config);
// 启用Touchlink配网模式
config.bdbCommissioningMode |= BDB_COMMISSION_MODE_TOUCHLINK;
// 配置Touchlink端点
config.touchlink.tl_endpoint = TOUCHLINK_ENDPOINT;
config.touchlink.bind_endpoint = APPLICATION_ENDPOINT;
// 配置为发起设备(或目标设备,设ZCL_TL_FLAGS_IS_TARGET)
config.touchlink.flags = 0;
// 配置分布式链路密钥
memcpy(config.security.distributedGlobalKey, sec_key_distrib_uncert, ZB_SEC_KEYSIZE);
// 启动Touchlink
ZbStartup(zb, &config, callback, arg);
注意事项
- 仅支持分布式网络,不支持集中式;
- 配网距离有限(通常数米),依赖设备间近距离通信。
5. 预配置启动(重新加入网络)
核心逻辑
设备已加入过网络,通过预存的 PANID、扩展 PANID 等参数,快速重新加入,无需重新配网。
配置步骤
struct ZbStartupT config;
ZbStartupConfigGetProDefaults(&config);
// 配置预存的PANID、扩展PANID、短地址
config.panId = PANID_OF_NETWORK;
config.extendedPanId = EXTENDED_PANID_OF_NETWORK;
config.shortAddress = DESIRED_SHORT_ADDRESS;
// 启动重新加入
ZbStartup(zb, &config, callback, arg);
3.查找和绑定:自动建立设备通信
核心逻辑
设备加入网络后,自动匹配输入 / 输出群集,建立绑定关系,无需手动配置目标地址,简化设备间通信。
启用方式
// 启动时启用查找和绑定模式
config.bdbCommissioningMode |= BDB_COMMISSION_MODE_FIND_BIND;
工作流程
- 设备加入网络后,启动 10 秒识别过程;
- 广播识别查询,收集网络中其他设备的群集信息;
- 自动匹配兼容群集(如传感器输出群集与控制器输入群集);
- 建立绑定关系,后续通信直接通过群集交互,无需目标地址。
4. 避坑关键要点
- 链路密钥选择:集中式网络优先用安装代码密钥(高安全),分布式用全局密钥(简化部署);
- Touchlink 限制:仅支持分布式网络,集中式网络不可用;
- 信任中心协商:集中式网络默认启用密钥协商,需确保协议栈版本≥21;
- 通道配置:配网时需指定有效通道(如 11、15、20、25),避免信道干扰。
STM32WB ZigBee 配网的核心是 “模式匹配场景 + API 标准化配置”:集中式适合高安全场景,分布式适合简化部署,Touchlink 适合近距离即插即用,ZCL 配网群集适合批量部署。通过ZbStartup等核心 API 配置启动参数,配合回调函数,即可快速实现网络形成、设备加入与通信绑定。