BLE GATT 介绍

来源:互联网 发布:计算机专业与大数据 编辑:程序博客网 时间:2024/05/19 18:00

转载请注明出处:http://blog.csdn.net/haozi0_0,多谢合作

做 BLE 快两年了,想想刚开始自己查各种资料学习的时候也是有很多感慨,记得最清楚的就是 GATT 这个东东,当时完全搞不懂,什么是服务?什么是特征值?什么是 UUID?最近感觉对这些概念又有点混乱了,所以就在整理一下,理清一下思路。有些知识点不是很准确,也有一些是自己的理解,欢迎大家帮我指出错误和不足。

GAP 和 GATT 简介

  1. GAP(通用访问配置文件),定义了设备的四中角色,可以理解为用来建立连接

    • 广播者(Broadcaster):不可连接的广告设备
    • 观察者(Observer):扫描广播,但不发起建立连接
    • 外设(Peripheral):可连接的设备
    • 主机(Central):扫描广告设备并发起连接
  2. ATT(属性协议)

  3. GATT(通用属性协议配置文件),是 ATT 的配置层,就是配置 ATT 的层,定义了设备连接后的角色,可以理解为用来发送数据

    • GATT 服务器:是为 GATT 客户端提供数据的设备
    • GATT 客户端:是从 GATT 服务器读写、应用数据的设备

GATT Profile 结构

下面这张图就是一个典型的 Profile 结构。

这里写图片描述
配置文件是一个用例或应用程序的最终体现。配置文件描述一个或多个设备,在每个设备上有一个或多个服务的规格。

  1. 可以看到他可以包含多个 Service,大部分 Service 其实都是 BLE 本身自带的,一般都是 SDK 定义好了的,我们不需要修改和操作的,我们要用的 Service 可能一个工程里面只有一个。
    举个例子:一个血压计设备,他可能只有一个我们需要操作、修改的 Service,就是读取血压数值然后发送给 APP。
    再举个例子:一个带心率功能的计步器,有两个功能,一个是计步,还有一个是测量心率,那么这个设备可能就有两个 Service 需要我们操作、修改。

  2. 在图中还能看到一个 Service 可能包含多个 Characteristic,这就是一个服务所包含的特征值。怎么理解特征值呢,还举那个血压计的例子吧:
    上面说过血压计只有一个 Service,就是读取血压数值然后发送给 APP,但是这一个 Service 可能包含多个 Characteristic,第一个 Characteristic 是 Indicate 功能,就是 BLE 设备可以通过 Indicate 的方式发数据给 APP;第二个 Characteristic 是 Notify 功能,BLE 设备可以通过 Notify 的方式发数据给 APP;第三个 Characteristic 是读功能,是 APP 可以读到这个 Service 的一些配置参数;
    也就是说一个血压计的设备有一个服务,一个服务就是一个功能,但是这个功能可能包含了好几个变量,这个 Characteristic 可以暂时理解为变量。所以说 BLE 之间的数据交换是通过 Characteristic 做到的。

  3. 大家还可以看到每个 Characteristic 中都有几个 Properties、Value、Descriptor,这几个参数就是 Characteristic 的属性了,分别是特征值的声明、特征值的数值、特征值的描述,Descriptor 描述可以有多个。

服务属性表

上面的最后讲过一个 Profile 最终会有很多属性,下面的图就是属性汇总的一部分,包含了很多属性,拿这些属性是怎么区分并判断呢?下图中的每一行都是一个 Attribute(属性)。
这里写图片描述

  1. 这张图由三个部分组成,分别是 Handle、UUID(属性类型)、Value(属性值)。我们先来说 UUID,UUID 是通用唯一识别码。这里表示的是属性类型。举个例子,在 BLE 协议中定义了 0x2800 这个 UUID,它代表了一个这个属性的类型是 Service;0x2803 这个 UUID,表示这个属性的类型是一个 Characteristic。

  2. 那我们看到 UUID 有很多都重复出现了,那怎么区别他们呢?那就要靠前面的 Handle 了,这个 Handle 是不能重复的,就是一个属性在属性列表中的位置,所以可以当做地址来理解。两个属性的 UUID 可能是相同的,但是 Handle 永远不可能相同。

0 0