BLE 蓝牙设备 属性特征解析

news/2025/2/21 4:45:04/文章来源:https://www.cnblogs.com/Fitz/p/18723302

在 BLE(Bluetooth Low Energy)协议中,每个蓝牙设备的主要属性特征是由 GATT(Generic Attribute Profile) 结构定义的。设备的所有功能和数据都通过 GATT 服务(Service)特征(Characteristic) 进行组织和访问。


1. BLE 设备的主要属性

BLE 设备的属性主要包括 广播信息(Advertising)、GATT 服务、特征(Characteristic)等

(1) 广播信息(Advertising Data)

蓝牙设备在未连接时,会通过 广播 发送设备的基本信息,常见的字段包括:

  • 设备名称(Device Name)
    • 可选字段,标识设备的可读名称,如 "Mi Band 6"
  • 设备地址(MAC Address)
    • 每个蓝牙设备都有唯一的 MAC 地址,例如 AA:BB:CC:DD:EE:FF(部分设备可能会随机化地址)。
  • 信号强度(RSSI - Received Signal Strength Indicator)
    • 代表设备信号的强度,一般为负值(如 -40dBm),数值越接近 0,信号越强
  • 广播UUID(Advertised UUIDs)
    • 设备可以在广播数据中发送 服务 UUID,例如 0x180D(代表心率服务)。
  • 制造商数据(Manufacturer Specific Data)
    • 厂商可以自定义数据格式,如 iBeacon 就利用这个字段传输 UUID、Major、Minor 信息。
  • Tx Power(发射功率)
    • 设备的信号发射强度,影响通信距离。

(2) GATT(通用属性协议)

在 BLE 设备建立连接后,所有的通信都通过 GATT(Generic Attribute Profile) 进行。GATT 主要由以下部分组成:

① 服务(Service)

服务是一个逻辑分类,表示设备支持的功能。例如:

  • 0x180D(Heart Rate Service,心率服务)
  • 0x180A(Device Information Service,设备信息)
  • 0x180F(Battery Service,电池信息)

