ESP-BLE-MESH:如何从单颗 BLE 设备到完整 Mesh 组网——能力、源码与示例的完整指南
2026/9/20 18:13:43 网站建设 项目流程

ESP-BLE-MESH:如何从单颗 BLE 设备到完整 Mesh 组网——能力、源码与示例的完整指南

【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf

组件定位与本文范围

ESP-BLE-MESH 是 ESP-IDF 内置的蓝牙 Mesh 协议栈组件,面向多节点组网与低功耗 BLE 设备开发者。本文回答一个问题:每项 Mesh 能力对应哪个源码文件、哪个可运行示例。

能力地图:按开发者心智分组的完整清单

按"入网与密钥安全 / 组网与消息可达 / 低功耗与代理接入 / 节点管理与升级"四个开发者最常关心的问题分组,能力与源码的对应关系如下:

分组能力一句话说明(解决什么问题)源码位置相关示例
入网与密钥安全标准配网(PB-ADV / PB-GATT / PB-Remote)让未配网设备(Unprovisioned Device)安全入网;三种承载分别为广播信道、GATT 连接、已入网节点中继core/ 的 prov_node.c、prov_pvnr.c、prov_common.cprovisioner
入网与密钥安全OOB 带外认证入网时防中间人攻击,可选 No / Static / Output / Input OOB同上同上
入网与密钥安全基于证书的配网需要强身份验证场景的证书级校验同上同上
入网与密钥安全快速配网60 秒内批量配网多达 100 台设备core/fast_prov.cfast_provisioning
入网与密钥安全远程配网(Mesh v1.1)已入网节点替远处的未配网设备完成入网v1.1/ 的 esp_ble_mesh_rpr_model_api.cremote_provisioning
入网与密钥安全Key Refresh 密钥刷新网络疑似被入侵后整体更换 NetKey(网络密钥)core/ 的 prov_pvnr.c、cfg_cli.cprovisioner
入网与密钥安全IV Index 更新加密计数器随网络运行递增,保证长期唯一性并防重放core/ 的 net.c、beacon.c同上
组网与消息可达Relay 中继每个节点替别的节点转发 PDU,让消息多跳跨越无线覆盖盲区core/net.c、core/transport.conoff_models
组网与消息可达SAR 分段与重组长消息超过单包 MTU 时切段传输、对端重组core/net.conoff_models
组网与消息可达Directed Forwarding 定向转发(v1.1)仅路径上的节点转发定向消息,其余节点不处理v1.1/ 的 esp_ble_mesh_df_model_api.cdirected_forwarding
组网与消息可达Subnet Bridge 子网桥(v1.1)跨子网转发消息v1.1/ 的 esp_ble_mesh_brc_model_api.c—(经 v1.1 API 调用)
组网与消息可达Wi-Fi 共存同一射频上 Wi-Fi 与 Mesh 分时共享esp_coex 配合 core/wifi_coexist
低功耗与代理接入Friend 好友节点替低功耗节点缓存消息,节点醒着时再取走core/friend.conoff_models
低功耗与代理接入LPN 低功耗节点周期性休眠,经 Friend 收发消息,省电台时间core/lpn.conoff_models
低功耗与代理接入Proxy Server / Client只会 BLE GATT、不懂 Mesh 广播的设备经连接接入网络core/ 的 proxy_server.c、proxy_client.cprovisioner(手机应用经 Proxy 连接节点)
低功耗与代理接入Private Beacon 私有信标(v1.1)随机化信标内容,降低被被动跟踪的可能v1.1/ 的 esp_ble_mesh_prb_model_api.c—(经 v1.1 API 调用)
低功耗与代理接入On-Demand Private Proxy(v1.1)按需建立的私有代理链路v1.1/ 的 esp_ble_mesh_odp_model_api.c—(经 v1.1 API 调用)
节点管理与升级Configuration Server / Client管理模型订阅/发布、AppKey 与 NetKey 绑定core/ 的 cfg_srv.c、cfg_cli.conoff_models、provisioner
节点管理与升级Health Server / Client设备健康状态上报与查询core/ 的 health_srv.c、health_cli.c—(经 API 调用)
节点管理与升级NVS 持久化配网信息与配置写入 NVS,重启后免配网恢复core/storage/ 的 settings_nvs.conoff_models
节点管理与升级Firmware Update(v1.1,Preview)经 Mesh 网络升级节点固件v1.1/dfu/ 的 dfu_cli.c、dfu_srv.c、dfu_metadata.c—(预览能力,无官方示例)
节点管理与升级Firmware Distribution / MBT(v1.1,Preview)固件经多个节点接力分发,单节点带宽不足也能传完v1.1/dfu/ 的 dfd_cli.c、dfd_srv.c;v1.1/mbt/ 的 blob_cli.c、blob_srv.c—(预览能力,无官方示例)

注:标 "—" 的能力在 examples/bluetooth/esp_ble_mesh/ 中没有独立示例工程,验证方式是对应 API 头文件(api/core/ 与 v1.1/api/)。

高频能力拆解

设备入网(Provisioning):从广播发现到密钥写入

问题场景:新设备手里没有任何密钥,如何证明身份并入网;Provisioner(把未入网设备配入 Mesh 网络的节点)如何防止中间人把伪造节点塞进网络。

原理:入网走三种承载之一——广播信道(PB-ADV)、GATT 连接(PB-GATT)或经已入网节点中继(PB-Remote);过程中双方做身份互验,可按需启用 OOB 带外认证或基于证书的配网。成功后节点拿到 NetKey、单播地址等全部密钥,并写入 NVS 持久化。

源码:节点侧 prov_node.c,Provisioner 侧 prov_pvnr.c,公共逻辑 prov_common.c,Provisioner 管理 pvnr_mgmt.c;远程配网模型见 esp_ble_mesh_rpr_model_api.c。

