服务和特性
低功耗蓝牙设备之间通信,都是基于服务和特性。一个蓝牙设备中可以包含若干个服务,一个服务中可以包含若干个特性,每一个服务或者特性都要有一个UUID。蓝牙的数据交互都是基于一个个特性进行的,数据交互的方式有五种,分别是Read
,Write
,Write WithOutRespons
,Notify
,Indication
。
-
NOTIFY
:从机可以通知主机,不检查使能通知 CCC (不需要对方回应答包,没有流控)。 -
INDICATE
:从机可以指示主机,不检查使能通知 CCC (需要对方回应答包,有流控) -
READ
:主机读,有流控 -
WRITE
:主机写,有流控 -
WRITE_WITHOUT_RESPOND
:主机写了不回应,没有流控
主机–>从机:READ
、WRITE
、WRITE_WITHOUT_RESPOND
。
从机–>主机:NOTIFY
、INDICATE
。
-
WRITE
、WRITE_WITHOUT_RESPONSE
是CLIENT
端(GATT 主机角色)向 SERVER 端(GATT 从机角色)执行的发送数 据操作。而 NOTIFY 和 INDICATE 是 SERVER 端向 CLIENT 执行的发送数据操作。操作是以 handle 的方式标识。 -
WRITE
、INDICATE
的操作是需要对方响应回复命令,多用于数据交互带流控和可靠的传输方式。 -
WRITE_WITHOUT_RESPONSE
、NOTIFY
是不需要对方响应回复,多用于数据快速传输的方式。
另外增加私有的特征的特性值关键字有 DYNAMIC
,AUTHENTICATION_REQUIRED
,分别代表意思如下: DYNAMIC —数据可变处理,当有 READ,WRITE,WRITE_WITHOUT_RESPONSE,会产生对应的回调函数 read_callback 和 write_callback 处理,执行获取长度,填入对应的数据等操作。 AUTHENTICATION_REQUIRED —需要配对加密认证标记,代表 CLIENT 端操作该特征的读写必需要经过配对加密后才能被允许,否则操作失败。SERVER 端可以使用该关键字,指示 CLIENT 端需要发起配对加密流程(SERVER 端常用的请求加密方式)。
UUID
蓝牙设备在应用层是通过服务和特性去实现的,用下面这张图进行表示,一个服务里面包含若干个特性,每个特性里面又可以有读写,通知等权限,每一个服务和特性都要有一个UUID,UUID是蓝牙组织定义的,用于区分各个服务和特性的标识符,总长度是128bit,比如下面就是两个标准的UUID
考虑到UUID太长,蓝牙组织设置看一个基地址,允许用户使用16bit的UUID与该基地址拼接形成128bit的UUID,比如16bit的UUID 2A37
对应128bit的UUID是这样的,
GATT
GATT全称为Generic Attribute Profile,是蓝牙(Bluetooth)4.0及以上版本中用于设备间通讯的协议。GATT定义了蓝牙设备之间如何传输数据,以及如何解释和使用这些数据。
在GATT协议中,蓝牙设备被视为包含一组服务(Service)和特征(Characteristic)的集合体。服务表示一个或多个相关的特征,而特征则包括属性值(Value)、类型(Type)和描述符(Descriptor)。通过GATT协议,蓝牙设备可以读取和写入对应特征的属性值,并针对特定的应用需求进行相应配置。
例如,在一个智能手环和智能手机之间的连接过程中,通过GATT协议,智能手环向智能手机提供了一组服务,这些服务包括手环实时步数监控等功能,并提供相应的特征及其属性值。当用户在智能手机的应用程序中选择查看手环步数时,智能手机会向手环发送请求,通过GATT协议来读取相应的特征属性值,从而数据交互得以完成。
总之,GATT协议为蓝牙设备间的通信提供了标准的规范和约束,使不同类型的蓝牙设备能够相互通信和交换数据。
在BLE协议中,Profile是指一种特定的功能规范,定义了一组服务和特征,以便不同厂家的设备之间可以互相交流和理解数据。简单来说,Profile就是基于BLE通信的应用场景和特殊需求,为系统提供标准化的API接口。
Profile在BLE协议栈中位于应用层之上,在BLE协议的属性协议(ATT)和通用属性协议(GATT)之外。一个Profile通常由一个或多个服务组成,每个服务包含多个特征和描述符。具体而言,服务下面可以包括多个特征,而特征则对应了一个 UUID、一个属性值、一个权限等参数。
比如,心率测量Profile规定了在使用BLE连接心率传感器时需要实现的服务和特征,包括读取心率数值、测量开始和停止等操作。只要设备符合对应Profile的规范,就能通过这些服务和特征实现设备间的无缝交互和控制。
总之,BLE Profile提供了基于BLE通信的特定功能规范,使开发者可以更加方便地为自己的产品进行开发和设计,从而实现设备的互动和控制。
GATT Services profile结构如下图