蓝牙低功耗入门

介绍

蓝牙低功耗(BLE),有时候被称为“BluetoothSmart”,是经典蓝牙的一个轻型化子集,并被引入到蓝牙4.0核心规范中。尽管有一些与经典蓝牙重叠,BLE实际上有完全不同的血统,在被Bluetooth SIG采用之前,它是由诺基亚发起的,一个称为“Wibree”的室内项目。

 

BLE平台支持

蓝牙4.0和BLE(蓝牙4.0的子集)适用于如下所列版本的大多数主要平台:

l  iOS5+ (首选iOS7+)

l  Android 4.3+ (4.4+中修复了许多漏洞)

l  Apple OS X 10.6+

l  Windows 8 (XP, Vista and 7 only support Bluetooth 2.1)

l  GNU/Linux Vanilla BlueZ 4.93+

 

GAP

GAP是Generic Access Profile的首字母缩写,控制蓝牙中的连接和广播。GAP使设备对外部世界可见,决定两个设备怎样能(或不能)交互。

 

设备角色

GAP定义了设备的各种角色,但是要记住的两个主要概念是Central(中央)设备和Peripheral(外围)设备。

l  外围设备是小型的、低功率的、资源受约束的设备,能连接到一个更强大的中央设备。外围设备是诸如一个心率监控器、一个BLE激活的距离标签等。

l  中央设备通常是移动电话或平板电脑,连接更多的处理能力和内存。

 

广播和扫描响应数据

有两种方式用GAP发出广播,广播数据载荷和扫描响应载荷。

 

两种载荷都是完全相同的,可包含多达31字节数据,但是只有广播数据载荷是强制的,因为这个载荷从设备中不断发出,让处于范围内的中央设备知道其存在。扫描响应载荷是中央设备能请求的可选的第二载荷,允许设备设计者在广播载荷中装入更多信息,如设备名称的字符串,等等。

 

广播过程

以下插图应该说明了广播过程,以及广播载荷和扫描响应载荷怎样工作。

 

外设将设置一个特定的广播区间,每次通过这个区间,将重发其主要广播包。如果设备仅每2s而不是每20ms广播自身一次,更长的延时节省了功耗,但感受到更少的响应。

 

如果监听设备对扫描响应载荷(其在外设上有效)感兴趣,就可以选择请求扫描响应载荷,外设将以额外的数据回应。

 

蓝牙低功耗入门_第1张图片

 

广播网络拓扑

尽管大多数外设广播自身,以便建立连接,并且可以使用GATT服务和特性(允许更多的数据双向交换),还是有只想知道广播数据的情况。

 

主要使用情况是你想要外设同时发送数据给多个设备。这样唯一的可能是使用广播包,因为连接模式下数据发送和接收仅能被两个已连接的设备看到。

 

通过在31字节广播或扫描响应载荷中包含小批量自定义数据,你可以使用一个低成本的BLE外设单向发送数据给监听范围内的任何外设,如以下插图所示。在这BLE中被称为Broadcasting

 

这是Apple iBeacon所使用的方法,例如,使用Manufacturer Specific Data字段在主要广播包中插入一个自定义载荷。

 蓝牙低功耗入门_第2张图片

一旦在外设和中央设备间建立了连接,广播过程通常将停止,再也不能发出广播包,将会使用GATT服务和特性进行双向通信。

 

GATT

GATT是Generic Attribute Profile的首字母缩写,定义了两个BLE设备使用称为Services(服务)和Characteristics(特性)的概念来回传送数据的方式。它使用称作Attribute Protocol(ATT)的通用数据协议,该协议用于在一个简单的查找表中储存服务、特性和相关数据,表中的每个入口使用16位ID。

 

一旦两个设备间建立起一个专用的连接,GATT就开始起作用,意味着你已经通过了由GAP支配的广播过程。

 

要记住GATT和连接最重要的事是连接独有的。这个意思是一个BLE外设一次只能连接到一个中央设备(移动电话,等等)!外设一连接中央设备,就会停止广播自身,其他设备将不再能够看到它或连接到它,知道存在的连接被打破。

 

