一、基本概念
服务(Service)
定义:一组相关功能的数据集合,代表设备的某个特定能力
类比:就像手机中的不同功能模块(通讯录、短信、音乐播放器)
每个服务有一个唯一的UUID(通用唯一标识符)
特征值(Characteristic)
定义:服务中的具体数据点,包含实际可读/可写的数据
类比:服务中的具体设置项(如音量大小、播放状态)
包含:值(Value)和描述符(Descriptors)
二、常见标准服务示例
- 设备信息服务 (UUID: 0x180A)
特征值:
制造商名称 (0x2A29)
设备型号 (0x2A24)
序列号 (0x2A25)
- 电池服务 (UUID: 0x180F)
特征值:
电量百分比 (0x2A19)
- 心率服务 (UUID: 0x180D)
特征值:
心率测量值 (0x2A37)
传感器位置 (0x2A38)
三、特征值属性
每个特征值有属性定义其用途:
属性 含义 示例
Read 可读取数据 读取设备名称
Write 可写入数据 设置设备参数
Notify 服务器主动通知客户端 实时心率数据推送
Indicate 带确认的通知 重要状态变化
四、工作流程
text
设备(外设)
├── 服务1:电池服务
│ ├── 特征值1:电量百分比(Read, Notify)
│ └── 特征值2:充电状态(Read, Notify)
├── 服务2:自定义服务
│ ├── 特征值1:控制命令(Write)
│ └── 特征值2:状态反馈(Read, Notify)
└── 服务3:...
五、实际应用示例
智能手环:
服务:心率监测 (0x180D)
特征值:心率数据 (可Notify实时推送)
特征值:传感器位置 (可Read)
服务:自定义运动服务
特征值:步数数据 (可Read)
特征值:运动模式设置 (可Write)
六、UUID格式
16位UUID:蓝牙SIG定义的官方服务
例:0x180F(电池服务)
128位UUID:自定义服务
例:0000XXXX-0000-1000-8000-00805F9B34FB
七、通信过程
发现服务:客户端扫描设备可用服务
发现特征值:找到服务中的具体特征
建立通信:根据属性进行读/写/通知操作
八、开发要点
服务定义设备的功能模块
特征值定义具体的数据接口
通过属性控制访问权限
使用Notify/Indicate实现实时数据流
理解服务和特征值的关系是蓝牙开发的基础,这种结构化的设计使得蓝牙设备能够标准化地提供各种功能,同时也支持自定义扩展。