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.
#####1.CoreBluetooth framework角色分类
在CoreBluetooth framework中提供了两种角色。一种是中央设备,另外一种是外围设备.以下是它们具体定义:
- 外围设备(Peripheral device)-->一般是简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备。例如XX手环,心率等
- 中央设备(Central device)-->一般是连接外围设备,比如手机等 如图二所示,Central对应的Client端,Peripherald对应Server端。Peripheral端做数据收集工作,比如心率,计步数据的采集。Central端一般是通过BLE获取到Peripheral端数据展示具体UI.
#####2.建立连接 如图三,外围设备一直广播自己的Ad(Advertising Data Payload广播数据)数据,中央设备负责Scan自己感兴趣的设备,接受到对应的Ad数据然后解析出相对应的数据,然后通过Scan Response Data Payload(扫描回复)包进行回复。如果中央设备扫描到相对应的设备,可以发送连接命令。连接成功就可以相互传输对应的数据。
Ad(Advertising Data Payload) 如图四所示:每种Ad数据最长可以包含 31 byte。这里广播数据可以填充设备名称或者随机一串数据.具体的Strcut如图中1B定义数据的长度,1B定义数据类型,剩下的定义数据,通过这个数据结构可以知道怎么写出相对应的解析AD程序。
广播工作流程 如下图五所示:外围设备会设定一个广播间隔,每个广播间隔中,它会重新发送自己的广播数据。广播间隔越长,越省电,但是也不太容易扫描到。其中广播间隔可以通过代码来调整。
###三,数据传输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];
复制代码
- 在中央设备中获取外设相关信息 CBCentralManager:管理Peripheral 的类,Peripheral对象提供发送,扫描,连接等接口的类. CBService: 外设所提供的服务.包含数个Characteristic. CBCharacteristic:通过读取CBCharacteristic特征值来获取到相对应的数据.
CBCentralManager获取外围设备CBPeripheral,通过CBPeripheral能获取到相对应的CBService,然后通过相对应的CBService获取到相对应的CBCharacteristic.通过CBCharacteristic能获取到具体值。 它们关系图图七所示 :
- 在外设中获取中央设备相关信息 CBPeripheralManager:管理Central的类。提供广播对应的服务等功能。 CBMutableService:通过CBPeripheralManager来广播相对应服务 CBMutableCharacteristic:相对应的服务。 它们关系图如图八所示:
后续会继续介绍外围设备,中央设备iOS android是如何实现。敬请期待。
iOS 初识CoreBluetooth相关推荐
- iOS 蓝牙 Corebluetooth
蓝牙的现状: *绝大多数智能手机支持蓝牙4.0(BLE) *蓝牙芯片发展迅速,在性能和效率方面都有很大提高,且不断变得更小更便宜 *iBeacon +蓝牙,前景一片光明 -应用之一:室内导航 -Est ...
- iOS 蓝牙(CoreBluetooth)
iOS中提供了4个框架用于实现蓝牙连接 GameKit.framework(用法简单) 只能用于iOS设备之间的连接,多用于游戏(比如五子棋对战),从iOS7开始过期 MultipeerConnect ...
- IOS用coreBluetooth库连接蓝牙外设(Andriod设备作为外设设备)出现The connection has timed out unexpectedly.
情形:公司IOS项目用coreBluetooth库连接蓝牙外设(Andriod设备作为外设设备)出现The connection has timed out unexpectedly,但是androi ...
- iOS CoreBluetooth 教程
去App Store搜索并下载"LightBlue"这个App,对调试你的app和理解Core Bluetooth会很有帮助. ========================== ...
- ios蓝牙开发 ------ CoreBluetooth 教程lt;转gt;
原文地址:http://blog.csdn.net/jimoduwu/article/details/8917104 去App Store搜索并下载"LightBlue"这个App ...
- 苹果IOS的ANCS服务
苹果IOS的ANCS官网网址: https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleN ...
- CoreBluetooth.framework基本使用
去AppStore搜索并下载"LightBlue"这个App,对调试你的app和理解CoreBluetooth会很有帮助. ============================ ...
- Core Bluetooth
去App Store搜索并下载"LightBlue"这个App,对调试你的app和理解Core Bluetooth会很有帮助. ========================== ...
- Core Bluetooth 使用教程
去App Store搜索并下载"LightBlue"这个App,对调试你的app和理解Core Bluetooth会很有帮助. ========================== ...
最新文章
- V8 Design Elements(翻译)
- javascript加python_是否可以在javascript中添加一些新的语法?
- TreeView的复选框隐藏 重新整理
- Redis源码剖析(八)链表
- 微前端之qiankun
- linux 磁盘查看方式
- csharp read excel file get sheetName list
- 信号与槽是如何实现的_苹果iPhone 12信号仍弱?网友反馈打不进电话需重启解决...
- 关于公司财务的预测,使用sklearn中的bp神经网络
- Python案例:按键测试
- jmeter压力性能测试-多台机器并发请求
- git向远程推送代码提示fatal: Authentication failed
- 机器学习基础 | 有监督学习篇
- 使用HTML编写简单的邮件模版
- java基础学习(3)
- 华为手机隐藏代码大全!一秒查出你的手机使用记录
- NOI国家集训队论文分类整理
- mysql查询每月最后一天数据_Mysql查询每个月的最后一天
- 通过PS制作逼真的车窗玻璃雨滴效果
- MFC里面的一些实例应用