验证:烧录 onoff_server 与 provisioner,用手机上的第三方 Mesh 应用经 Proxy 连接节点,依次执行 Identify(标识目标设备)与 Provision(配网)。现象:应用展示节点初始组配置数据(Composition Data),串口打印配网成功;断电重启后节点仍保持入网状态,无需再次配网。

消息传输与密钥维护:Relay、SAR 与 Key Refresh / IV Update

问题场景:两个节点不在彼此无线电直连范围内,消息如何到达;一条长消息超过单包 MTU 如何传完;网络长期运行后密钥如何轮换、如何抵抗重放。

原理:Relay 让入网节点为其他节点转发 PDU,消息因此可以多跳;SAR(Segmentation and Reassembly,分段与重组)把长消息切成多个分段、由对端重组;Key Refresh 由 Provisioner 向全网分发新 NetKey;IV Index 周期性递增,维持网络加密的唯一性。

源码:net.c 负责 Relay 与 SAR,transport.c 处理传输层分段,prov_pvnr.c 与 cfg_cli.c 承载密钥刷新与 IV 更新的触发,beacon.c 维护 IV Index 相关的 Beacon 信息。

验证:在 onoff_models 中让两个节点超出直连距离并开启 Relay,消息仍可达;用 provisioner(内含 Configuration Client)发起密钥刷新后,全节点在新旧 NetKey 切换过程中保持正常收发。

BLE 设备接入与低功耗:Proxy、Friend 与 LPN

问题场景:手机只有 BLE GATT 能力、不解析 Mesh 广播,如何参与网络;电池供电的传感器不可能全天候监听信道。

原理:Proxy Server 在节点上开放 GATT 通道,Proxy Client(如手机)经连接收发消息,不依赖广播信道;Friend 节点为名下 LPN(Low Power Node,低功耗节点)缓存消息,LPN 周期性唤醒从 Friend 取消息后继续休眠。

源码:proxy_server.c、proxy_client.c、friend.c、lpn.c;低功耗 API 入口在 esp_ble_mesh_low_power_api.c。

验证:provisioner 示例中手机经 Proxy 连接节点后直接下发指令,串口可见消息处理日志;节点侧在工程配置中开启 LPN 选项后,日志呈周期性 Poll 取消息行为,其余时间保持休眠。

Client/Server 模型全景:标准模型成对提供的能力矩阵

蓝牙 Mesh 的能力由 Model(模型)承载,每个模型按 Client / Server 成对提供:Client 发起操作,Server 持有状态并响应。ESP-BLE-MESH 的标准模型实现位于 models/client/ 与 models/server/,API 入口在 api/models/。按功能域分组如下:

功能域模型(Client / Server)一句话用途源码位置相关示例
GenericOnOff、Level、Default Transition Time开关、等级值、全局过渡时间的设置与读取generic_client.c、generic_server.conoff_models
GenericPower OnOff(含 Setup)、Power Level(含 Setup)上电开关状态与功率等级同上
GenericBattery、Location(Location 含 Setup)电量读取、物理位置读写同上
GenericProperty Client;User / Admin / Manufacturer Property Server设备属性读写models/server/ 的 generic_server.c
LightingLight Lightness(含 Setup)绝对亮度调节lighting_client.c、lighting_server.c
LightingLight CTL、Light CTL Temperature(含 Setup)色温调节同上
LightingLight HSL、Hue、Saturation(含 Setup)HSL 色彩空间调节同上
LightingLight xyL(含 Setup)CIE 1931 色坐标与亮度同上
LightingLight LC(含 Setup)逻辑级别到物理级别映射同上
SensorSensor Client;Sensor、Sensor Setup Server传感器数据订阅与属性配置sensor_client.c、sensor_server.csensor_models
Time and ScenesTime、Scene、Scheduler(Server 侧各含 Setup)时间同步、场景切换与定时任务time_scene_client.c、time_scene_server.c

两个配套机制:state_binding.c 做状态绑定,让多个模型共享同一份状态并同步变化(例如 Light Lightness 与 Generic Level 联动);state_transition.c 做状态迁移,在过渡时间内对目标值平滑插值,输出渐变而非跳变。

Foundation Models(系统级模型)

Foundation 模型负责网络管理与设备配置,同样按 Client / Server 成对提供。其中 Configuration Server 的上层消息使用 DevKey 加密而非 AppKey,配网完成后无需再为其绑定 AppKey。

能力一句话用途源码位置相关示例
Configuration Server / Client模型订阅/发布、AppKey 与 NetKey 管理core/ 的 cfg_srv.c、cfg_cli.conoff_models、provisioner
Health Server / Client健康状态上报与查询core/ 的 health_srv.c、health_cli.c
Remote Provisioning Server / Client远程入网(Mesh v1.1)v1.1/ 的 esp_ble_mesh_rpr_model_api.cremote_provisioning(rpr_client / rpr_server / unprov_dev 三角色)
Directed Forwarding Config Server / Client配置定向转发(v1.1)v1.1/ 的 esp_ble_mesh_df_model_api.cdirected_forwarding
Bridge Config Server / Client子网桥接配置(v1.1)v1.1/ 的 esp_ble_mesh_brc_model_api.c
Private Beacon Server / Client私有信标配置(v1.1)v1.1/ 的 esp_ble_mesh_prb_model_api.c
On-Demand Private Proxy Server / Client按需私有代理(v1.1)v1.1/ 的 esp_ble_mesh_odp_model_api.c
SAR Config Server / Client分段重组参数配置(v1.1)v1.1/ 的 esp_ble_mesh_sar_model_api.c
Solicitation PDU RPL Config Server / Client请求 PDU 重放保护列表配置(v1

【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询