低功耗蓝牙介绍[译]

本文将advertising翻译成告知,其他中文翻译可能翻译成为广告
本文将service关键字翻译成服务
本文将characteristic关键字翻译成特征
本文为了阅读方便部分Profile没有进行翻译
本文地址

介绍

低功耗蓝牙(BLE),有时候被称作"Bluetooth smart",是经典蓝牙的一种轻量化子集,并且被引入到蓝牙4.0的核心规划中。尽管和经典蓝牙在某些方面存在一些重合,BLE实际上是完全不同的系列,它首先作为诺基亚内部项目“Wibree”启动,后来才被蓝牙SIG采纳。

工程师和产品设计师有很多无限协议可供选择,但是为什么BLE如此受欢迎。因为BLE在现代移动平台(iOS,Android,Window Phone等)通信中最简单的方案。尤其是在苹果的设备中,这是你唯一不需要无休止地努力就可以合法为iOS设备生产的硬件设计选项。

本指南将为您提供BLE的快速概述,特别是BLE中的数据组织方式,以及设备是如何告知自己的存在,并进行连接,传输数据。

BLE支持平台

从下面列出的版本开始,大部分主流平台都支持蓝牙4.0和低功耗蓝牙(蓝牙4.0子集):

  • iOS5+ (最好iOS7+)
  • Android 4.3+ (大部分bug在4.4+被修复)
  • Apple OS X 10.6+
  • Windows 8 (XP, Vista and 7 only support Bluetooth 2.1)
  • GNU/Linux Vanilla BlueZ 4.93+

GAP

GAP(Generic Access Profile)是通用访问配置文件的缩写,它控制蓝牙的连接和告知。GAP使你的设备对外界可见,并确定在两个设备之间如何交互。

设备角色(Device Roles)

GAP为设备规定了多种角色,但是需要尤其注意两个关键概念中心设备(Central devices)和外围设备(Peripheral devices)

  • 外围设备通常是小型,低功耗的,资源受限设备,可以连接到功能更强大的中央设备。像诸如心率检测仪,启用BLE的接近标签等都是外围设备。
  • 中央设备通常是您连接的手机或平板电脑,具有更大的处理能力。

告知和扫描返回数据(Advertising and Scan Response Data)

有两种方法可以通过GAP发送告知,告知数据(Advertising Data)负载和扫描响应(Scan Response)负载

这两种负载都是相同的,并且都可以最多包含32 bytes的数据,但是只有广告数据的负载是强制性的。因为需要不断从设备发出以便让范围内的中央设备知道它的存在。扫描响应负载是中央设备可以请求的第二可选负载。告知负载允许设计人员在其中添加更多信息,例如设备名称字符串等。

告知过程(Advertising Process)

下图说明告知过程和告知负载和扫描响应负载如何工作的。

外设将设置一个特定的告知间隔,并且没经过此间隔,它将重新发送主要告知包。如果设备每2秒告知一次而不是20毫秒告知一次,响应速度回变慢,并且长延迟可以降低功耗。

如果监听设备对扫描响应负载感兴趣(并且在在外围设备上可用),它可以有选择的请求扫描响应负载,并且外围设备将使用附加数据进行响应。

广播网络拓扑(Broadcast Network Topology)

虽然大多数外围设别会自己告知,以便建立连接并可以使用GATT服务和特征(这样可以双向交换更多数据),但在某些情况下,你只需要告知数据。

主要的用例是你想外围设备一次将数据发给多个设备。只能通过告知包来实现,因为在连接模式中发送和接受数据只能被两个连接的设备看到。

通过31bytes的告知或扫描响应负载中包含少量自定义数据,你可以低成本的使用BLE外设将数据发送到侦听范围内的任何设备。如下图所示,这被称为BLE中的广播。

例如,这是Apple iBeacon中使用的方法,该方法使用“制造商特定数据”( Manufacturer Specific Data)字段在主告知数据中插入了自定义负载。

一旦你的外围设备和中央设备之间建立连接,告知过程通常将停止,你也不能再发送告知数据包。之后,你将使用GATT服务和特征(services and characteristics)进行双向通信。

GATT

