4、Mesh网络基础配置:Provisioner与Node角色、UUID与网络密钥、配置广播与扫描、节点入网流程
好,咱们进入正题。这一章讲的是Mesh网络的基础配置,说白了就是怎么把一个个孤立的蓝牙设备,组织成一个能互相通信的网络。我刚开始接触Mesh的时候,觉得这东西挺玄乎,后来亲手配了几次才明白——核心就四个东西:角色、身份、密钥、流程。
4.1 两种核心角色:Provisioner 与 Node
Mesh网络里,设备分两种状态:还没入网的叫 未配网设备,入了网的就叫 节点。但这里有个特殊角色——Provisioner,它是整个网络的“管理员”。
| 角色 | 职责 | 典型设备 |
|---|---|---|
| Provisioner | 分配网络密钥、配置节点参数、管理网络 | 手机App、网关、专用配置工具 |
| 未配网设备 | 广播自身信息,等待被配置 | 灯、传感器、开关(出厂状态) |
| 节点 | 已入网,可收发Mesh消息 | 同上(已配置状态) |
我个人习惯把Provisioner想象成“人事部”——它负责给新员工(设备)办入职、发工牌(网络密钥)、分配工位(地址)。没有它,设备再多也是一盘散沙。
4.2 UUID:设备的“身份证”
每个蓝牙设备都有一个唯一的 UUID(通用唯一标识符)。在Mesh里,这个UUID是设备入网前的身份凭证。Provisioner就是通过扫描到的UUID,来识别哪个设备是它要配的。
UUID通常是128位的,长这样:
// 示例:一个标准的16字节UUID
0x12345678-9ABC-DEF0-1234-56789ABCDEF0
你想想看,如果现场有100个灯,每个灯的UUID都印在盒子上,你拿手机一扫就知道哪个灯是哪个。但实际项目中,很多厂商会把UUID写死,或者用芯片的MAC地址来生成。嗯,这里要注意——UUID不能重复,否则Provisioner会认错设备。
4.3 网络密钥:Mesh的“通行证”
Mesh网络的安全性,靠的是三层密钥体系。最核心的就是 网络密钥(NetKey)。所有节点必须持有同一个NetKey,才能在同一网络里通信。
| 密钥类型 | 作用范围 | 说明 |
|---|---|---|
| 网络密钥(NetKey) | 整个网络 | 所有节点共享,用于加密网络层数据 |
| 应用密钥(AppKey) | 特定应用 | 比如灯的控制指令用一套Key,传感器数据用另一套 |
| 设备密钥(DevKey) | 单个设备 | 仅Provisioner和该设备之间使用,配网完成后可丢弃 |
NetKey由Provisioner生成,在配网过程中分发给新设备。说白了,它就是Mesh网络的“Wi-Fi密码”——知道密码才能连进来。
4.4 配置广播与扫描:设备怎么“喊话”
未配网的设备,会通过蓝牙广播发送 未配网信标(Unprovisioned Device Beacon)。这个广播包里包含了设备的UUID和一些配网信息。Provisioner则负责扫描这些广播。
广播包的格式大致如下:
// 未配网设备广播包结构
- Beacon Type: 0x00 (未配网设备)
- Device UUID: 16字节
- OOB Information: 2字节(指示是否有带外认证信息)
- URI Hash: 可选(用于URI配网)
我建议你在调试时,用抓包工具(比如nRF Sniffer)看看这些广播。你会发现,设备每隔几百毫秒就喊一次:“我在这里!我的UUID是xxx!快来配我!”
Provisioner扫描到广播后,会发起配网请求。这里有个细节——扫描窗口和扫描间隔会影响发现速度。窗口太短,可能漏掉广播;太长,又费电。
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 扫描窗口 | 30ms | 每次扫描持续的时间 |
| 扫描间隔 | 100ms | 两次扫描开始之间的间隔 |
| 广播间隔 | 200ms | 设备发送广播的间隔 |
4.5 节点入网流程:从“陌生人”到“自己人”
整个入网流程,我习惯分成五步。下面这张图可以帮你快速理解:
具体每一步做什么,我拆开来说:
- 广播信标: 未配网设备周期性广播,告诉周围“我来了”。
- 邀请入网: Provisioner收到广播后,发送配网邀请,设备回复自己的配网能力(支持多少种认证方式、算法等)。
- 交换公钥: 双方通过ECDH算法交换公钥,建立安全通道。这一步是为了后续的密钥分发不被窃听。
- 认证: 根据设备能力,选择认证方式。比如输入PIN码、扫码、或者直接无认证(开发阶段常用)。
- 分发密钥: Provisioner把NetKey、AppKey、以及节点的单播地址发给设备。设备保存后,正式成为节点。
好了,这一章的内容就是这些。配网流程看起来步骤多,但实际跑起来也就一两秒的事。关键是理解每个环节的作用,这样出了问题才知道从哪查起。