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.


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

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

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


    图二.png
2.建立连接

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

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


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


    图五.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:管理Peripheral 的类,Peripheral对象提供发送,扫描,连接等接口的类.
    CBService: 外设所提供的服务.包含数个Characteristic.
    CBCharacteristic:通过读取CBCharacteristic特征值来获取到相对应的数据.

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


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


    图八.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 蓝牙简介 蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离...
    Chefil阅读 2,070评论 2 19
  • 随着智能家具、智能穿戴等的兴起,蓝牙开发应用越来越广泛,有关蓝牙方面的问题,今天就给大家进行详细的讲解,想要了解蓝...
    知易行难880721阅读 652评论 0 0
  • 欢迎访问我的博客 muhlenXi,该文章出自我的博客,欢迎转载,转载请注明来源: http://muhlenxi...
    卖码维生阅读 1,152评论 0 7
  • 薛宝钗和林黛玉在《红楼梦》当中最主要的两个女孩子,两个人各有特点,无论是在个性上,还是外貌上,都有显著的区别,但是...
    冰珊醉红楼阅读 2,819评论 4 6
  • 今天是农历七月初七,也就是中国的传统节日七夕节。在这个理应与爱人共度的佳节,我推着盒饭在重庆至上海的k1154次列...
    樊江艳阅读 504评论 -1 3