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

认识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的方式转发消息。节点收到消息后除非 TTLTime 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 网络既具备强大的底层通信能力又保持了上层应用的灵活性和标准化。更多待补充。。。

相关文章:

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

基础参考: BLE MESH基础知识总结-CSDN博客 架构概述 传统蓝牙的Host/Controller架构,在Mesh协议栈中被完整保留了。 Mesh并非抛弃了这一经典架构,而是在其基础之上,新增了一套独立的网络层。简单来说,它是在同一个地基…...

(初阶) 从零开始:Tushare环境配置与基础数据获取

去年接触到量化投资这个概念时,我面对的第一个问题不是策略怎么写、回测怎么做,而是——数据从哪来?市面上主流的金融数据终端动辄上万一年,对个人量化爱好者来说实在吃不消。 幸运的是,我遇到了Tushare。这是一个完全…...

四十三、网络编程(下)——TCP 编程与 HTTP 入门

😫 痛点引入:UDP 发出去就不管了,万一丢包怎么办?文件上传必须每字节都不能少! TCP 协议应运而生——面向连接、可靠传输、三次握手确认!☎️ 下篇手写 TCP 客户端-服务端、文件上传、多线程并发服务器&…...

梳理一下前端模块化规范:CommonJS ESM AMD CMD UMD

前端模块化规范在发展过程中出现过多种规范,大多开发者都对这些名词有个印象,但问起来又有些模糊。本文的目的是做一个梳理,帮助记忆。先上一张对比表:类型核心定位语法关键词适用环境特点CommonJS(CJS)Nod…...

AUTOSAR: RTE概述

类比:RTE就类似于电话接线员(向他人打电话先将电话信息传给接线员,再由接线员传给被接受人)。RTE管理SWC与SWC之间、SWC与BSW之间的通信信息。比如,SWC1要将信息传给SWC2,可SWC2正在执行任务,RT…...

【PAT甲级真题】- Elevator(20)

题目来源 Elevator 题目描述点击链接自行查看 注意点: 停在同一层时多等5秒 Description The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will…...

告别Keil默认丑字体!手把手教你配置VS Code同款暗黑主题(附global.prop文件)

告别Keil默认丑字体!手把手教你配置VS Code同款暗黑主题(附global.prop文件) 作为一名嵌入式开发者,每天面对Keil那套灰白单调的编辑器界面,眼睛的疲劳感总是来得特别快。尤其当你在VS Code的暗黑主题下写完前端代码&a…...

别再复制粘贴了!程序员必备的Unicode汉字符号速查表(含一键复制)

程序员必备的Unicode汉字符号高效输入指南 1. 为什么需要掌握Unicode汉字符号? 在日常开发工作中,我们经常需要在代码注释、文档说明或UI界面中添加一些特殊符号来增强表达效果。比如用箭头符号表示流程走向,用数学符号展示公式逻辑&#xff…...

鸿蒙NEXT开发从零到一:手把手搭建开发环境并发布第一个应用

系列文章:鸿蒙NEXT开发实战系列 -- 第1篇(共5篇) 适合人群:零基础入门,或有 Android/iOS 经验的开发者 开发环境:DevEco Studio 5.0.5 | HarmonyOS NEXT (API 14) 阅读时长:约30分钟 上一篇&…...

AS5600磁编码器避坑指南:从I2C通信失败到角度跳变的5个常见问题及解决方法

AS5600磁编码器实战避坑手册:5个高频故障的工程级解决方案 磁编码器在电机控制、机器人关节定位等场景中扮演着关键角色,而AS5600凭借其高性价比和I2C接口的便利性成为许多工程师的首选。但在实际部署中,从I2C通信失败到角度跳变等问题常常让…...

吃透C++ AVL树:原理+完整实现,新手也能轻松上手

