当前位置: 首页 > news >正文

认识BLE MESH架构和实际开发过程

基础参考:

BLE MESH基础知识总结-CSDN博客

架构概述

传统蓝牙的Host/Controller架构,在Mesh协议栈中被完整保留了。Mesh并非抛弃了这一经典架构,而是在其基础之上,新增了一套独立的网络层。简单来说,它是在同一个地基上,盖了另一栋楼。

让我们通过架构图来清晰地展示这一点:

从图中可以清晰地看到,Mesh协议栈与传统BLE协议栈在主机层并驾齐驱,但它们都通过同一个 HCI 接口,共享底层的控制器和物理层硬件。

🧱 “主机-控制器”架构是蓝牙的基石

这个架构是蓝牙技术的核心。

  • 主机 (Host):这是系统的“大脑”,运行在设备的主CPU上。它负责处理各种高级协议,比如你熟知的 GAP(通用访问协议)和 GATT(通用属性协议)。对于Mesh来说,它的协议栈(网络层、传输层等)也全部运行在这一层

  • 控制器 (Controller):这是系统的“耳朵和嘴巴”,通常集成在蓝牙芯片中。它负责底层的物理工作:按照严格的时间要求在2.4GHz频段上收发无线电信号。

  • HCI (主机控制器接口):这是连接“大脑”和“耳朵”的标准通道。正是因为这个标准接口的存在,Mesh协议栈才能和传统BLE协议栈一样,通过相同的方式向控制器发送指令。

🆚 Mesh与传统BLE在架构下的分工

在这套统一的架构下,两者的分工非常明确:

层级传统 BLEBLE Mesh说明
应用层耳机、手环、鼠标等应用逻辑灯、开关、传感器等模型 (Model)逻辑这是开发者编写业务代码的地方。
主机层GAP/GATT协议,管理连接Mesh协议栈(网络层、传输层等),管理网络消息转发Mesh协议栈和传统BLE协议栈在主机层是并列的。
主机控制器接口 (HCI)标准HCI命令,如LE Create Connection相同的HCI命令,主要使用LE Set Ext Scan/Adv Enable来收发广播包两者复用同一套HCI接口,这是关键。
控制器层执行连接、更新参数等链路层任务执行广播、扫描等链路层任务控制器“不知道”自己是在为传统BLE还是Mesh服务,它只执行命令。

📡 Mesh是如何复用BLE控制器的?

Mesh网络主要依赖广播 (Advertising)机制进行通信。当Mesh协议栈(在主机层)需要发送一条消息时,它并不是发明了一种新的调用方式,而是通过标准的HCI命令,比如LE Set Extended Advertising Enable,来指示BLE控制器去广播一个特定的数据包。

所以,对于底层的BLE控制器而言,它看到的工作负载依然是自己熟悉的:广播、扫描、建立连接(为GATT承载)。它完全不感知自己传输的数据是来自一个传统BLE应用,还是一个复杂的Mesh网络。

Mesh协议栈本身并不是一个独立的“方向”,它是构建在经典的Host/Controller架构之上的一个“高级应用层游戏规则”。它利用标准HCI接口调用控制器的广播能力,实现了一套去中心化的设备组网。

Mesh协议栈和各层模型

Mesh 协议栈是一个结构清晰、分工明确的多层架构。它构建在 BLE 核心协议之上,在主机(Host)层内部新增了完整的网络、传输和应用层。

下面这张图清晰地展示了 BLE Mesh 协议栈的分层结构,以及每一层在整个架构中的位置和作用:


📡 第一层:物理与承载层

承载层定义了 Mesh 消息如何在物理上传输,包含两种方式:

承载类型通信方式使用场景
广播承载 (Advertising Bearer)使用 BLE 的广播信道发送不可连接广播包节点与节点之间的主要通信方式
GATT 承载 (GATT Bearer)通过 BLE 连接,使用代理协议传输让普通手机(不支持 Mesh 广播)接入网络

