Core Bluetooth框架可让您的iOS和Mac应用程序与蓝牙低功耗设备进行通信。例如,您的应用可以发现,探索并与低能量外围设备(如心率监测器,数字恒温器,甚至其他iOS设备)交互。
该框架是蓝牙4.0规范的抽象,用于低能耗设备。也就是说,它隐藏了开发人员的许多低规格细节,使您更容易开发与蓝牙低功耗设备交互的应用程序。由于该框架基于规范,因此已采用规范中的一些概念和术语。本章向您介绍使用Core Bluetooth框架开始开发优秀应用程序时需要了解的关键术语和概念。
重要提示: 在iOS 10.0或之后链接的iOS应用必须在其Info.plist
文件中包含它需要访问的数据类型的使用说明密钥,否则将会崩溃。要专门访问蓝牙外设数据,它必须包含 NSBluetoothPeripheralUsageDescription
中央(central)和外围(peripheral)设备及其在蓝牙通信中的角色
所有蓝牙低功耗通信都涉及两个主要参与者:central
和peripheral
设备。基于某种传统的客户端(central) - 服务器(peripheral)架构,外设通常具有其他设备所需的数据。一个中心通常使用由外围设备提供了信息来完成一些特定的任务。正如图1-1所示,例如,心脏监测仪可能有用的信息,你的Mac或iOS应用可能需要以显示在用户友好的方式在用户的心脏速率。
中心设备发现并连接到广播的外围设备
外围设备以广播数据包的形式广播其中的一些数据。一个广播包是数据的一个相对较小的包可能包含什么外设所提供的,如外围设备的名称和主要功能的有用信息。例如,数字恒温器可以宣传它提供房间的当前温度。在低能耗蓝牙中,广播是外围设备使其存在已知的主要方式。
另一方面,中央设备可以扫描并聆听任何正在发布感兴趣信息的外围设备,如图1-2所示。中央设备可以要求连接到已发现广播的任何外围设备
外围设备的数据是如何结构化的
连接到外设的目的是开始探索并与其提供的数据进行交互。然而,在你做到这一点之前,它有助于理解外设数据的结构。
外设可能包含一项或多项服务或提供有关其连接信号强度的有用信息。一个服务是用于实现设备的功能或特征数据和相关联的行为(或该设备的各部分)的集合。例如,心率监测仪的一项服务可能是显示来自监护仪的心率传感器的心率数据。
服务本身由特征或包含的服务组成(即引用其他服务)。一个特征提供了有关外设服务的更多细节。例如,刚刚描述的心率服务可以包含描述设备的心率传感器的预期身体位置的一个特征以及传输心率测量数据的另一个特征。图1-3显示了心率监测仪服务和特性的一种可能结构。
中心设备探索并与外围设备数据进行交互
中央成功建立与外设的连接后,它可以发现外设必须提供的全部服务和特性(广播数据可能只包含部分可用服务)。
中央设备还可以通过读取或写入该服务特征的值来与外设的服务进行交互。例如,您的应用可能会从数字恒温器请求当前房间温度,或者它可能会向恒温器提供设定房间温度的值。
中央处理器,外设和外围数据如何表示
涉及蓝牙低能量通信的主要参与者和数据以简单直接的方式映射到Core Bluetooth框架。
本地的中心设备和远程外设
在中央侧,本地中央设备由CBCentralManager对象表示。这些对象用于管理发现或连接的远程外围设备(以CBPeripheral对象表示),包括扫描,发现和连接到广播外设。图1-4显示了本地中央处理器和远程外围设备在Core Bluetooth框架中的表现。
外围设备的数据由CBService和CBCharacteristic对象表示
当您与远程外围设备(由CBPeripheral对象表示)交互数据时,您正在处理其服务和特征。在核心蓝牙框架中,远程外设的服务由CBService对象表示。类似地,远程外围设备的服务特性由CBCharacteristic对象表示。图1-5说明了外围设备的服务和特性的基本结构
在外围设备端
从macOS 10.9和iOS 6开始,Mac和iOS设备可以用作蓝牙低功耗外设,为其他设备(包括其他Mac,iPhone和iPad设备)提供数据。当设置您的设备以实现外设角色时,您正在蓝牙低功耗通信的外围设备上执行操作。
本地外围设备和远程中心设备
在外围设备上,本地外围设备由CBPeripheralManager对象表示。这些对象用于管理本地外围设备的服务和特征数据库中的已发布服务,并将这些服务通告给远程中央设备(由CBCentral对象表示)。外设管理器对象也用于响应来自这些远程中心的读取和写入请求。图1-6显示了本地外围设备和远程中心如何在Core Bluetooth框架中表现出来。
本地外设的数据由CBMutableService和CBMutableCharacteristic对象表示
当您设置本地外围设备(由CBPeripheralManager对象表示)并与其交互时,您正在处理其服务和特性的可变版本。在核心蓝牙框架中,本地外围设备的服务由CBMutableService对象表示。同样,本地外设服务的特征由CBMutableCharacteristic对象表示。图1-7说明了本地外设的服务和特性的基本结构。