文章目录 前言一、先搞懂:什么是AVL树?核心特性是什么?二、AVL树的C完整实现(新手可直接复制运行)三、AVL树的删除操作(可选,进阶内容)四、AVL树的性能与应用场景五、新手常见误区&a…...

为AI编码助手集成sh-guard:语义化Shell命令安全防护实践

1. 项目概述:为AI编码助手装上“安全刹车”最近在折腾各种AI编码助手,从Cursor到Claude Code,再到本地部署的Codex,效率提升确实肉眼可见。但用久了,心里总有点发毛——这些AI助手动动嘴皮子就能执行rm -rf、curl | ba…...

别再让Excel导入报错!用EasyExcel+自定义监听器搞定6种数据校验(附完整代码)

用EasyExcel构建企业级Excel导入校验体系的实战指南 每次运营人员上传Excel表格时,后台服务就像在拆盲盒——你永远不知道会收到格式混乱的数据、缺失的字段还是重复的记录。传统的数据校验方式往往在全部读取完成后才进行验证,这不仅浪费服务器资源&…...

开源机械爪项目全解析:从设计到ROS集成

1. 项目概述:一个开源协作的“机械爪”项目最近在GitHub上闲逛,发现了一个挺有意思的项目,叫lambertse/openclaw-lambertse-team。光看名字,你可能会有点懵,这“openclaw”是啥?“lambertse-team”又是谁&a…...

从码农到架构师:Boss-Skill项目揭示全栈开发者进阶之路

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫boss-skill。乍一看这个标题,你可能会联想到职场生存指南或者游戏里的BOSS技能。但实际上,这是一个面向开发者的、旨在提升“老板级”开发效率与工程能力的工具集或知识库。作为…...

Token需求狂飙千倍,22亿热钱涌向这家AGI Infra头号玩家

衡宇 发自 凹非寺量子位 | 公众号 QbitAI在今年的GTC大会上,黄仁勋宣告:英伟达已不再局限于一家芯片或 GPU 公司,而是全面转型为全栈式 AI 基础设施公司。这让“AI基础设施”再度站在了行业的风口中央。事实上,早在风口来临之前&a…...

从PasteJacker工具看剪贴板劫持:在Kali Linux上复现一次无害攻击(仅供学习)

从PasteJacker工具看剪贴板劫持:在Kali Linux上复现一次无害攻击(仅供学习) 剪贴板劫持作为一种隐蔽性极强的攻击手段,近年来在网络安全事件中频繁出现。这种攻击利用了用户对复制粘贴操作的天然信任,通过篡改剪贴板内…...

别再混淆WT和WO了!图解SAP EWM仓库任务与订单的核心逻辑与配置实例

别再混淆WT和WO了!图解SAP EWM仓库任务与订单的核心逻辑与配置实例 在SAP EWM的世界里,仓库任务(WT)和仓库订单(WO)就像快递行业的包裹与派送路线——前者承载具体货物信息,后者规划执行路径。许…...

别再傻傻分不清!医疗器械UDI码里的DI和PI,到底怎么用?

医疗器械UDI码实战指南:DI与PI的精准解析与应用 在医疗器械行业,UDI码就像产品的"身份证",而其中的DI和PI则是这张身份证上最关键的信息区块。许多从业者虽然每天都在扫描这些条形码,却未必真正理解如何高效利用这两组数…...

别再死记硬背了!用Wireshark抓包实战,5分钟搞懂PCIe配置空间的BAR寄存器

用Wireshark透视PCIe配置空间:BAR寄存器实战解析手册 第一次接触PCIe设备的BAR寄存器时,我盯着那些十六进制数值看了整整一个下午。直到在Wireshark里亲眼看到BIOS通过TLP数据包与设备协商地址空间的过程,那些抽象的概念才突然变得鲜活起来。…...

Stackmoss:构建生产级AI原生应用的一体化框架实战指南

