神刀安全网

【iOS】CoreBluetooth 1 初识

公司做玩具的,很多地方需要和硬件通信,这个项目用到的是蓝牙,先开一个坑,以后再继续介绍其他的通信方式。

刚开始接触通信真是完全懵逼了好吗…Core Audio,Core Bluetooth 什么的完全不熟好吗…其中还涉及很多 Core Image,Core Video,AVFoundation 真是头大啊。学习曲线陡陡的,压力很大大大大…和硬件沟通的时候,一上来就是音频正弦波什么的,只能在旁边“哦哦哦…”。

因为自己是渣,所以就从渣的角度来谈谈 Core Bluetooth 吧。

环境信息:

Mac OS X 10.11.3

iOS 9.2.1

Xcode 7.2.1

Bluetooth 4.0

正文

因为是按照 API 的流程来学习的,所以还是按照 API 的顺序来写吧。文档链接:

当然,2013年的 WWDC 也讲到了 Core Bluetooth,更早期虽然也讲到了,但是并不建议去学习 API,因为 iOS9 真是弃用了一堆方法啊。WWDC 视频地址:

Overview

随着可穿戴设备的普及,蓝牙通信也用得越来越多了。常常谈到的 BLE 技术则是 Bluetooth Low Energy 的简称(见名知意…

Central 与 Peripheral

蓝牙通信中,首先需要提到的就是 Central 和 Peripheral 两个概念。这是设备在通信过程中扮演的两种角色。直译过来就是 [中心] 和 [周边(可以理解为外设)] 。iOS 设备既可以作为 Central,也可以作为 Peripheral,这主要取决于通信需求(但不能同时充当两个角色)。官方 API 上举的例子能很容易的帮助我们理解这两个角色。

在和心率监测仪通信的过程中,监测仪作为 Peripheral,iOS 设备作为 Central。区分的方式即是这两个角色的重要特点:提供数据的是谁,谁就是 Peripheral;需要数据的是谁,谁就是 Central。就像是 Client 和 Server 之间的关系一样。

【iOS】CoreBluetooth 1 初识

那怎么发现 Peripheral 呢?

在 BLE 中,最常见的就是广播。实际上,Peripheral 在不停的发送广播,希望被 Central 找到。广播的信息中包含它的名字等信息。如果是一个温度调节器,那么广播的信息应该还会包含当前温度什么的。

那么 Central 的作用则是去 scan,找到需要连接的 Peripheral,连接后便可进行通信了。

Peripheral 数据构成

虽然是说通信,但是苹果还是很贴心的先讲解了 Peripheral 的基本构成。因为后面很多的用法都涉及到这个构成,毕竟苹果的命名规范就是已长著称的不是吗。所以,如果了解了构成,那后面的类名真是很容易明白(这也是我不翻译关键词的原因)。

一个 Peripheral 包含一个或多个 Service ,或提供关于信号强度的信息。Service 是数据和相关行为的集合。例如,一个心率监测仪的数据就可能是心率数据。

Service 本身又是由 Characteristic 或者其他 Service 组成的。Characteristic 又提供了更为详细的 Service 信息。还是以心率监测仪为例,Service 可能会包含两个 Characteristic,一个描述当前心率带的位置,一个描述当前心率的数据。

【iOS】CoreBluetooth 1 初识

相关类

当 Central 成功连上 Peripheral 后,它便可以获取 Peripheral 提供的所有 Service 和 Characteristic。通过对 Characteristic 的数据进行读写,便可以实现 Central 和 Peripheral 的通信。

设备作为 Central 时

当 Central 和作为外设的 Peripheral 通信时,绝大部分操作都在 Central 这边。此时,Central 被描述为  CBCentralManager ,这个类提供了扫描、寻找、连接 Peripheral (被描述为  CBPeripheral )的方法。

下图标示了 Central 和 Peripheral 在 Core Bluetooth 中的表示方式:

【iOS】CoreBluetooth 1 初识

当你操作 Peripheral 的时候,实际上是在和它的 Service 和 Characteristic 打交道,这两个分别由  CBService 和  CBCharacteristic 表示。

一个 Peripheral 包含多个 Service,而一个 Service 又可以包含多个 Characteristic,所以他们的关系大致可以表示为:

【iOS】CoreBluetooth 1 初识

设备作为 Peripheral 时

在  OS X 10.9 和 iOS 6 以后,设备除了能作为 Central 外,还可以作为 Peripheral。也就是说,可以发起数据,而不像以前只能管理数据了。

那么在此时,它被描述为  CBPeripheralManager ,既然是作为 Peripheral,那么这个类提供的主要方法则是对 Service 的管理,同时还兼备着向 Central 广播数据的功能。Peripheral 同样会对 Central 的读写要求做出相应。

下图则是设备作为 Central 和 Peripheral 的示意图:

【iOS】CoreBluetooth 1 初识

在充当 Peripheral 时, CBPeripheralManager 处理的是可变的 Service 和 Characteristic,分别由  CBMutableService 和  CBMutableCharacteristic 表示。

下图则是在设备 Peripheral 时,相关类的关系:

【iOS】CoreBluetooth 1 初识

之后还会讲到更多的关于 Central 和 Peripheral 的细节。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 【iOS】CoreBluetooth 1 初识

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