建立连接也是允许双向通信的仅有方式,中央设备可发送有意义的数据到外设,反之亦然。

 

已连接网络拓扑

以下图应该说明了BLE设备工作在已连接环境的方式。外设一次只能连接到一个中央设备(如移动电话),但是中央设备可以连接到多个外设。

 

如果数据需要在两个外设间交换,需要执行一个自定义的邮箱系统,所有消息通过中央设备传递。

 

一旦外设和中央设备间建立连接,不管怎样,通信会在两个方向上发生,这不同于使用广播数据和GAP的单向广播方法。

 蓝牙低功耗入门_第3张图片


GATT事务

理解GATT的最重要概念是server/client的关系。

 

外设被称为GATT Server,保存ATT查找数据以及服务和特性定义,GATT Client(电话/平板电脑)向这个server发送请求。

 

所有的事务由主设备GATT Client启动,它接收来自于从设备GATTServer的响应。

 

当建立连接时,外设会提议一个“ConnectionInterval”(连接周期)给中央设备,中央设备将在每个连接周期试着重新连接,看是否有可用的新数据,等等。但是,最重要要记住的是这个连接周期实际上只是一个提议!中央设备因为正忙于与其他外设交谈,或者请求的系统资源刚好不适用,它可能不会履行请求。

 

下图应该说明了外设(GATT Server)和中央设备(GATTClient)之间的数据交换过程,主设备启动每次事务。

 蓝牙低功耗入门_第4张图片


服务和特性

BLE中的GATT事务基于高级的、嵌套的对象,称为Profiles, ServicesCharacteristics,如下图所示:

蓝牙低功耗入门_第5张图片蓝牙低功耗入门_第6张图片


Profiles(配置文件)

配置文件实际上不存在于BLE外设自身,它是已经由BluetoothSIG或由外设设计者编译的一个简单的预定义的服务集合。例如,心率配置文件(Heart Rate Profile)结合了心率服务(Heart Rate Service)和设备信息服务(Device Information Service)。官方所采用的已GATT为基础的配置文件(GATT-basedprofiles)的完整目录可在SIG的官网上找到(http://www.bluetooth.org或http://www.bluetooth.com )。

 

Services服务

服务用于将数据分为逻辑实体,含有称为特性的特定块数据。一个服务可以有一个或多个特性,每个服务依靠称为UUID的唯一数字ID与其他服务区分,UUID可以是16位(官方采用的BLE服务)或128位(自定义服务)。

 

官方所采用的BLE服务的完整列表可以在蓝牙技术联盟官网上看到。例如,查看心率服务,可以看到官方采用的服务有16位的UUID为0x180D,包含至多三个特性,但只有第一个是强制的:Heart Rate Measurement, Body Sensor Location 和 Heart RateControl Point。

 

Characteristics特性

GATT中最低级别的概念是特性,它封装了一个单一的数据点(但它可能包含一个相关数据的数组,如来自于3轴加速度传感器的X/Y/Z值,等等)。

 

同服务一样,每个特性通过一个预定义的16位或128位UUID区分,你可以免费使用由蓝牙SIG定义的标准特性(这确保了BLE激活的HW/SW的互通性),或者定义你自己的自定义特性,只有你自己的外设和SW能理解。

 

举个例子,Heart RateMeasurement(HRM)是心率服务的强制特性,使用UUID为0x2A37。它从一个单一的8位值开始,这个值描述了HRM数据格式(数据是UNIT8或UNIT16,等等),接着是包含了匹配该配置字节的心率测量数据。

 

特性是与BLE外设交互的主要点,因此理解这个概念很重要。它们也用于将数据发回到BLE外设,因为你也可能写入特性。你可以用一个自定义的“UART Service”和两个特性,一个用于TX通道,一个用于RX通道,来实现一个简单的UART类型接口。这里一个特性可能会配置为只读,另一个会有写的权限。


本文翻译系博主原创,欢迎指正!如需转载,请与博主联系。

你可能感兴趣的:(Bluetooth,develop)