理解Profiles, Services,Characteristics,UUID等值
申明:博文有一部分内容是转载的。
理解协议栈中,Profiles, Services,Characteristics,UUID等值的概念。
在这之前我们得先了解一下一些专业词汇:
GATT 事务是建立在嵌套的Profiles, Services 和 Characteristics之上的,如下图所示:
-
Profile Profile 并不是实际存在于 BLE 外设上的,它只是一个被 Bluetooth SIG 或者外设设计者预先定义的 Service 的集合。例如心率Profile(Heart Rate Profile)就是结合了 Heart Rate Service 和 Device Information Service。所有官方通过 GATT Profile 的列表可以从这里找到。
-
Service Service 是把数据分成一个个的独立逻辑项,它包含一个或者多个 Characteristic。每个 Service 有一个 UUID 唯一标识。 UUID 有 16 bit 的,或者 128 bit 的。16 bit 的 UUID 是官方通过认证的,需要花钱购买,128 bit 是自定义的,这个就可以自己随便设置。
官方通过了一些标准 Service,完整列表在这里。以Heart
Rate Service为例,可以看到它的官方通过 16 bit UUID 是 0x180D
,包含 3 个 Characteristic:Heart Rate Measurement, Body Sensor Location 和 Heart Rate Control Point,并且定义了只有第一个是必须的,它是可选实现的。
- Characteristic 在 GATT 事务中的最低界别的是 Characteristic,Characteristic 是最小的逻辑数据单元,当然它可能包含一个组关联的数据,例如加速度计的 X/Y/Z 三轴值。
与 Service 类似,每个 Characteristic 用 16 bit 或者 128 bit 的 UUID 唯一标识。你可以免费使用 Bluetooth SIG 官方定义的标准 Characteristic,使用官方定义的,可以确保 BLE 的软件和硬件能相互理解。当然,你可以自定义 Characteristic,这样的话,就只有你自己的软件和外设能够相互理解。
举个例子, Heart Rate Measurement Characteristic,这是上面提到的 Heart Rate Service 必需实现的 Characteristic,它的 UUID 是 0x2A37。它的数据结构是,开始 8 bit 定义心率数据格式(是UINT8 还是 UINT16?),接下来就是对应格式的实际心率数据。
实际上,和 BLE 外设打交道,主要是通过 Characteristic。你可以从 Characteristic 读取数据,也可以往 Characteristic 写数据。这样就实现了双向的通信。所以你可以自己实现一个类似串口(UART)的 Sevice,这个 Service 中包含两个 Characteristic,一个被配置只读的通道(RX),另一个配置为只写的通道(TX)。
上面这段内容介绍,是网上一名博友介绍的,他介绍的很清楚,但是刚开始接触蓝牙的话,看概念介绍,确实有些抽象,我利用一个软件,BLE TOOL给大家形象的介绍一下Profiles, Services,Characteristics,UUID等值的概念。
1. 打开BLE TOOL工具之后,点击搜索,这个工具会列出当前环境里的蓝牙设备,如果环境里面有蓝牙设备的话,会出现一项蓝牙设备的信息。界面如下,每部分代表的概念,已经在界面中,标的很清楚了。里面有scanRecord,mac地址,蓝牙名称,RSSI值等。
2。点击之后,会出现如下界面,这个界面是给蓝牙设备发送数据的界面。
3.点击“选择要写的服务ID”或者“选择要写的/读的”,进入下面界面。
4.点击sevices的下拉框,如下界面: