BLE低功耗蓝牙GATT简介

 
低功耗蓝牙(BLE),有时也称为“蓝牙智能”,是经典蓝牙的轻量子集,是蓝牙4.0核心规范的一部分。尽管与经典蓝牙存在一些重叠,但BLE实际上具有完全不同的沿袭,并由诺基亚作为内部项目“ Wibree”启动,然后被蓝牙SIG采纳。

工程师和产品设计师那里有很多无线协议,但是使BLE如此有趣的是,它几乎肯定是设计可以与任何现代移动平台(iOS,Android,Windows Phone等)通信的最简单方法。 ),尤其是在Apple设备的情况下,这是唯一不需要您无休止地努力才能为iOS设备合法销售产品的硬件设计选择。
 

BLE平台支持

BLE平台支持从下面列出的版本开始,大多数主要平台都支持蓝牙4.0和蓝牙低功耗(BT 4.0的子集):
  • iOS5 +(首选iOS7 +)
  • Android 4.3以上版本(4.4以上版本已修正许多错误)
  • 苹果OS X 10.6+
  • Windows 8(XP,Vista和7仅支持蓝牙2.1)
  • GNU/Linux Vanilla BlueZ 4.93+

GAP

GAP是Generic Access Profile的缩写,它控制蓝牙中的连接和广播。GAP使您的设备对外界可见,并确定两个设备如何(或不能)相互交互。

 

Device Roles

GAP定义了设备的各种角色,但是要记住的两个关键概念是*设备和外围设备。
  • 外围设备是小型,低功耗,资源受限的设备,可以连接到功能更强大的*设备。外围设备是诸如心率监测器,启用BLE的接近标签等。
  • *设备通常是您连接的手机或平板电脑,具有更大的处理能力和内存。

Advertising and Scan Response Data

广播和扫描响应数据通过GAP发送广告有两种方法。该广数据有效负载和扫描响应有效负载。

这两个有效载荷是相同的,并且最多可以包含31个字节的数据,但是只有广播数据有效载荷是强制性的,因为这是不断从设备发送出去的有效载荷,以使范围内的*设备知道它的存在。扫描响应有效负载是*设备可以请求的可选辅助有效负载,并允许设备设计人员在广告有效负载中添加更多信息,例如设备名称字符串等。

 

Advertising Process

广播流程下图应说明广告过程以及广播有效载荷和扫描响应有效载荷的工作方式。

外设将设置一个特定的广告间隔,并且每经过此间隔,它将重新传输其主要广告包。较长的延迟可节省功耗,但如果设备仅每2秒而不是每20ms一次通告自己,则响应速度会降低。

如果侦听设备对扫描响应有效负载感兴趣(并且在外围设备上可用),它可以有选择地请求扫描响应有效负载,并且外围设备将使用其他数据进行响应。
BLE低功耗蓝牙GATT简介

 

Broadcast Network Topology

广播网络拓扑虽然大多数外围设备会自己通告,以便可以建立连接并可以使用GATT服务和特征(这样可以双向交换更多数据),但在某些情况下,您只想通告数据。

这里的主要用例是您希望外围设备一次将数据发送到多个设备。这只能通过广告包来实现,因为以连接模式发送和接收的数据只能被这两个连接的设备看到。

通过在31字节的广告或扫描响应有效负载中包含少量自定义数据,您可以使用低成本的蓝牙低功耗外设将数据单向发送到侦听范围内的任何设备,如下图所示。这就是所谓的广播低功耗蓝牙。

例如,这就是Apple iBeacon使用的方法,该方法使用“ 制造商特定数据”字段在主广告数据包中插入自定义有效负载。
 
一旦您在外围设备和*设备之间建立了连接,广告过程通常将停止,并且您通常将不再能够发送广告数据包,并且您将使用GATT服务和特性双向通信。
BLE低功耗蓝牙GATT简介

GATT

 
GATT是通用属性配置文件的缩写,它定义了两个低功耗蓝牙设备使用称为服务和特征的概念来回传输数据的方式。它使用称为属性协议(ATT)的通用数据协议,该协议用于在表中的每个条目使用16位ID的简单查找表中存储服务,特征和相关数据。

