iOS 蓝牙框架CoreBluetooth

一、什么是蓝牙?

不同于有线传输,蓝牙® 设备使用无线电波连接电话或计算机。耳机或手表等蓝牙产品包含微型计算机芯片,上面搭载蓝牙无线电和软件以便于连接。当两个蓝牙设备想要互相对话时,它们需要配对。蓝牙设备之间的通信在短距离点对点网络(亦称为微微网)中发生。微微网是设备使用蓝牙技术连接在一起的网络。建立网络后,一台设备作为主设备,其他是从属设备。
蓝牙通过发展,目前最大的特点是:低功耗,高速度。

二、iOS 蓝牙框架

首先蓝牙通信协议(我也不知道具体协议名字,或许有多层、多个协议)规定了如下图所示的服务结构。
一个蓝牙设备可以有多个profile,一个profile里可以有多个服务, 每个服务包含多个特征 还可以包含子服务
一个特征有一个value,还有一些对特征进行描述的字段。

iOS 蓝牙框架CoreBluetooth_第1张图片
image.png

iOS有好几个框架里有蓝牙部分的支持,这里只讨论CoreBluetooth。
分别对应的类是CBService,CBMutableService ,CBCharacteristic,CBMutableCharacteristic 。没看到Profile的对应。
主设备用CBCentralManager来控制,从设备用CBPeripheralManager控制

用法:

我们假设一种最简单的列子,手机要读取温度传感器的数据。
那么用手机A模拟温度传感器 ,手机B作为展示和控制。
流程为:
手机A
实例化一个 CBPeripheralManager peripheralManager。
实例化一个 CBMutableService service (因为我们要设置服务的特征,所以要用Mutable)
实例化表示当前温度的一个特征 CBMutableCharacteristic tempCharacteristic
将tempCharacteristic 赋予服务 service.characteristics = [tempCharacteristic]
然后用peripheralManager 添加服务 并发出广播。
peripheralManager.add(service)
peripheralManager.startAdvertising()

手机B
实例化CBCentralManager centralManager
扫描周围的广播 centralManager.scan
扫描到广播便能得到代表手机A的CBPeripheral peripheralA (peripheral 外设的意思)
通过centralManager调用connect方法连接 peripheralA
连接成功后通过 peripheralA.discoverServices 去获得手机A刚刚发出的那个服务 service
然后通过service获取它的特征,获取特征的value等。

手机A可以通过peripheralManager 定时update tempCharacteristic的value
只要value一更新,手机B这边就会收到value被更新的回调。
就实现了 手机读取温度传感器的温度。

代码:https://github.com/tigerLBJ100910/Bluetooth-Demo
需要在xcode9上运行

你可能感兴趣的:(iOS 蓝牙框架CoreBluetooth)