如需要了解更多蓝牙相关知识,请点击下方连接
https://blog.csdn.net/weixin_47456647/article/details/155188246?spm=1011.2415.3001.5331
对于任何支持网状网络拓扑的无线通信协议而言,互操作性都是一项关键要求。在今年的蓝牙世界大会上,我有机会通过一个实操环节分享了蓝牙 ® 网状网络的相关内容 ------ 包括配网与互操作性。环节结束时,参与者学会了如何使用来自 3 家不同厂商的 3 种蓝牙网状网络配网器,为 3 套不同的开发套件完成配网。随后,与会者还了解到如何利用蓝牙网状网络的发布 - 订阅机制,控制这 3 套设备上的板载 LED 灯(点亮或熄灭)。本文将介绍如何搭建一个类似 2018 年蓝牙世界大会上展示的蓝牙网状网络演示系统。
配网器
配网器在蓝牙 ® 网状网络中扮演着关键角色,其职责包括:
- 创建网状网络
- 将新设备(未配网设备)配网接入网络
- 共享被称为 "配网数据" 的网络凭证(详见《蓝牙网状网络规范 v1.0》第 5.4.2.5 节)
- 配置模型参数
- 管理网络
2018 年蓝牙世界大会的演示使用了 3 种配网器:
- 运行在树莓派 3(RPi3)上的 BlueZ v5.50(可参考本指南将其配置为配网器);
- 适用于 iOS 设备的 nRF Mesh;
- 适用于安卓设备的 nRF Mesh。
参数
在树莓派 3、安卓或 iOS 设备等目标平台上安装配网器应用后,需对其进行配置,以确保这些配网器配网的节点能无缝协同工作,并具备良好的互操作性。
每个配网器需要正确配置 5 个关键参数:
- 网络密钥(NetKey)
- 应用密钥(AppKey)
- 密钥索引(Key Index)
- IV 索引(IV Index)
- 单播地址(Unicast address)
对于前 4 个参数,需确保不同配网器的参数值一致。
对于单播地址,不同配网器为新(未配网)设备分配的基础单播地址需保持不同,以避免网络中出现单播地址重复的情况。在我的演示中:
- BlueZ 的基础单播地址为 0x0100,后续为新设备分配的单播地址依次是 0x0101、0x0102 等;
- nRF Mesh 安卓应用的基础单播地址为 0x0300,后续为新设备分配的单播地址依次是 0x0301、0x0302 等;
- nRF Mesh iOS 应用的基础单播地址为 0x0500,后续为新设备分配的单播地址依次是 0x0501、0x0502 等。
因此:
- BlueZ 可分配的单播地址范围为 0x0100~0x02FF,共 256 个可用地址;
- nRF Mesh 安卓应用可分配的单播地址范围为 0x0300~0x04FF,共 256 个可用地址;
- nRF Mesh iOS 应用可分配的单播地址范围为 0x0500~0x7FFF(单播地址的有效范围是 0x0001~0x7FFF),共 31488 个可用地址。
更多细节请参考《蓝牙网状规范 v1.0》第 3.4.2 节和第 3.4.3 节。
应用设置
对于 iOS 和安卓平台的 nRF Mesh 应用,配置过程较为简单(这些应用带有用户界面)。点击底部的 "设置" 按钮即可,截图如下:

对于 BlueZ,请参考分步指南《如何在树莓派 3 上部署 BlueZ v5.50 并使用(第二部分)》,了解如何在 BlueZ 上配置网络密钥、应用密钥、密钥索引、IV 索引和基础单播地址。
该分步指南还会介绍如何在树莓派 3(RPi3)上通过 meshctl 工具搭建新的(未配网)设备并完成配网。
只要上述参数(网络密钥、应用密钥、密钥索引、IV 索引、单播地址)可配置,无论配网器运行在智能手机还是嵌入式开发套件上,都能用于本演示中的新设备配网,以验证互操作性。
模型配置
完成配网器的配置后,准备新的(未配网)设备 ------ 它们将由上文提到的配网器完成配网。任何支持 "通用开关服务端" 和 / 或 "通用开关客户端" 模型的蓝牙网状网络开发套件,都可用于本演示。
在蓝牙 ® 世界大会的演示中,使用了 3 家不同厂商的开发套件:Nordic Semiconductor、Cypress 和 Silicon Labs。这些套件已支持 "通用开关服务端" 和 / 或 "通用开关客户端" 模型 ------ 无需编码,只需烧录示例固件即可。
你可以使用任意配网器为套件配网,使其成为网络中的一个节点。配网完成后,请确保:
- 若节点包含 "通用开关服务端":
- 将其 "通用开关服务端" 与你配置的应用密钥绑定;
- 让该 "通用开关服务端" 订阅某个组地址(有效范围为 0xC000~0xEFFF,我使用的是 0xC000)。
- 若节点包含 "通用开关客户端":
- 将其 "通用开关客户端" 与你配置的应用密钥绑定;
- 让该 "通用开关客户端" 向某个组地址(有效范围为 0xC000~0xEFFF,我使用的是 0xC000)发布消息。
完成上述模型配置后,即可使用 "通用开关客户端" 控制 "通用开关服务端" 的状态(开启或关闭),直观地实现 LED 灯的亮灭控制。
补充说明
在蓝牙世界大会之后,我有机会使用 STMicroelectronics 的套件。按照上述指南操作后,我成功将其加入了本演示。未来,我希望能在演示中使用更多种类的产品。
了解更多开发者资源,学习蓝牙网状网络的开发知识。