一:蓝牙BLE协议概述
蓝牙BLE协议是蓝牙技术联盟在2010发布的跨时代技术架构,它并不是蓝牙3.0的简单升级版本,而是全新的技术体系。BLE协议旨在解决传统蓝牙的高功耗问题,通过降低功耗和提高连接速度,使得蓝牙技术能够在更多的领域得到应用
二:蓝牙BLE特点
- 低功耗:BLE协议最大的特点之一就是低功耗,使得纽扣电池可以运行数月至数年,这使得BLE设备在需要长时间运行的场景更具优势。
- 快连接:BLE的设备连接速度非常快,通常在毫秒级别,远快于传统蓝牙的连接速度。
- 远距离:BLE的通信距离可达数百米,而传统的蓝牙通常只有10米左右。
- 跨平台互操作性:蓝牙联盟沿用了经典蓝牙规范内容,为了降低功耗蓝牙定义了一些标准Profile,只要遵守该规范,任意厂家的蓝牙设备均可以相互连接与通信。
三:蓝牙BLE工作流程
BLE设备的工作流程主要包括角色分配、广播、扫描、连接、通信和断开等步骤。
- 角色分配:BLE设备主要分为主机和从机俩种角色。
- 主机:主机可以发起对从机的扫描连接。
- 从机:只能广播并等待主机连接。
- 广播:从机在广播状态下会发送广播消息,主机在扫描状态下会监听这些广播消息。
- 扫描:主机通过扫描从机的广播消息发现从机设备。
- 连接:主机和从机建立连接后,可以相互收发数据,连接参数包括连接间隔,从机延迟、监控超时等,这些参数根据需要进行优化。
- 通信:在连接状态下,主机和从机可以通过ATT(属性协议)和GATT(通用属性配置文件)等协议进行数据传输。
- 断开:当不需要在传输数据时候,主机和从机可以断开连接。
四:蓝牙协议的整体架构
蓝牙协议栈按照功能分为三层:应用层、主机、控制器
- 应用层:根据需求实现不同的应用程序,应用层约定了三种类型:特性、服务和规范
- 主机:主机是软件栈,管理设备间的通信,并利用无线电同时提供服务、
- L2CAP 逻辑链路控制与适配协议
- ATT 属性协议
- GATT 通用属性配置文件
- SMP 安全管理协议
- GAP 通用访问配置文件
- 控制层:控制层是物理设备,负责发射和接收无线信号,并将这些信号翻译成携带的信息数据包
五:GAP 和 GATT
- GAP (通用访问配置文件):GAP负责定义设备在蓝牙BLE通信中的角色,管理连接的建立和安全。GAP能够访问链路层的状态机,实现发现蓝牙设备和广播报文并连接,广播并接受连接、发送广播报文、发现蓝牙设备和广播报文但不连接(仅扫描)等功能。
- GATT (通用属性配置文件):GATT封装了ATT,主要用来规范attribute中的数据内容,并将不同的attrbute进行分组分类。GATT定义服务、特征和描述等该概念。用于在客户端和服务端之间的传输属性数据。
六:应用程序
具有多个服务 Server-x, 每个服务都有N个特性 Char-x,
定义了GATT(通用属性规范)中客户端和服务器之间进行数据交互的具体操作方式。它们决定了数据如何流动,以及发送方是否需要得到接收方的确认。
为了更直观地理解,可以把它们分成两组:“主动读写”(由客户端发起)和“主动推送”(由服务器发起)。
1. 客户端发起的操作(拉取/推送数据)
这类操作通常由手机(GATT客户端)发起,用来读取或修改设备(GATT服务器)上的数据。
-
Read (读取)
- 方向:客户端 -> 请求数据 -> 服务器
- 机制:客户端主动向服务器请求某个特征(Characteristic)的当前值。服务器收到请求后,必须返回数据。
- 特点:有响应。客户端必须等待服务器回复才能进行下一步操作。
- 类比:你打电话问朋友:“你现在电量是多少?” 朋友回答:“80%”。
- 应用场景:读取静态信息或偶尔查询的状态,如读取设备型号、硬件版本号。
-
Write (写入)
- 方向:客户端 -> 发送数据 -> 服务器
- 机制:客户端向服务器的一个特征写入数据,并等待服务器确认已收到并处理完毕。
- 特点:有应用层响应。服务器会回复“写入成功”或“写入失败/错误”。这保证了数据的可靠到达,但速度较慢。
- 类比:你告诉朋友:“请把闹钟时间调到7点。” 朋友确认:“好的,已调好。”
- 应用场景:需要确保命令被准确执行的场景,例如开锁指令、开关灯。
-
Write With No Response (写入无响应)
方向:客户端 -> 发送数据 -> 服务器
机制:客户端向服务器写入数据,但不需要服务器回复确认信息。客户端发完即止,继续做自己的事。
特点:无应用层响应。速度快,但应用层不保证数据是否真的被对方成功接收(虽然底层链路层有重传机制,但若对方正忙,数据可能丢失)。
类比:你给朋友发短信说“我先出门了”,然后放下手机,不等着看对方回“好的”。
应用场景:对实时性要求高、且允许偶尔丢包的控制指令,或者需要连续发送大量数据的场景,例如遥控赛车的连续方向控制、传输大数据包时的分包写入。
2. 服务器发起的操作(推送数据)
这类操作通常由设备(GATT服务器)主动发起,把数据“推”给手机(GATT客户端)。
这是BLE低功耗特性的关键,因为设备不需要时刻等待手机来读,有变化时直接推送即可。
-
Notify (通知)
- 方向:服务器 -> 推送数据 -> 客户端
- 机制:当设备端数据发生变化时,主动将数据包发送给手机。手机收到后,不需要回复确认信息。
- 特点:最快的推送方式。对端收到即可,无需回复。如果手机来不及处理,数据可能丢失。
- 类比:朋友不停地跟你说当前心率:“72... 75... 80...”。你听着就行,不用每次都说“好的,收到了”。
- 应用场景:高频传感器数据,如心率波形、加速度计数据。这是BLE中最常用的推送方式。
-
Indicate (指示)
- 方向:服务器 -> 推送数据并等待确认 -> 客户端
- 机制:当设备端数据发生变化时,主动将数据包发送给手机。手机收到后,必须回复一个确认包。
- 特点:可靠但慢。因为每一次推送都需要一来一回的握手确认,下一个数据包必须等收到确认后才能发送。
- 类比:朋友告诉你一件很重要的事:“警报器响了!”,你必须回答“我知道了”,他才会继续说下一件事。
- 应用场景:关键性状态报告,如低电量报警、警报触发、设备就绪状态。确保手机100%收到了这条信息。
总结与对比
| 操作 | 发起方 | 有无响应 | 速度 | 可靠性 | 典型用途 |
|---|---|---|---|---|---|
| Read - 读取 | 客户端 | 有 | 慢 | 高 | 查询静态信息 |
| Write - 写入并返回 | 客户端 | 有 | 慢 | 高 | 执行关键命令 |
| Write No Response - 写入无返回 | 客户端 | 无 | 快 | 中 | 连续控制、大数据写入 |
| Notify - 通知 | 服务器 | 无 | 最快 | 中 | 高频传感器数据 |
| Indicate - 指示并返回 | 服务器 | 有 | 慢 | 最高 | 关键事件上报 |