第一章低功耗蓝牙ble入门(一)-----蓝牙框架和常见概念

张开发
2026/4/3 19:14:51 15 分钟阅读
第一章低功耗蓝牙ble入门(一)-----蓝牙框架和常见概念
系列文章目录第一章 低功耗蓝牙ble入门一-----蓝牙框架和常见概念【ble host部分的基本内容广播、扫描、连接建立、服务、特征发现、数据交换、GAP、GATT、ATT、安全与配对、功耗】第二章 低功耗蓝牙ble入门二-----透传第三章 低功耗蓝牙ble入门三广播第四章 低功耗蓝牙ble入门四扫描第五章 低功耗蓝牙ble入门五连接、MTU和服务发现第六章 低功耗蓝牙ble入门六GAP、GATT、ATT第七章 低功耗蓝牙ble入门七服务、特征、特征值、读/写/notify/indicate第八章 低功耗蓝牙ble入门八安全与配对【配对、绑定、加密、认证】第九章 低功耗蓝牙ble入门九数据长度扩展与LE 2M PHY第十章 低功耗蓝牙ble入门十多角色与广播扩展第十一章 低功耗蓝牙ble入门十一功耗分析与优化实验一 ble模组作为主机连接另一个做从的ble实验二 ble模组作为从机为手机蓝牙APP提供服务实验三系统中既做主又做从的ble开发以智能家居为例终章 移植蓝牙协议栈并深入学习蓝牙协议栈文章目录系列文章目录前言一、ble基础概念二、通过nrf-connect查看ble模组信息可以在手机浏览器搜索nrf-connect下载安装包并安装nrf-connect。 网站[https://www.nordicsemi.cn/tools/nrfconnectsdk/](https://www.nordicsemi.cn/tools/nrfconnectsdk/) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4fba8f722b0742cd9a1996e75c721b00.png)**1-nrf-connect的扫描页面看广播包的数据****2-手机app连接蓝牙模组查看ble的服务**三、GAP、GATT、ATT、UUID、SM的简述下节预告前言2026-04-02 作者yrx020307原创️ 标签#ble #蓝牙 #物联网 #嵌入式 本章导读本章将带你从零认识低功耗蓝牙BLE内容包括蓝牙版本与 BLE 的前世今生BLE 协议栈分层架构用 nRF Connect 工具实战解析 BLE 设备核心概念详解GAP、GATT、ATT、UUID、SM常见误区 FAQ补充为了学习ble开发 会介绍 什么是ble? AT指令怎么用 透传功能是什么 两个ble模组建立通信的流程广播、扫描、连接、服务发现、加密、配对、多角色和低功耗 服务、特征、特征值、UUID GAP、GATT、ATT、SMPhost和controller?前言为什么要学 BLE1蓝牙家族一览2BLE 的优势✅ 超低功耗一节 CR2032 纽扣电池可用 1-2 年✅ 单芯片方案成本低外围器件少✅ 手机原生支持iOS/Android 无需配对就能搜到✅ 适合周期性数据传输传感器数据、定位信标✅ 支持 Long RangeBLE 5.0户外传输距离可达数百米3本系列采用 “实验→原理→驱动” 的教学方式建议学习顺序第1步了解基本概念本章↓第2步会用 nRF Connect 工具抓包、分析↓第3步掌握 GATT 数据结构服务/特征/描述符↓第4步开发第一个 GATT Server Nordic SDK / Android ↓第5步深入理解连接参数、MTU、安全流程一、ble基础概念1-ble协议栈分层2-ble协议栈里各个部分的功能3-直接上手协议栈是有难度的为了降低学习难度本博客采用“实验------原理”、“应用-------驱动”的方式描述ble协议栈的host部分什么你不知道host?快看看上面的图。4-为了能够开发项目应该了解什么【先了解服务、特征、属性、值透传、广播、扫描、连接、MTU、服务发现、ATT、GATT、UUID、低功耗、发射功率、连接参数、信道管理、白名单就可以简单开发了】二、通过nrf-connect查看ble模组信息打开nrf-connect软件链接上一个蓝牙模组就明白怎么学了。【先了解服务、特征、属性、值透传、广播、扫描、连接、MTU、服务发现、ATT、GATT、UUID、低功耗、发射功率、连接参数、信道管理、白名单就可以简单开发了】可以在手机浏览器搜索nrf-connect下载安装包并安装nrf-connect。网站https://www.nordicsemi.cn/tools/nrfconnectsdk/1-nrf-connect的扫描页面看广播包的数据现在打开nrf-connect随机搜索周围的蓝牙设备这个图片里描述了很多信息1蓝牙的名称BYD BLE32MAC地址D0:2E:AB:6A:35:293绑定状态NOT BONDED4) 设备类型LE only5服务 UUID42594420-4155-544F-E0A9-E50E24DCCA9E6厂商数据Manufacturer data0x2ED0是厂商 ID0xAB6A3529是具体的设备数据通常用于设备认证或版本识别7Flags: GeneralDiscoverable, BrEdrNotSupported表示这是一个仅支持低功耗蓝牙LE only的设备不支持经典蓝牙音频传输。8Signal Strength (RSSI)-95 dBm表示信号强度较弱说明手机离车辆较远或中间有遮挡物。【这些信息是怎么来的我将在后面描述】点击RAW这个按钮会出现1个弹窗这个弹窗描述了ble设备的广播包raw data是广播数据【待会分析】details是nrf-connect自动分析出的广播包数据看这个个图会发现一个结构由三个元素组成长度类型值没错蓝牙广播包的结构就是这样。下面逐帧拆解这个广播包由4个广播数据结构组成广播数据结构102 01 06广播数据结构217 07 xxxxx(太长了)广播数据结构309 09 42594420424c4533广播数据结构407 ff d02eab6a3529广播数据结构102 01 06 长度2字节数据类型1有效值6 //数据类型1表示标志位有效值6即标志位的有效数据0x06广播数据结构217 07 xxxxx 长度17字节数据类型07有效值xxxxxx //数据类型07表示完整的128位UUID列表 //有效值xxxx即值为标志位的有效数据0x06广播数据结构309 09 42594420424c4533长度09字节数据类型09有效值42594420424c4533//数据类型09表示完整的设备名称//有效值42594420424c4533即值为BYD BLE3广播数据结构407 ff d02eab6a3529长度07字节数据类型f’f有效值d02eab6a3529//数据类型ff表示制造商特定数据//有效值d02eab6a3529即值为d02eab6a3529这个时候再看完整的广播包发现它是由这4组数据拼接来的。2-手机app连接蓝牙模组查看ble的服务下图是一个拥有“电池服务”的蓝牙模组的信息。我将通过查看nrf-connect上的ble模组的信息来引入ble中待学习的概念。1.battery level是一个ble的服务。“服务”有哪些相关概念1服务 UUIDService UUID0x180F这是蓝牙 SIG 官方分配的标识符用于在广播或服务发现中识 别“电池服务”。2核心特征 (Characteristics)该服务必须包含一个名为 Battery Level​ 的特征用于传输电量数据Characteristic UUID0x2A19 数据类型uint8无符号 8 位整数 取值范围0到 100表示 0% 到100% 的电量3)属性 (Properties)Read读客户端可以主动读取当前电量。Notify通知可选服务器可以在电量变化时主动推送数据给客户端无需客户端轮询。注意“特征的属性”有4种读/写/通知/指示这是“服务、特征、属性、值”的层级关系通过查看服务我们了解到“服务-特征-属性-值”以及UUID的概念。这涉及到图中的GATT、ATT借此机会聊一聊GATT、ATT、GAP、UUID。三、GAP、GATT、ATT、UUID、SM的简述1-GAP (Generic Access Profile) - 通用访问规范层级最高层负责设备发现和连接管理。作用它定义了设备如何被发现广播/扫描、如何建立连接发起/接受、以及设备的安全级别配对/绑定。 与其它概念的关系 GAP 包含GATTGAP 负责把两个设备“拉”到一起建立连接连接建立后GATT 才开始工作。 GAP 使用 UUID在广播数据中GAP会携带设备的 UUID 信息以便扫描者识别这是什么设备。GAP和什么功能有关程序里扫描到设备后会产生一个事件通过回调函数执行对应的callback,这些事件和对应的callback都是由GAP管理的。从gap的描述看它规范着广播、扫描、连接、配对、绑定等确实代码里“广播、扫描、连接、配对、绑定”相关的事件和回调都是由它规范的。看图这是富芮坤蓝牙芯片SDK里的代码截图从上述的枚举类型看app_gap_evt_cb里管理的事件和“连接”、“链路参数和物理层更新事件”、“广播“、”扫描”、“安全”、“配对”、“绑定”等功能相关。GAP在ble协议栈里的职责是什么1定义设备角色Broadcaster广播者只发送广播包不接受连接如信标。Observer观察者只扫描和接收广播不发起连接如扫描器。Peripheral外设广播自身存在可被连接连接后作为从设备如手环、键盘。Central中心设备扫描并主动发起连接连接后作为主设备如手机、电脑。2)管理发现与连接流程广播定义外设如何发送广播包包含设备名、服务UUID等。扫描定义中心设备如何发现广播设备。发起连接定义中心设备如何与选中的外设建立连接。3)定义通信模式。告诉设备什么时候、以什么身份、做什么事例如先以Peripheral身份广播被连接后切换为通信状态。 管理连接参数和安全4)连接管理定义连接间隔、延迟等参数协商机制对应你枚举里的LINK_PARAM事件。安全初始化负责启动配对和加密过程对应GAP_SEC_EVT_*事件。2-GATT通用属性规范前面GAP部分聊了 “蓝牙连接”相关的事情而接下来看的GATT部分是处理“两个蓝牙连接之后要做什么”。**一句话理解GATT 定义了 BLE 设备数据长什么样是数据的模板。**定义服务。每个服务实现一个独立功能如心率服务、电池服务。在服务内定义特征。每个特征是一个具体的数据点如心率测量值、电量百分比。规定每个特征有声明、值、描述符等标准属性并用UUID唯一标识。GATT是分层的服务 → 特征 → 描述符​ 的三层结构定义其他ble设备可对本ble设备的服务的特征执行读、写、通知、指示​ 四种操作。是描述其他设备可以操作具体操作由ATT完成GATT只定义数据结构GATT是数据模型它不是传输工具而是数据的组织蓝图。实际的传输动作读、写、通知由底层的ATT协议执行。GATT 连接需要特别注意的是GATT 连接是独占的。也就是一个 BLE外设同时只能被一个中心设备连接。一旦外设被连接它就会马上停止广播这样它就对其他设备不可见了。当设备断开它又开始广播。核心价值没有GATT两个BLE设备即使连接上了也只是一串毫无意义的0和1。GATT让它们能互相理解对方数据的含义和结构。3-ATTAttribute Protocol—— 属性协议一句话理解ATT 是传输层协议GATT 是数据结构。GATT 调用 ATT 来传输数据。 ATT 数据结构每个 ATT 属性包含4 MTUMaximum Transmission UnitMTU 单次传输的最大字节数5-UUIDUniversally Unique Identifier—— 通用唯一标识符一句话理解UUID 就是身份证号用来唯一标识每个服务和特征 蓝牙 SIG 标准使用 16 位 UUID从 128 位中提取固定部分 自定义服务使用 128 位 UUID6-SMSecurity Manager—— 安全管理器一句话理解SM 负责 BLE 连接的安全问题——配对、绑定、加密。7-常见误区❓ Q1: BLE 是不是只能传几十字节A: 那是 BLE 4.0 时代的误解 实际项目中用 L2CAP Credit-Based Flow Control 可以传更大数据BLE 4.2Q2: GATT 和 ATT 到底什么区别A: 简单类比GATT 菜单定义了有哪些菜、什么价格ATT 外卖小哥负责把菜从厨房送到你家你点菜GATT定义结构↓外卖小哥取菜ATT请求↓菜送到你手上数据到达❓ Q3: Peripheral 和 Central 我该选哪个❓ Q4: 广播和连接有什么区别❓ Q5: 连接后外设还能广播吗8-┌─────────────────────────────────────────────────────────┐│ 今日知识点 │├─────────────────────────────────────────────────────────┤│ ✅ BLE 低功耗蓝牙蓝牙 4.0 的核心特性 ││ ✅ 协议栈分层PHY → Link Layer → L2CAP → ATT → GATT ││ ✅ GAP 管理连接谁连谁怎么连 ││ ✅ GATT 定义数据服务/特征/描述符 ││ ✅ ATT 传输数据读/写/通知/指示 ││ ✅ UUID 唯一标识服务/特征 ││ ✅ SM 安全配对/绑定/加密 ││ ✅ 连接参数间隔/延迟/超时影响功耗和响应速度 ││ ✅ MTU 决定单次传输最大字节数GATT、ATT、GAP的区别和联系补充2个ble一个主机一个从机它们的交互流程是什么下节预告 广播还没说完待续。第一篇主要描述框架细节在后面章节接下来是PPT附录

更多文章