1. 项目概述与核心价值最近在开源社区里,Stackmoss 这个项目引起了我的注意。它不是一个简单的工具库,而是一个旨在构建“AI原生应用”的完整技术栈。简单来说,它想解决的问题是:当你想开发一个真正由AI驱动、而非仅仅调用API的应…...

别再只盯着RGB了!手把手教你用奥比中光Astra SDK获取并可视化深度图(VS2022环境配置)

深度视觉开发实战:用奥比中光Astra SDK解锁3D感知新维度 当RGB摄像头已经成为智能设备的标配,另一种"视觉"正在悄然改变我们与机器交互的方式——深度感知。不同于传统摄像头记录的色彩信息,深度相机捕捉的是每个像素点到相机的实际…...

IrisSupportLib线程管理与事件处理机制深度解析

1. IrisSupportLib线程管理机制解析在复杂系统开发中,线程管理往往是最具挑战性的环节之一。IrisSupportLib通过一系列精心设计的接口,为开发者提供了细粒度的线程控制能力。我们先来看最核心的线程终止接口:1.1 stopThreads()的工程实践stop…...

Jetson Xavier NX上编译OpenCV 4.5.3支持CUDA加速,保姆级避坑指南(含libjasper-dev问题解决)

Jetson Xavier NX上编译OpenCV 4.5.3支持CUDA加速的完整避坑指南 作为一名长期在边缘计算设备上部署计算机视觉方案的开发者,我深知在Jetson Xavier NX这类嵌入式平台上编译OpenCV的痛点。本文将分享我多次实战后总结的保姆级避坑方案,特别是针对CUDA加速…...

FPGA流水线FFT IP核生成器:dblclockfft配置与实战指南

1. 项目概述:一个高度可配置的流水线FFT IP核生成器最近在折腾一个FPGA上的信号处理项目,需要用到快速傅里叶变换(FFT)这个核心算法。大家都知道,FFT是数字信号处理的基石,从音频处理到通信解调&#xff0c…...

别再死磕神经网络了!用Python+scikit-fuzzy手把手教你实现一个模糊恒温控制器

用Pythonscikit-fuzzy实现智能恒温控制:从模糊逻辑到落地实践 想象一下,你精心布置的热带鱼缸需要保持26℃的恒定水温。传统温控器要么全功率加热直到达到阈值(导致温度波动),要么需要复杂的PID参数调校。而模糊控制却…...

SOAFEE:云原生技术如何重塑汽车嵌入式软件开发

1. 项目概述:当汽车软件遇上云原生如果你在汽车电子或嵌入式软件领域摸爬滚打过几年,一定对“开发-测试-集成-标定”这个漫长且昂贵的循环深有体会。一套新的ADAS算法,从云端写好代码,到最终能在实车的域控制器上稳定、安全地跑起…...

从硬件工程师视角看安卓手机:可编程平台、传感器融合与生态系统

1. 从“能打电话就行”到“数字瑞士军刀”:我的安卓手机深度体验与思考作为一名在电子设计自动化(EDA)和可编程逻辑领域摸爬滚打了二十多年的工程师,我的工具箱里塞满了各种开发板、逻辑分析仪和仿真软件。长久以来,我…...

HST-Bench:人类解题耗时评估数据集构建与应用

1. 项目背景与核心价值去年参与某智能体评估项目时,我们团队曾陷入一个尴尬境地——现有基准测试集无法真实反映人类解决问题的实际耗时。当算法在标准数据集上跑出"5秒完成"的漂亮成绩时,实际业务场景中用户可能需要花费3分钟才能解决相同问题…...

旧电脑别扔!手把手教你用U盘把OpenWrt刷成软路由(保姆级教程)

旧电脑重生计划:用OpenWrt打造高性能软路由全指南 家里那台积灰多年的旧笔记本或迷你主机,除了卖废铁还能做什么?今天我要分享一个让老旧硬件重获新生的绝佳方案——将它们改造成专业级软路由。不同于普通家用路由器,基于OpenWrt的…...