一旦在两个设备之间建立了专用连接,GATT就会发挥作用,这意味着您已经完成了GAP规定的广告流程。

关贸总协定和联系牢记的最重要的一点是,联系是排他的。那是什么意思BLE外围设备一次只能连接到一个*设备(手机等)!一旦外围设备连接到*设备,它将停止自我宣传,其他设备将无法再看到它或连接到它,直到现有的连接断开。

建立连接也是允许双向通信的唯一方法,其中*设备可以向外围设备发送有意义的数据,反之亦然。

 

Connected Network Topology

连接网络拓扑下图应说明蓝牙低能耗设备在连接环境中的工作方式。外围设备一次只能连接到一个*设备(例如移动电话),但是*设备可以连接到多个外围设备。

如果需要在两个外围设备之间交换数据,则需要在所有消息都通过*设备的地方实现自定义邮箱系统。

但是,一旦在外围设备和*设备之间建立了连接,就可以在两个方向上进行通信,这与仅使用广告数据和GAP的单向广播方法不同。

 

GATT Transactions

理解GATT的一个重要概念是服务器/客户机关系

外围设备称为GATT服务器,它保存ATT查找数据和服务以及特征定义,而GATT客户端(电话/平板电脑)则向该服务器发送请求。

所有事务均由主设备GATT客户端启动,该设备从从设备GATT服务器接收响应。

建立连接时,外围设备将向*设备建议一个“连接间隔”,并且*设备将尝试重新连接每个连接间隔,以查看是否有新数据可用,等等。务必牢记此连接间隔实际上只是一个建议!您的*设备可能无法满足该请求,因为它正忙于与其他外围设备通信,或者所需的系统资源不可用。

下图应说明外围设备(GATT服务器)和*设备(GATT客户端)之间的数据交换过程,其中主设备启动每个事务:
 

BLE低功耗蓝牙GATT简介

Services and Characteristics

服务与特点BLE中的GATT事务基于称为Profiles,Services和Characteristics的高级嵌套对象,可以在下图中看到:

BLE低功耗蓝牙GATT简介

Profiles

Profile实际上在BLE外围设备本身上并不存在,它是由蓝牙SIG或外围设备设计人员编译的简单的预定义服务集合。例如,心率配置文件将心率服务和设备信息服务结合在一起。可以在此处查看正式采用的基于GATT的配置文件的完整列表:配置文件概述

 

Services

服务用于将数据分解为逻辑实体,并包含称为特征的特定数据块。服务可以具有一个或多个特征,并且每个服务都通过称为UUID的唯一数字ID与其他服务区分开,UUID可以是16位(对于正式采用的BLE服务)或128位(对于自定义服务) )。
可以在Bluetooth Developer Portal 的Services页面上查看正式采用的BLE服务的完整列表。例如,如果您查看“ 心率服务”,我们可以看到此正式采用的服务具有16位UUID 0x180D,并包含多达3个特征,尽管只有第一个是必选的:心率测量人体传感器位置心率控制点

 

Characteristics

GATT事务中最底层的概念是特性,它封装了一个数据点(尽管它可能包含一系列相关数据,例如来自3轴加速度计的X / Y / Z值等)。
与服务类似,每个特征都通过预定义的16位或128位UUID进行区分,您可以*使用Bluetooth SIG定义标准特征(这可以确保跨BLE和启用BLE的硬件/软件的互操作性)或定义自己的自定义特征,只有外围设备和软件才能理解。
例如,心率测量特性对心率服务是必填项,并且使用的UUID为0x2A37。它从描述HRM数据格式的单个8位值开始(无论数据是UINT8还是UINT16等),然后继续包含与该配置字节匹配的心率测量数据。
特性是您将与BLE外设进行交互的重点,因此了解这一概念很重要。它们还用于将数据发送回BLE外设,因为您也可以写入特征。您可以实现一个具有自定义“ UART服务”和两个特性的简单UART类型接口,一个特性用于TX通道,一个特性用于RX通道,其中一个特性可以配置为只读,而另一个则具有写权限。