ESP-IDF ESP-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 协议栈实现,让多台 ESP 芯片设备组成可多跳传消息的物联网网络。本文基于官方功能清单与 esp_ble_mesh 组件源码逐项核对,带你拿到一张"能力—源码落点—示例"对照表,并走完从入网到点灯的最短路径,适合准备选型或首次开发 Mesh 项目的开发者。
能力速查表
| 能力 | 状态 | 源码落点 | 示例或文档 |
|---|---|---|---|
| PB-ADV / PB-GATT / PB-Remote 入网承载 | 已实现 | core/prov_node.c | onoff_models 示例 |
| 带外认证(OOB)与证书入网 | 已实现 | core/prov_node.c | 功能清单 |
| 远程配网(Remote Provisioning) | 依赖 v1.1 | core/prov_common.c | remote_provisioning 示例 |
| 快速配网(批量) | 已实现 | core/fast_prov.c | fast_provisioning 示例 |
| NVS 持久化 | 已实现 | core/storage/settings_nvs.c | ble-mesh-index |
| Relay 中继转发 | 已实现 | core/net.c | provisioner 示例 |
| 分段与重组(SAR) | 已实现 | core/transport.c | 功能清单 Networking 一节 |
| 密钥刷新与 IV 更新 | 已实现 | core/transport.c | 功能清单 Networking 一节 |
| Friend 与低功耗节点(LPN) | 已实现 | core/friend.c、core/lpn.c | ble-mesh-architecture |
| Proxy Server / Client | 已实现 | core/proxy_server.c、core/proxy_client.c | 功能清单 Networking 一节 |
| 定向转发、私有信标、子网桥接 | 依赖 v1.1 | core/access.c | directed_forwarding 示例 |
| 通用(Generic)模型 | 已实现 | models/client/generic_client.c、models/server/generic_server.c | onoff_models 示例 |
| 传感器、时间、场景模型 | 已实现 | models/client/sensor_client.c、models/server/sensor_server.c | sensor_models 示例 |
| 灯光模型(亮度/色温/色彩) | 已实现 | models/client/lighting_client.c、models/server/lighting_server.c | 功能清单 Lighting 一节 |
| DFU 固件升级 | 预览 | v1.1/dfu/ | 功能清单标注 Preview |
| Wi-Fi 共存 | 已实现 | esp_coex 组件 | wifi_coexist 示例 |
表中带"依赖 v1.1"的条目属于 Mesh v1.1 规范内容,具体行为以你所用 ESP-IDF 版本的官方文档为准。
如何完成入网配置
入网(Provisioning)解决的是"新设备如何被安全地接纳进网络",完成后节点才拥有网络身份。三种承载方式已实现:PB-ADV 走广播信道、PB-GATT 走 GATT 连接,适合带 Proxy 的场景,PB-Remote 则允许通过已入网节点为远处的设备配网。
- PB-ADV 无需连接,是大多数场景的默认选择
- 节点侧逻辑在 core/prov_node.c,Provisioner 侧在 core/prov_pvnr.c,公共部分集中在 core/prov_common.c,Provisioner 的管理入口是 core/pvnr_mgmt.c
- 认证可选 No OOB、静态 OOB 或输入/输出 OOB(带外信息,用于防中间人攻击),还支持基于证书的入网以及 v1.1 的增强型入网认证
批量入网:快速配网
快速配网面向"一次配几十上百台设备"的量产场景:Provisioner 先与第一台设备完成完整配网并缓存参数,之后批量下发,官方演示指标为 60 秒内完成约 100 台。实现位于 core/fast_prov.c,配套 fast_provisioning 示例拆成fast_prov_client与fast_prov_server两个工程。
掉电恢复:NVS 持久化
节点重启后无需重新配网,靠的就是把配网信息与配置写入 NVS。相关代码在 core/storage/ 目录,其中 settings_nvs.c 直接对接 NVS 分区,settings.c 提供读写抽象。
如何理解组网与消息传递
消息跨设备传递由中继(Relay)承担:开启 Relay 的节点收到不属于本节点的数据时原样转发,网络因此可以多跳延伸。底层报文在 core/net.c 封装与解析,应用层分包在 core/transport.c。
- 超过单包上限的长消息由分段重组(SAR,Segmentation and Reassembly)机制自动拆分与还原
- 网络被入侵后,用密钥刷新流程换新 Network Key;IV 更新流程则周期性改变加密上下文,两者都落在 transport 层
- 低功耗节点(LPN)周期性休眠,由好友节点(Friend)代为缓存与投递消息,分别见 core/lpn.c 与 core/friend.c
- 普通 BLE 设备不能收广播,可用 Proxy 通道经 GATT 接入:core/proxy_server.c 与 core/proxy_client.c
Mesh v1.1 组网增强
定向转发、私有信标与子网桥接三项均为 v1.1 内容,目前处于"依赖版本"状态:
- 定向转发只让路径上的节点参与转发,降低全网广播开销,directed_forwarding 示例演示了完整配置过程
- 私有信标通过随机化广播内容增强节点隐私
- 子网桥接允许消息跨子网流转
- 上述能力围绕 core/access.c 的访问层展开,具体边界以官方文档为准
应用层模型怎么按功能域选
模型(Model)是协议里"能发什么指令、能读什么状态"的契约。Client 侧与 Server 侧模型按功能域拆开存放:Client 在 models/client/,Server 在 models/server/,两者目录隔离、经事件回调解耦,因此多个 Client 模型可并发向不同节点发包而互不阻塞,与 Server 模型之间也没有互相等待。
通用模型:开关、电平与属性
通用域覆盖最常用的开关与调节场景,Client 与 Server 各含 8 种以上模型:OnOff(开关)、Level(电平)、Default Transition Time(过渡时间)、Power OnOff / Power Level(电源类)、Battery(电量)、Location(位置)以及属性类模型。Client 实现集中在 generic_client.c,Server 端在 generic_server.c。
传感器、时间与场景模型
传感读数、设备时钟、场景切换与定时任务分属三个功能域,各自有 Client/Server 成对实现,如 sensor_client.c 与 sensor_server.c、time_scene_client.c 与 time_scene_server.c,可直接跑 sensor_models 示例验证。
灯光模型与状态绑定
灯光是体量最大的模型家族:亮度(Lightness)、色温(CTL)、色彩(HSL/xyL)、调光曲线(LC)各有 Client 与 Server,其中 Server 还细分出 Setup 变体用于配置。实现见 lighting_client.c 与 lighting_server.c。两个通用机制值得注意:state_binding.c 让多个模型共享同一状态(例如灯光亮度与 Generic Level 联动),state_transition.c 负责过渡时间内状态平滑变化。
进阶与预览能力:DFU 与 Wi-Fi 共存
DFU(设备固件升级)是 v1.1 引入的 OTA 通道,官方功能清单中明确标注为预览(Preview),量产前需核对所用 ESP-IDF 版本的发布说明。v1.1/dfu/ 目录提供四个模型:固件更新(dfu_cli.c、dfu_srv.c,辅助文件 dfu_metadata.c 与 dfu_slot.c)与固件分发(dfd_cli.c、dfd_srv.c),后者支持固件经多个节点接力下发。
Wi-Fi 共存是 ESP 平台相对纯 BLE 芯片的差异化能力:同一颗芯片同时跑 Wi-Fi 与 BLE Mesh。wifi_coexist 示例给出完整工程,共存逻辑由 esp_coex 组件 提供。
最小上手路线
最短验证路径是"一配一控",全程不需要改协议栈代码:
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/es/esp-idf,用 ESP-IDF 工具链打开 examples/bluetooth/esp_ble_mesh/onoff_models/。 - 准备两块板:一块烧录
provisioner(配网器),另一块烧录onoff_server(开关节点),两者均用默认sdkconfig构建。 - 先配网:Provisioner 启动后扫描到未入网节点,执行配网;节点侧随后完成 Configuration 阶段,把 AppKey 与订阅绑定写好。
- 验证点灯:在 Provisioner 端向节点的 OnOff 模型发开/关指令,观察
onoff_server板载 LED 变化,即为跑通。 - 想加更多节点,把同一份
onoff_server固件烧到多块板重复配网即可;批量场景再换 fast_provisioning 示例。
详细步骤可对照 BLE_Mesh_Node_OnOff_Server_Example_Walkthrough.md 与 BLE_Mesh_Provisioner_Example_Walkthrough.md 两份官方教程。
选型建议与延伸阅读
ESP-BLE-MESH 适合需要多节点联动、可离线多跳、且希望与 Wi-Fi 共存的物联网场景,如照明、传感网关;限制在于模型以官方实现清单为准,私有扩展需自行定义厂商模型(可参考 vendor_models 示例),DFU 等 v1.1 能力上线前请先确认版本状态。延伸阅读:ble-mesh-architecture.rst 讲分层实现,ble-mesh-faq.rst 汇总常见问题,ble-mesh-terminology.rst 是术语表,组件总入口在 README.md。
【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考