BLE 控制器直接复用标准的 BLE 物理层(2.4GHz)和链路层。这意味着 Mesh 没有定义新的物理层,而是“寄生”在 BLE 之上。


🌐 第二层:网络与传输层

网络层 (Network Layer)

这是 Mesh 网络的核心,负责:

  • 消息中继 (Relay):采用基于泛洪(Flooding)的方式转发消息。节点收到消息后,除非 TTL(Time to Live)为 0,否则会继续广播

  • 地址解析:识别消息是发给自己的(单播)、一组设备的(组播)还是所有人

  • 加密与认证:使用网络密钥(NetKey)对网络层消息进行加密

底层传输层 (Lower Transport Layer)

负责数据的分段与重组

  • 当 Mesh 消息超过单包容量时,拆分成多个数据块发送

  • 接收端将分段消息重新组装

  • 在朋友关系中,朋友节点在此层为低功耗节点暂存消息队列

上层传输层 (Upper Transport Layer)

负责:

  • 应用数据加解密:使用应用密钥(AppKey)对应用层数据进行端到端加密

  • 传输控制消息:管理心跳消息(Heartbeat)、朋友关系建立等

访问层 (Access Layer)

定义上层应用如何使用传输层:

  • 数据格式定义:规定应用数据应该如何打包

  • 发布/订阅管理:处理模型(Model)的消息发布和订阅关系

  • 访问控制:验证消息是否使用了正确的密钥


💡 第三层:应用与模型层

模型层 (Model Layer)

模型定义了设备的具体功能,是应用开发者直接打交道的层。规范的摘要如图所示:

[image-1] 模型包含状态和操作,并以 Client/Server 的形式暴露给其他节点。

每个模型分为三类:

类型功能控制方式
Server Model包含状态,维护设备当前状态(如“灯是开的”)被动接收指令并执行
Client Model读取和修改 Server 的状态主动发出控制指令
Setup Server配置参数的 Server(与 Server Model 共享状态,但使用不同的应用密钥)供配置工具进行高级设置

多个模型组织。一个节点可以包含多个模型,这些模型被组织成元素(Element)。每个元素拥有独立的单播地址,代表节点的一个“功能面”。例如,一个节点可以同时拥有一个“Light Server”用于控制灯光,和一个“Sensor”用于报告温度。

基础模型层 (Foundation Model Layer)

提供网络配置和管理的标准模型,是所有节点必须支持的基础:

  • 配置模型 (Configuration Model):用于配网、地址分配、开启中继/代理/朋友功能等

  • 健康模型 (Health Model):监控节点健康状态(如电量不足、故障),用于故障报告

SIG 定义的模型类型

以下是 Mesh 设备常见的一些标准模型分类:

类别核心模型示例设备应用场景(举例)
基础模型Configuration ServerHealth Server所有节点必备,负责入网配置和故障上报
通用模型Generic OnOff ServerGeneric Level Server基础二值开关、调光/调温/音量等连续调节
照明模型Light Lightness ServerLight CTL Server智能灯泡的亮度、色温、XYZ 颜色控制
传感器模型Sensor Server温湿度传感器、人体传感器等数据上报
时间与场景模型Time ServerScene Server定时任务、一键场景切换
厂商模型 (Vendor Model)厂商自定义操作码私有功能,当标准模型无法覆盖需求时使用

状态绑定机制

模型中有一个特殊机制——状态绑定。当一个状态发生变化时,会要求另一个相关状态也随之更新。例如,调节色温时,人眼的感知亮度会随之变化,可设置Light CTL Temperature状态与Light Lightness状态绑定,系统自动进行亮度的非线性补偿,从而保证用户调节色温时,主观感受的亮度保持恒定。


一个智能灯泡的实现实例

Nordic 提供了一个演示示例,展示了一个节点如何组合多个模型:

