目录
一、简述
二、平台支持
三、GAP(通用接入规范)
1.Device Roles(设备角色)
2.Advertising and Scan Response Data(广播和扫描响应数据)
3.Advertising Process(广播过程)
4.Broadcast Network Topology(广播网络拓扑)
5.GATT(通用属性配置文件)
6.Connected Network Topology(连接网络拓扑)
7.GATT Transactions(GATT事务)
8.Services and Characteristis(服务和特征)
9.Profiles(配置文件)
10.Services(服务)
11.Characteristics(特征)
前面两篇文章我们也了解到了蓝牙的发展历程和大致分类,关于Android中的蓝牙我们也有了大致的了解。不清楚的童鞋可以简单阅读一下这两篇文章:
本文章主要来源于:Introduction to Bluetooth Low Energy
低功耗蓝牙(BLE),有时又被称为“Bluetooth Smart”,是经典蓝牙的轻量化,同时在Bluetooth 4.0 core specification规范中作为一部分进行介绍。尽管低功耗蓝牙和经典蓝牙存在一部分重复部分,但是低功耗蓝牙实际上有着完全不同的血统,并且再被蓝牙联盟(Bluetooth SIG)采纳之前是被诺基亚作为一个名为“Wibree”的内部项目启动的。
对于工程师和产品设计师而言有许多无线协议,但是使BLE如此有趣的在于几乎可以确定它是最简单的方式去设计一些产品能够与其他任何移动平台的设备(IOS,Android,Windows phones 等等)进行通信交互,同时 特别是在Apple设备上,它是唯一的硬件设计选项不需要你跳过无数的限制以便能够合法的为IOS设备推销你的产品。
本指南能够提供给你关于BLE的简述,尤其是在BLE中如何组织数据的,并且设备如何广播他们的数据,所以你们可以连接他们然后来来回回传递数据。
支持蓝牙4.0和低功耗蓝牙的主流平台如下表:
GAP是“Generic Access Profile”的首字母缩写,它控制着蓝牙的连接和广播。GAP使得你的设备能够对外部世界可见,并且决定两个设备能否彼此交流。
GAP定义了多种多样的设备角色,但是两个关键性角色起作用:Central devices(中心设备)和Peripheral devices(外围设备)。
(1)存在两种方式发送使用GAP发送广播数据。
广播包(Advertising Data)和扫描响应包(Scan Response Data).
(2)两种数据包是相同的,并且都能够容纳31字节的数据,但是只有广播包是强制的,因为它是有效载荷,能够不断地从设备中发出让范围内的中心设备能够知道它的存在。扫描响应包是可选的中央设备可以请求的辅助性数据包。并且允许设备设计者可以在广播数据中容纳共夺得信息,比如一个字符串设备名,等。
下面的图解解释了广播的过程和广播包和扫描响应包如何工作的。
一个外围设备会设置一个特殊的广播间隔,并且每一个广播间隔过去了,它都会发送发送广播数据包。更长的间隔能够减低功耗,但是如果设备每两秒而不是每20毫秒广播数据,就会收到更少的响应。
如果一个监听设备对扫描响应数据感兴趣(并且它是对外围设备可见的),它就可以选择性的请求扫描响应数据,并且外围设备会用附加数据进行响应。
多数外围设备通过广播发送数据,中心设备收到广播可以通过一定的形式,决定与什么类型的设备建立连接。当主从设备建立连接之后。GATT服务和特征(这些属性允许双向交换大量数据)可以被使用。但是有些情况下,并不需要中心设备与外围设备建立连接。下面就是当你只想广播数据的解决方案。
当前情况主要用于当你想让一个外围设备发送广播数据超过一个设备同时接收数据的情况。这种情况只能使用广播包进行数据的通信,因为数据的发送和接收再连接模式下只能够被两个连接的设备发现。
通过在31字节的广播包或者扫描相应数据包含少量的自定义数据,你能够使用低成本的蓝牙低功耗外围设备向可监听范围内的任何设备发送单向数据。这就是我们所知道的低功耗蓝牙广播。
例如这就是Apple的iBeacon的使用方法,它使用“Manufacture Specific Data”字段在主广播包里插入自定义数据。
一旦你在你的外围设备和中心设备确立了连接,广播程序通常就会停止,并且你通常不能够向外面发送任何广播数据包,然后你就可以使用GATT 服务和特征进行双向通信。
GATT是Generic Attribute Profile(通用属性配置文件)的首字母简写,它定义了一种用于在两个低功耗蓝牙设备之间使用Services(服务)和Characteristics(特征值)向前或者向后传递数据的方式。它使用叫做Attribute Protocol(ATT)的通用数据协议,被用来将Services(服务)和Characteristics(特征)和相关的数据存储在一张使用16位的ID进行查找的数据表。
一旦两个设备之间建立专有连接,GATT就会起作用,意味着你已经完成了由GAP管理的广播进程。
GATT和连接是专有的。也就意味着一个外围设备在某一时刻只能被一个中心设备连接!只要外围设备和中心设备建立连接,外围设备就会停止广播数据同时其他设备不再能接收到广播或者连接到该设备,直到已经建立的连接断开。
确立连接也是唯一的一种允许双向通信的方式,同时中央设备能够向外围设备发送有意义的数据,反之亦然。
下面的图解解释了低功耗蓝牙设备在连接环境中的工作方式。一个外围设备仅能够被一个中心设备连接,但是中心设备可以与多个外围设备建立连接。
如果需要在两个外围设备之间传递数据,一个自定义的邮箱系统需要被实现来完成所有的消息通过中央设备的功能。
一旦在外围设备和中央设备的连接建立,然而,通信是双向进行的,这与仅使用广播和GAP单向广播数据的方式是不同的。
理解GATT的重要概念是server/client模型。也就是说这也是最经典的C/S模型。
在这个C/S模型中,外围设备是GATT Server,它持有配置文件查询的数据,服务,特征定义,同时中心设备作为GATT Client,通常为手机或者平板将请求发送到服务,完成数据的通讯。数据通讯起始于主设备——GATT Client,它能够从附属设备(GATT Server)中接收响应。
当连接建立之后,外围设备会向中心设备建议一个”连接间隔“,然后中心设备就会尝试在每一个连接间隔去建立重连,然后看看是否能够接收任何新数据等等。时刻记住这个连接间隔就是建议的数值。你的中心设备也许不能发出请求,因为它也许正忙着和其他外围设备通信或者需要的系统资源不能获取。
下面的图解说明了在外围设备(the GATT Server)和中央设备(the GATT Client)的数据通信程序,同时主设备负责驱动每个事务:
GATT事务在低功耗蓝牙中是基于Profiles,Services 和Characteristics的高级嵌套对象,图解如下:
配置文件不存在于低功耗蓝牙外围设备中,它是一个简单的预定义“服务”集合,由蓝牙联盟(Bluetooth SIG)或者外围设备设计人员编译。配置文件一般就是外围设备开发人员根据SIG开发规范使用已经定义好的“服务”(BluetoothGattService)和“特征值”(BluetoothGattCharacteristic)或者自定义的“服务”、“特征值”的集合。例如:心率配置文件包含心率服务和设备信息服务。
Services(服务)用于将数据分解为逻辑实体,并包含叫做BluetoothGattCharacteristic(特征)的数据块。每个服务可具有一个或多个特征(Characteristics),并且每一个服务通过称为UUID的唯一数字ID与其他服务区分开来,UUID可以是16位(官方采纳的BLE服务)或者128位(自定义服务),关于UUID的更多信息,请参阅bluetooth-core-specification。
在GATT事务中最低等级的概念是BluetoothGattCharacteristic,它封装了单个数据点(尽管它可能包含相关数据的数组,例如来自三轴加速度计的X/Y/Z值等)
与服务相似,每一个特征通过预定义的16位或128位的UUID进行区分,你可以自由使用由Bluetooth SIG定义的标准特性(确保跨BLE和支持BLE的硬件/软件的互操作性)或定义你自己的外围设备和软件能过够理解的特性。
特性是你与外围设备进行交互的要点,所以理解这一概念非常重要。它们也被用于将数据发送回低功耗蓝牙的外设设备,因为你还可以写入特性。你可以实现一个使用自定义UART服务的简单UART类型的接口,一个用于TX通道,另一个用于RX通道,其中一个特性可能配置为制度,另一个特性可能配置位写权限。
>>下一篇:3-蓝牙开发之开启蓝牙