iOS 初识CoreBluetooth

导语:

近距离通讯目前主要有NFC(Near Field Communication),BLE(Bluetooth Low Energy)等技术,本文主要是讲BLE低功耗蓝牙传输。

一,BLE前世今生

在iOS开发中,蓝牙通讯有两种方式,一种是传统的蓝牙(Classic Bluetooth),另外一种就是低功耗BLE(Bluetooth Low Energy ).其中传统蓝牙用到的是ExternalAccessory库,需要过MFi认证,而BLE仅需要引入coreBluetooth Framework就行.

Note:使用CoreBluetooth库,手机需要iPhone 4S及以上机型, OS 版本需要iOS 6.0及以上版本。

二,初识Core Bluetooth framework

CoreBluetooth framework提供了iOS or Mac app BLE通讯的class 库,如图一所示上层Apps 通过core Bluetooth 访问底层的BLE GATT(Generic Attribute Profile)协议。GATT层具体实现是基于Bluetooth 4.0 specification.


iOS 初识CoreBluetooth_第1张图片
图一.png
1.CoreBluetooth framework角色分类

在CoreBluetooth framework中提供了两种角色。一种是中央设备,另外一种是外围设备.以下是它们具体定义:

  • 外围设备(Peripheral device)-->一般是简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备。例如XX手环,心率等
  • 中央设备(Central device)-->一般是连接外围设备,比如手机等
    如图二所示,Central对应的Client端,Peripherald对应Server端。Peripheral端做数据收集工作,比如心率,计步数据的采集。Central端一般是通过BLE获取到Peripheral端数据展示具体UI.


    iOS 初识CoreBluetooth_第2张图片
    图二.png
2.建立连接

如图三,外围设备一直广播自己的Ad(Advertising Data Payload广播数据)数据,中央设备负责Scan自己感兴趣的设备,接受到对应的Ad数据然后解析出相对应的数据,然后通过Scan Response Data Payload(扫描回复)包进行回复。如果中央设备扫描到相对应的设备,可以发送连接命令。连接成功就可以相互传输对应的数据。

图三.png
  • Ad(Advertising Data Payload)
    如图四所示:每种Ad数据最长可以包含 31 byte。这里广播数据可以填充设备名称或者随机一串数据.具体的Strcut如图中1B定义数据的长度,1B定义数据类型,剩下的定义数据,通过这个数据结构可以知道怎么写出相对应的解析AD程序。


    iOS 初识CoreBluetooth_第3张图片
    图四.png
  • 广播工作流程
    如下图五所示:外围设备会设定一个广播间隔,每个广播间隔中,它会重新发送自己的广播数据。广播间隔越长,越省电,但是也不太容易扫描到。其中广播间隔可以通过代码来调整。


    iOS 初识CoreBluetooth_第4张图片
    图五.png

三,数据传输Core Bluetooth Object

CBUUID 来标明的是具体哪个Service,Characteristic,具有唯一性,可以通过
uuidgen 命令生成对应唯一的UUID
Characteristic所对应的权限如下:使用枚举的形式来定义。如果需要2种以上的属性只需要加上逻辑或|符合比如CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite可读可写权限

typedef NS_OPTIONS(NSUInteger, CBCharacteristicProperties) {
    CBCharacteristicPropertyBroadcast                                               = 0x01,
    CBCharacteristicPropertyRead                                                    = 0x02,
    CBCharacteristicPropertyWriteWithoutResponse                                    = 0x04,
    CBCharacteristicPropertyWrite                                                   = 0x08,
    CBCharacteristicPropertyNotify  //定义通知模式                                                = 0x10,
    CBCharacteristicPropertyIndicate                                                = 0x20,
    CBCharacteristicPropertyAuthenticatedSignedWrites                               = 0x40,
    CBCharacteristicPropertyExtendedProperties                                      = 0x80,
    CBCharacteristicPropertyNotifyEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0)     = 0x100,
    CBCharacteristicPropertyIndicateEncryptionRequired NS_ENUM_AVAILABLE(NA, 6_0)   = 0x200
};

比如定义Notify具有通知模式的特征值,该特征值具有通知权限,可以在外设发生变化的时候直接通知中央设备.通常用这个属性来传输相应data,当外设更新及时通知中央设备更新UI.

  _notifyCharacteristic=[[CBMutableCharacteristic alloc] initWithType:charNotifyUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];
iOS 初识CoreBluetooth_第5张图片
图六.png
  • 在中央设备中获取外设相关信息
    CBCentralManager:管理Peripheral 的类,Peripheral对象提供发送,扫描,连接等接口的类.
    CBService: 外设所提供的服务.包含数个Characteristic.
    CBCharacteristic:通过读取CBCharacteristic特征值来获取到相对应的数据.

CBCentralManager获取外围设备CBPeripheral,通过CBPeripheral能获取到相对应的CBService,然后通过相对应的CBService获取到相对应的CBCharacteristic.通过CBCharacteristic能获取到具体值。
它们关系图图七所示 :


iOS 初识CoreBluetooth_第6张图片
图七.png
  • 在外设中获取中央设备相关信息
    CBPeripheralManager:管理Central的类。提供广播对应的服务等功能。
    CBMutableService:通过CBPeripheralManager来广播相对应服务
    CBMutableCharacteristic:相对应的服务。
    它们关系图如图八所示:


    iOS 初识CoreBluetooth_第7张图片
    图八.png

后续会继续介绍外围设备,中央设备iOS android是如何实现。敬请期待。

你可能感兴趣的:(iOS 初识CoreBluetooth)