蓝牙BLE协议

一:蓝牙BLE协议概述

蓝牙BLE协议是蓝牙技术联盟在2010发布的跨时代技术架构,它并不是蓝牙3.0的简单升级版本,而是全新的技术体系。BLE协议旨在解决传统蓝牙的高功耗问题,通过降低功耗和提高连接速度,使得蓝牙技术能够在更多的领域得到应用

二:蓝牙BLE特点

  1. 低功耗:BLE协议最大的特点之一就是低功耗,使得纽扣电池可以运行数月至数年,这使得BLE设备在需要长时间运行的场景更具优势。
  2. 快连接:BLE的设备连接速度非常快,通常在毫秒级别,远快于传统蓝牙的连接速度。
  3. 远距离:BLE的通信距离可达数百米,而传统的蓝牙通常只有10米左右。
  4. 跨平台互操作性:蓝牙联盟沿用了经典蓝牙规范内容,为了降低功耗蓝牙定义了一些标准Profile,只要遵守该规范,任意厂家的蓝牙设备均可以相互连接与通信。

三:蓝牙BLE工作流程

BLE设备的工作流程主要包括角色分配、广播、扫描、连接、通信和断开等步骤。

  1. 角色分配:BLE设备主要分为主机和从机俩种角色。
    1. 主机:主机可以发起对从机的扫描连接。
    2. 从机:只能广播并等待主机连接。
  2. 广播:从机在广播状态下会发送广播消息,主机在扫描状态下会监听这些广播消息。
  3. 扫描:主机通过扫描从机的广播消息发现从机设备。
  4. 连接:主机和从机建立连接后,可以相互收发数据,连接参数包括连接间隔,从机延迟、监控超时等,这些参数根据需要进行优化。
  5. 通信:在连接状态下,主机和从机可以通过ATT(属性协议)和GATT(通用属性配置文件)等协议进行数据传输。
  6. 断开:当不需要在传输数据时候,主机和从机可以断开连接。

四:蓝牙协议的整体架构

蓝牙协议栈按照功能分为三层:应用层、主机、控制器

  1. 应用层:根据需求实现不同的应用程序,应用层约定了三种类型:特性、服务和规范
  2. 主机:主机是软件栈,管理设备间的通信,并利用无线电同时提供服务、
    1. L2CAP 逻辑链路控制与适配协议
    2. ATT 属性协议
    3. GATT 通用属性配置文件
    4. SMP 安全管理协议
    5. GAP 通用访问配置文件
  3. 控制层:控制层是物理设备,负责发射和接收无线信号,并将这些信号翻译成携带的信息数据包

五:GAP 和 GATT

  1. GAP (通用访问配置文件):GAP负责定义设备在蓝牙BLE通信中的角色,管理连接的建立和安全。GAP能够访问链路层的状态机,实现发现蓝牙设备和广播报文并连接,广播并接受连接、发送广播报文、发现蓝牙设备和广播报文但不连接(仅扫描)等功能。
  2. 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 - 指示并返回 服务器 最高 关键事件上报
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容