每个 服务 由一个 UUID 标识,可以是 官方标准 UUID(16-bit,如 0x180D自定义 UUID(128-bit,如 f000aa80-0451-4000-b000-000000000000

② 特征(Characteristic)

每个 服务 下面包含多个 特征(Characteristic),它们是 BLE 设备的核心数据单元,例如:

  • 0x2A37(心率测量值)
  • 0x2A19(电池电量)

每个特征有 唯一的 UUID,通常有 读(Read)、写(Write)、通知(Notify)等权限

③ 描述符(Descriptor)

描述符用于提供额外信息,例如:

  • Client Characteristic Configuration Descriptor (CCCD)
    • UUID: 0x2902
    • 用于启用 通知(Notify)指示(Indicate) 功能。
  • Characteristic Presentation Format Descriptor (CPF)
    • UUID: 0x2904
    • 定义数据格式,如 int8float32 等。

2. BLE 设备的 GATT 结构示例

假设你在 Android/iOS 上连接了一个 BLE 设备,它的 GATT 结构可能是这样的:

Device: "Mi Band 6" (MAC: AA:BB:CC:DD:EE:FF)
└── Service: Battery Service (0x180F)└── Characteristic: Battery Level (0x2A19)  [Read, Notify]└── Descriptor: Client Characteristic Configuration (0x2902)└── Service: Heart Rate Service (0x180D)├── Characteristic: Heart Rate Measurement (0x2A37)  [Notify]├── Characteristic: Body Sensor Location (0x2A38)  [Read]└── Service: Device Information (0x180A)├── Characteristic: Manufacturer Name (0x2A29)  [Read]├── Characteristic: Model Number (0x2A24)  [Read]

3. BLE 设备特征(Characteristic)的属性

每个 特征(Characteristic) 具有以下 属性(Properties)

属性说明
Read 允许客户端(如手机)读取数据
Write 允许客户端写入数据
Write Without Response 写数据时不需要设备确认(加快速度)
Notify 设备主动向客户端推送数据(不需要应答)
Indicate 设备主动向客户端推送数据(需要应答)
Broadcast 设备可以在广播时包含该特征的数据

示例

  • 心率测量(Heart Rate Measurement)
    • UUID: 0x2A37
    • 属性: Notify(心率变化时推送)
  • 电池电量(Battery Level)
    • UUID: 0x2A19
    • 属性: Read, Notify(支持读取 & 变化时通知)

4. 常见 BLE 设备服务 UUID

服务名称UUID(16-bit)功能
Heart Rate Service 0x180D 监测心率
Battery Service 0x180F 监测电池状态
Device Information 0x180A 提供设备信息
Alert Notification 0x1811 处理通知/警报
Health Thermometer 0x1809 监测体温
Blood Pressure 0x1810 监测血压
Cycling Speed and Cadence 0x1816 自行车踏频检测

如果设备是自定义服务,它可能使用 128-bit UUID,如:

f000aa80-0451-4000-b000-000000000000

5. 读取 & 订阅 BLE 设备特征

在 Android 中可以使用 BluetoothGatt 进行 GATT 操作,例如:

// 读取特征数据
bluetoothGatt.readCharacteristic(characteristic);
// 订阅通知
bluetoothGatt.setCharacteristicNotification(characteristic, true);// 设置 CCCD (启用 Notify)
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
bluetoothGatt.writeDescriptor(descriptor);

总结

  1. BLE 设备的核心概念:

    • 广播数据(Advertising):设备名称、UUID、信号强度(RSSI)。
    • GATT 服务(Service):设备提供的功能分类。
    • 特征(Characteristic):数据存储单元,可 Read / Write / Notify
    • 描述符(Descriptor):为特征提供附加信息,如 CCCD 控制 Notify/Indicate
  2. 不同设备有不同的 GATT 结构,可使用 标准 UUID自定义 UUID

  3. BLE 设备的主要交互方式

    • 读取数据(Read)
    • 写入数据(Write)
    • 订阅通知(Notify / Indicate)

如果你的设备是 Notify 类型(如心率传感器),记得启用 CCCD 订阅通知,否则收不到数据!

如果你有具体的设备想要解析 GATT 结构,欢迎提供详细信息,我可以帮你分析它的 UUID 和特征 🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/886569.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【一文解读】内外网文件摆渡系统详解:跨网传输与数据安全保障

在数字化时代,企业在内外网之间传输文件已经成为日常运作的一部分。然而,如何确保在不同网络环境下高效、安全地进行文件传输,成为许多企业面临的重要挑战。内外网文件摆渡系统应运而生,成为解决跨网数据传输瓶颈和保障数据安全的关键工具。本文将深入解析内外网文件摆渡系…

传统ftp无法满足高性能传输需求,如何寻找替代ftp的技术?

面对现在数据量的激增和网络安全威胁的不断演变,许多传统企业在用传统的FTP系统都面对着许多的安全和传输问题,企业面临的挑战是如何在保障数据安全的同时,提高文件传输的效率,因此原FTP系统已经逐步无法满足现代企业的需求。今天主要了解下企业需要替代FTP的原因,以及如何…

只需简单5步,Ansible脚本自动搭建AlwaysOn集群(已测试通过,可实际运行)

只需简单5步,Ansible脚本自动搭建AlwaysOn集群(已测试通过,可实际运行)之前已经介绍过这套脚本,请看下面↓ 一分钟搞定!CentOS 7.9上用Ansible自动化部署SQL Server 2019 注意: 这套ansible脚本不支持RHEL 7.X 和CentOS7.X系统! 这套ansible脚本不支持RHEL 7.X …

[AI/计算机硬件] 部署、训练AI大模型的显卡采购指南 [转]

序截至2025年,全球主流的AI大模型满血版的参数量均已突破百亿级,算力需求正以指数级飙升。特别是 DeepSeek 公司旗下的 R1 系列模型的问世,推动了很多中小企业部署私有化模型的需求。然而,面对动辄数十万上百万元的GPU采购成本,选错一块显卡可能让企业付出高昂的试错代价。…

清华DeepSeek手册第Ⅳ版《DeepSeek﹢智灵DeepResearch 让科研像聊天一样简单》

在数字化浪潮汹涌澎湃的当下,大模型如同一颗璀璨新星,强势崛起并迅速成为科技领域的焦点。从最初的理论探索到如今在各个行业的广泛应用,大模型正以惊人的速度重塑着我们的生活与工作模式。 它的出现不仅是人工智能技术发展的重大突破,更是推动经济增长、提升社会治理效能、…

[Vite] Code Splitting Vite

Code Splitting 打包构建中的代码拆分(Code Splitting)是一种优化技术,它将应用程序的代码拆分成多个小块(chunks),并在需要时按需加载这些代码块。这种技术的目的是提高应用程序的性能和用户体验,主要有以下几个原因:减少初始加载时间 当应用程序的代码被打包成一个单…

ArrayBlockingQueue的poll方法底层原理

一、ArrayBlockingQueue的poll方法底层原理 ArrayBlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个基于数组实现的有界阻塞队列。它的 poll() 方法是用于从队列中移除并返回队首元素的核心方法之一。与 take() 方法不同,poll() 方法在队列为空时不会阻塞,而是立…

java web前台技术的初步学习

今日学习了Java Web 基本开发技术前台技术,分为HTML和CSS HTML 是构建网页结构的基础,用于定义网页中的各种元素,如标题、段落、图片、链接、表格等。通过不同的标签组合,可以搭建出网页的基本框架。 常用标签示例 html示例页面这是一级标题这是一个段落。访问示例网站CSS …