GATT是“通用属性配置文件”(Generic Attribute Profile)的缩写,它定义了两个BLE设备使用“服务和特征”概念来回传输数据的方式。它使用属性协议(Attribute Protocol ATT)将服务(Services),特征(Characteristic)和向群数据存储到一个简单的查询表中,该查询表中的每个条目均使用16-bit的ID。

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

关于GATT和连接最需要注意的事是连接是排他的。这就意味着,一个BLE外设在同一时间只能和一个中央设备(比如一个手机)连接。一旦一个外设连接到中央设备,外部设备回停止广播自己,同时其他设备将不能发现并连接到它。直到当前连接断开后,才能进行上面的操作。

建立连接是唯一能够允许双向通信的方式,之后中央设备可以向外围设备发送有意义的数据,反之也可以。

连接网络拓扑(Connected Network Topology)

下面这张图能够解释BLE设备在连接状态下如何工作。一个外设只能同一时间连接一个中央设备(例如一个手机),但是中央设备可以连接多个外设。

如果数据需要在两个外设之间传递,这个时候就需要自定义一个信息系统,这个系统将要通过中央设备传输所有的信息。

一旦外围设备和中央设备建立连接,通信可以由任何一方发起,这就跟使用告知数据和GAP进行单向广播方式不同。

GATT 交互(GATT Transactions)

GATT中一个重要的概念就是服务器和客服端的关系

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

所有的交互都是由主设备发起(GATT客户端),它们将接收到从设备(GATT服务端)的响应数据。

当连接建立后,外围设备将给主设备一个“连接间隔”,中央设备将会在每个连接间隔尝试重新连接,来查看是否由新数据可用。重要的是这个连接间隔实际上知识一个建议!你的中央设备可能因为正在和其他外设通信或者需要的系统资源不可用而无法满足该请求方式。

下面的图表展示了数据在外设(GATT服务端)和中央设备(GATT客户端)之间如何进行交互。在每次数据传输时,中央设备都需要初始化。

服务和特征(Services and Characteristics)

在BLE中GATT的交互都是基于称为Profiles,Services和Characteristics的高级嵌套对象。下图展示了它们的结构:

Profiles

Profiles实际上并不存在BLE外围设备上,它是由蓝牙SIG或外围设计人员编译的简单的预定义服务集合。例如:心率Profiles就是将心率Service和设备信息Service结合起来。完整的官方GATT的profiles可以在这里查看:Profiles Overview.

Services

服务用来将数据分解成逻辑实体,并且包括称为特征(characteristic)的特定数据块。一个服务可以包含一个或多个特征,并且每一个服务都使用称为UUID的唯一数字ID与其他服务区分开,UUID可以是16-bit(对于正式采用的BLE服务)或128-bit(对于自定义服务)。

可以在Bluetooth Developer Portal的Services页面上查看正式采用的BLE服务的完整列表。如果你查看“心率服务”,我们可以看到正式采用的服务具有16-bit的UUID 0x180D,并包含多达3个特征,尽管只有一个是必选的:心率测量,身体传感器位置和心率控制点。

Characteristics

GATT事务中最底层的概念是特征,它封装了一个数据点(尽管它可能包含一组相关的数据,例如来自3轴加速器的x/y/z值等)。

与服务类似,每个特征都通过预定义的16-bit或128-bit的UUID进行区分,您可以自由使用Bluetooth SIG定义的标准特征(standard characteristics defined by the Bluetooth SIG)(确保跨硬件和启用BLE的硬件/软件之间的兼容性)或定义自己的只有外围设备和软件才能识别自定义特征。

例如,心率测量特征(Heart Rate Measurement characteristic
)对于心率服务是必须的,并且使用0x2A37的UUID。特征数据从描述HRM数据格式的单个8-bit开始(无论数据时uint8还是uint16等),然后是与该配置字节匹配的心率测量数据。

特征是你与BLE外设进行交互的重点,因此了解这一概念很重要。它们也用于将数据发送回BLE外设,因此你也可以写入特征。您可以声明一个自定义UART服务和两个特征,一个特征用于TX通道并配置成只读,而另一个特征用于RX通道配置成可写权限。

Bluetooth SIG Resources

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容