蓝牙 ® 网状网络互操作性验证开发者指南

如需要了解更多蓝牙相关知识,请点击下方连接

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 的套件。按照上述指南操作后,我成功将其加入了本演示。未来,我希望能在演示中使用更多种类的产品。

了解更多开发者资源,学习蓝牙网状网络的开发知识。

相关推荐
sunfove2 小时前
光网络的立交桥:光开关 (Optical Switch) 原理与主流技术解析
网络
Kevin Wang7275 小时前
欧拉系统服务部署注意事项
网络·windows
min1811234565 小时前
深度伪造内容的检测与溯源技术
大数据·网络·人工智能
汤愈韬5 小时前
Full Cone Nat
网络·网络协议·网络安全·security·huawei
zbtlink6 小时前
现在还需要带电池的路由器吗?是用来干嘛的?
网络·智能路由器
桌面运维家6 小时前
vDisk配置漂移怎么办?VOI/IDV架构故障快速修复
网络·架构
dalerkd6 小时前
忙里偷闲叙-谈谈最近两年
网络·安全·web安全
jianqiang.xue6 小时前
Telink IoT Studio开发环境搭建+tc_ble_single_sdk说明
物联网·泰凌微·telink
汤愈韬6 小时前
NAT ALG (应用层网关)
网络·网络协议·网络安全·security·huawei
TDengine (老段)7 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据