功能实现的模型绑定的硬件
开关控制Generic OnOff ServerLED1(开/关)
亮度调节Light Lightness ServerLED3(亮度变化)
色温调节Light CTL ServerLED4(色温变化)
按钮输入Generic OnOff Client(发布指令)Button1、Button2
厂商私有Vendor ModelLED2(私有功能)

这个例子中的“Client”和“Server”同时存在于一个物理设备上。这在 BLE Mesh 中是合法且常见的,它们负责不同功能模块的协作。

💎 总结

Mesh 协议栈与各层模型的关系可以这样理解:

  • 协议栈是“骨架”:承载层、网络层、传输层定义了数据的“打包”和“运输”规则

  • 模型是“血肉”:模型层定义了设备的功能和行为,是应用开发者编程的接口

开发者主要工作在模型层,通过调用预定义的标准模型(如开、关、调光、上报温度),或自定义厂商模型,来实现具体的产品功能。这种分层设计让 Mesh 网络既具备强大的底层通信能力,又保持了上层应用的灵活性和标准化。

更多待补充。。。

http://www.jsqmd.com/news/778921/

相关文章:

  • Gantry框架深度解析:轻量级Go Web开发实践与架构设计
  • 鸿蒙NEXT开发从零到一:手把手搭建开发环境并发布第一个应用
  • 2026年南京市实测手表回收商家,亲测推荐TOP5分享 - 速递信息
  • DAY .2 数据结构之反转链表2.牛客网BM2
  • 别再死记硬背了!用Wireshark抓包实战,5分钟搞懂PCIe配置空间的BAR寄存器
  • SEO站群系统源码 SEO优化系统 单页关键词排名网站源码
  • 从奈奎斯特图到相位裕度:一个更直观的视角,理解运放稳定性分析与补偿
  • 从分光计到光谱仪:动手测量汞灯谱线,带你理解折射率测定的物理意义
  • 别再傻傻分不清!医疗器械UDI码里的DI和PI,到底怎么用?
  • 别再复制粘贴了!程序员必备的Unicode汉字符号速查表(含一键复制)
  • RK3568双摄切换黑屏?手把手教你用Logcat和MediaCtl定位Pipeline链接问题
  • SpringBoot 国密 SM4 配置加密(自动解密处理器实现)
  • 创业7年,从树莓派外壳到自研电子秤,一个硬件工程师的“断臂求生”复盘
  • Budi:本地优先的AI编码助手成本分析工具,精准追踪与优化开发成本
  • 团队冲刺个人任务认领
  • 别再混淆WT和WO了!图解SAP EWM仓库任务与订单的核心逻辑与配置实例
  • 别再瞎调batch_size了!PyTorch训练中GPU显存与利用率的真实关系(附MMDetection实测数据)
  • FPGA大型项目管理:模块化设计与7Circuits工具实践
  • AI搜索时代内容优化实战:GEO工具包审计与结构化数据生成指南
  • 别再问‘两个坐标点相距多远’了!用Java/JavaScript/Python三分钟搞定经纬度距离计算
  • 免费降ai率全攻略:4个手动技巧+5款降ai工具【实测好用】 - 殷念写论文
  • 告别vcanconf!Vector硬件配置新工具vHardwareManager保姆级上手教程
  • 告别Keil默认丑字体!手把手教你配置VS Code同款暗黑主题(附global.prop文件)
  • 国产化CMS选型实录:从零部署PageAdmin到麒麟系统的实战笔记
  • 别再死磕神经网络了!用Python+scikit-fuzzy手把手教你实现一个模糊恒温控制器
  • 2026三亚目的地婚礼推荐榜TOP5,每场都惊艳 - 速递信息
  • 从PasteJacker工具看剪贴板劫持:在Kali Linux上复现一次无害攻击(仅供学习)
  • 基于Ollama与FastAPI构建本地私有化语音AI助手实战指南
  • 别再手动导数据了!巧用ICC II的ECO Fusion,把PT和StarRC的活一键搞定
  • 树莓派5 NVMe SSD与2.5GbE扩展板深度评测