其它技术点理论ios开发进阶

iOS 初识CoreBluetooth

2017-07-03  本文已影响470人  wongstar

导语:

近距离通讯目前主要有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.


图一.png
1.CoreBluetooth framework角色分类

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

2.建立连接

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

图三.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];
图六.png

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


图七.png

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

上一篇 下一篇

猜你喜欢

热点阅读