
Core Bluetooth框架使得妳的iOS 和Mac 应用可以与蓝牙低功耗设置互相通信。举个例子,妳的软件可以发现、探索并且与低功耗外设交互:比如心率监视仪、数字式恒温器,甚至是其它的iOS 设备。
此框架是对用于低功耗设备的蓝牙4.0 规范的抽象。尽管如此,它还是为妳隐藏了此规范中的狠多底层细节,使得妳可以轻易地开发出可与蓝牙低功耗设备通信的软件。由于此框架是基于该规范的,所以从该规范中沿用了一些概念和术语。本章节就是介绍这些关键术语和概念的,妳需要了解它们,才能开发出基于Core Bluetooth 框架的优秀软件。
在蓝牙低功耗通信过程中,有两个主要的角色:中央设备和外设。基于某种稍显传统的客户端-服务器架构,一个外设通常拥有一些被其它设备所需要的数据。中央设备通常会利用由外设提供的数据来完成自己的特定任务。比如,就像图1-1 显示的那样,一个心率监视仪可能拥有一些有用的数据,而妳的Mac 或iOS 软件需要这些数据,并用这些数据来以一种友好的形式显示出用户的心率。
图1-1 中央设备和外设
外设以广播数据包的形式来广播出它们所拥有的某些数据。广播数据包是一砣比较小的数据,其中包含有关于该外设能够提供什么数据的有用信息,例如该外设的名字和主要功能。比如,一个数字式恒温器可能会广播说它能够提供房间里的当前温度数据。在蓝牙低功耗的世界中,发送广播是外设让其它设备知道它的存在的主要方法。
另一方面,中央设备,可以扫描并监听那些正在广播自己所关心的信息的外设,图 1-2 中有说明。中央设备可以要求连接到任何一个被它发现正在广播的外设。
图1-2 广播及发现
连接到一个外设的目的是获取及修改它所拥有的数据。然而,在妳开始做这个动作之前,先了解一下外设中数据的组织方式是有好处的。
外设可能包含一个或多个服务,还可能提供了关于它们自身的信号连接强度的有用信息。一个服务代表的是由数据和关联的行为组成的集合,可用于实现特定功能,或者呈现出该设备的特定特性(或者理解成对设备的某种刻画)。例如,一个心率监视仪的某个服务,可能就是将它的心率传感器的心率数据暴露出来。
服务本身是由特性或嵌套的服务(即,对其它服务的引用)组成的。一个特性提供了关于该外设的服务的详细信息。例如,之前说过的心率服务,可能包含两个特性,其中一个说明了该设备的心率传感器的预期人体佩戴位置,另一个就用来传输心率数据。图1-3 展示了一个心率监视仪的服务和特性的一种可能结构。
图1-3 一个外设的服务和特性
当一个中央设备成功地与某个外设建立连接之后,它就可以探索该外设所提供的服务和特性的完整范围了(广播数据可能只包含所有服务中的一小部分)。
中央设备还可以与该外设的服务进行交互:读取或写入该服务的特性的值。例如,妳的软件可以请求从一个数字式恒温器中获取到当前的室温,也可以向该恒温器提供一个值要求它将室温改变成那个值。
在蓝牙低功耗通信过程中的主要角色和数据,是以一种简单直观的方式对应到Core Bluetooth 框架中的。
当妳使用本地的中央设备与远端的外设进行交互时,妳就是在进行着蓝牙低功耗通信中客户端的动作。除非妳建立起一个本地的外设—并且使用它来对中央设备的请求作出回应—否则妳的大部分蓝牙事务都是在中央设备一侧发生的。
关于如何在妳的软件中实现中央设备角色,参考“完成常见的中央设备任务”和“与远端外设交互时的最佳实践”。
在中央设备一侧,本地的中央设备是由 CBCentralManager 对象来表示的。这些对象被用于管理那些已被发现或连接到的远端外设(用 CBPeripheral 对象来表示),以及扫描、发现并连接到正在广播的外设。图1-4展示的是本地中央设备和远端外设在Core Bluetooth 框架中是如何表示的。
图1-4 中央设备一侧的Core Bluetooth对象
当妳正在与远端外设(由 CBPeripheral 对象表示)上的数据进行交互时,妳实际上在与它的服务和特性打交道。在Core Bluetooth 框架中,远端外设的服务是由 CBService 对象来表示的。类似地,远端外设的特性是由 CBCharacteristic 对象来表示的。图1-5展示了远端外设的服务和特性的基本结构。
从OS X v10.9 和iOS 6 开始,Mac和iOS设备可作为蓝牙低功耗外设来工作,为其它设备提供数据,包括其它的Macs、iPhones 和iPads。当妳将自己的设备做成外设角色时,妳实际上是在进行蓝牙低功耗通信中外设一侧的操作。
在外设一侧,一个本地外设是由一个 CBPeripheralManager 对象来表示的。这些对象被用于:管理本地外设的服务和特性数据库里已发布的服务;将这些服务广播到远端中央设备(由 CBCentral 对象表示)。外设管理器对象同时被用于对那些远端中央设备的读写请求作出响应。图1-6 展示的是本地外设和远端中央设备在Core Bluetooth 框架中是如何表示的。
当妳与本地外设(由 CBPeripheralManager 对象来表示)上的数据做交互时,妳实际上是在与它的服务和特性的可变(mutable)版本打交道。在Core Bluetooth 框架中,本地外设的服务是由 CBMutableService 对象来表示的。类似地,本地外设的服务中的特性是由 CBMutableCharacteristic 对象来表示的。图1-7展示了本地外设中的服务和特性的基本结构。
关于如何将妳的本地设备实现为外设角色的信息,参考“完成常见的外设角色任务”和“将妳的设备实现为外设的过程中的最佳实践 ”。
夏俊峰
HxLauncher: Launch Android applications by voice commands