iOS蓝牙编程指南 -- 核心蓝牙概述

Posted 廖利君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS蓝牙编程指南 -- 核心蓝牙概述相关的知识,希望对你有一定的参考价值。

小引

随着穿戴设备和智能家居的热情不断,app蓝牙的开发也很火热,基于ios蓝牙的开发资料有不少,但是最最值得学习的必然是apple自家的文档啦,我之前的项目基于蓝牙4.0,开发过程中用到Core Bluetooth框架,算是我学习的笔记吧!涉及到几个部分,我打算分开把他们整理出来,本篇文章通过对Core Bluetooth Programming Guide的翻译,为大家介绍iOS蓝牙4.0编程的一些术语和概念,后续文章将会简单介绍下代码的流程。本人实力有限,了解的深度不是很广,还请各位看官轻点拍砖!

话不多说说,让我们进入正题吧:

注:本文译自Core Bluetooth Programming Guide

核心蓝牙概述

Core Bluetooth 框架使你的 Mac/iOS app 能够与低功耗蓝牙设备进行通讯。例如,你的app能够搜寻,探索低功耗蓝牙设备,并与之互动,如心率监听器,数字恒温器,甚至能够与其它iOS设备进行交互。

该框架基于BLE4.0规范,直接适用于蓝牙低功率设备的使用。也就是说,该框架隐藏了很多开发规范的底层实现细节,使您更容易开发出与蓝牙低功耗设备进行交互的app。因为该说明中涉及到蓝牙框架的一些概念和术语在本说明中已经被广泛采用,本文将向你介绍这个 Core Bluetooth 框架中的一些关键术语和概念。

Central 和 Peripheral 在蓝牙交互中的角色

所有涉及蓝牙低功耗的交互中有两个主要的角色:中心Central和外围设备Perpheral。根据一些传统的客户端-服务端结构,Peripheral通常具有其他设备所需要的数据,而Central通常通过使用Perpheral的信息来实现一些特定的功能。如下图所示,例如,一个心率监听器可能含有一些有用的信息,你的 Mac/iOS app 可能需要以用户友好的方式显示用户的心率。

技术分享
Alt text

Central 发现并连接广播中的 Peripheral

Peripheral向外广播一些广告包形式的数据,广告包是一个相对较小的束,可能包含Peripheral提供的有用信息资料,如外设的名称和主要功能。例如,一个数字恒温器可以广告包含其中的一个房间的即时温度。在低功耗蓝牙中,广播是Peripheral被获知的主要方式。

从另一方面说,Central可以扫描和监听任何对广播内容感兴趣的Peripheral。如下图,Central可以请求连接任何已对外广播内容的Peripheral

技术分享
Alt text

数据在 Peripheral 中如何构成

连接到Peripheral的目的是为了对它所提供的数据进行探索和交互。在此之前,理解数据在Peripheral中是怎样构成的将会对我们有所帮助。

Peripheral包含一个或者多个Service以及有关其连接信号强度的有用信息。Service是指实现一个函数或者功能的设备(或者设备的一部分)的数据采集和相关行为的集合。例如,一个心率监听器的Service可能包含从监听心率传感器采集的心率数据。

Service本身由Characteristic或者其他被包含的Service所组成。Characteristic提供了更多有关PeripheralService中的详细内容。例如,刚才描述的心率service中可以包含一个用来描述该设备的心率传感器所记录身体位置的characteristic或者包含发送测量心率数据的Characteristic。如下图,表示了一个心率监听器可能包含的ServiceCharacteristic

技术分享
Alt text

Central 在 Peripheral 上的数据探索及交互

Central成功与Peripheral建立连接后,就能发现到Peripheral提供的所有的ServiceCharacteristic。(广播数据可能只包含一部分可见的Service)

Central可以通过读取或者写入ServiceCharacteristicvaluePeripheral进行交互。例如,你的 app 可能从数字恒温器上请求当前的室内温度,或者为恒温器提供一个数值以设置室内温度。

Central,Peripherals 以及 Peripheral数据如何表示

有关低功耗蓝牙交互中的主要角色和数据在Core Bluetooth中以简单明了的方式表示。

Central 端的对象

当你使用本地Central和远程Peripheral进行交互,您将在低功耗蓝牙Central侧执行操作。除非你是建立一个本地Peripheral设备,并使它由一个Central端请求响应,大多数的蓝牙交互由Central端完成。

本地 Central 和远程 Peripheral

Central端,本地Central设备表示为CBCentralManager。这些对象用来管理发现或连接远程Peripheral设备(表示为CBPeripheral),包括扫描,发现和连接广播中的Peripheral。如下图所示:

技术分享
Alt text

远程 Peripheral 数据表示为 CBService 和CBCharacteristic

当你与远程Peripheral(表示为CBPeripheral)进行数据交互时,你将处理它的ServiceCharacteristic。在Core Bluetooth框架中,远程PeripheralService表示为CBService。相类似的,远程PeripheralServiceCharacteritic表示为CBCharacteristic。如下图所示:

技术分享
Alt text

Peripheral 端的对象

OS X v10.9和iOS6以上的Mac/iOS设备能够可以设置成低功耗蓝牙的Peripheral,为其他Mac/iPhone/iPad 传输数据。当你设置好你的设备使其能够实现Peripheral的角色,你就可以完成低功耗蓝牙交互的Peripheral端功能。

本地 Peripheral 和远程 Central

Peripheral端,一个Peripheral设备表示为CBPeripheralManager
。该对象用于管理那些包含本地Peripheral设备的ServiceCharacteristic数据的Service,通过广播这些服务的方式发布到远程Central设备(表示为CBCentral)。Peripheral manager对象同样可以响应远程Central的读取和写入请求。如下图所示:

技术分享
Alt text

本地 Peripheral 数据表示为 CBMutableService 和 CBMutableCharacteristic

当你设置好和本地Peripheral(表示为CBPeripheralManager)数据交互,就可以处理ServiceCharacteristic的可变版本。在Core Bluetooth框架中,本地PeripheralService表示为CBMutableService。同样地,本地PeripheralServiceCharacteristic表示为CBMutableCharacteristic。如下图所示:

技术分享







以上是关于iOS蓝牙编程指南 -- 核心蓝牙概述的主要内容,如果未能解决你的问题,请参考以下文章

蓝牙核心技术概述

IOS核心蓝牙:为特性编写NSData

蓝牙核心技术概述

如何以编程方式在 iOS 11 中打开蓝牙设置

iOS 7 的核心蓝牙弃用

iOS 7 的核心蓝牙弃用