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是如何实现。敬请期待。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

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