####导语:

近距离通讯目前主要有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相关推荐

  1. iOS 蓝牙 Corebluetooth

    蓝牙的现状: *绝大多数智能手机支持蓝牙4.0(BLE) *蓝牙芯片发展迅速,在性能和效率方面都有很大提高,且不断变得更小更便宜 *iBeacon +蓝牙,前景一片光明 -应用之一:室内导航 -Est ...

  2. iOS 蓝牙(CoreBluetooth)

    iOS中提供了4个框架用于实现蓝牙连接 GameKit.framework(用法简单) 只能用于iOS设备之间的连接,多用于游戏(比如五子棋对战),从iOS7开始过期 MultipeerConnect ...

  3. IOS用coreBluetooth库连接蓝牙外设(Andriod设备作为外设设备)出现The connection has timed out unexpectedly.

    情形:公司IOS项目用coreBluetooth库连接蓝牙外设(Andriod设备作为外设设备)出现The connection has timed out unexpectedly,但是androi ...

  4. iOS CoreBluetooth 教程

    去App Store搜索并下载"LightBlue"这个App,对调试你的app和理解Core Bluetooth会很有帮助. ========================== ...

  5. ios蓝牙开发 ------ CoreBluetooth 教程lt;转gt;

    原文地址:http://blog.csdn.net/jimoduwu/article/details/8917104 去App Store搜索并下载"LightBlue"这个App ...

  6. 苹果IOS的ANCS服务

    苹果IOS的ANCS官网网址: https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleN ...

  7. CoreBluetooth.framework基本使用

    去AppStore搜索并下载"LightBlue"这个App,对调试你的app和理解CoreBluetooth会很有帮助. ============================ ...

  8. Core Bluetooth

    去App Store搜索并下载"LightBlue"这个App,对调试你的app和理解Core Bluetooth会很有帮助. ========================== ...

  9. Core Bluetooth 使用教程

    去App Store搜索并下载"LightBlue"这个App,对调试你的app和理解Core Bluetooth会很有帮助. ========================== ...

最新文章

  1. V8 Design Elements(翻译)
  2. javascript加python_是否可以在javascript中添加一些新的语法?
  3. TreeView的复选框隐藏 重新整理
  4. Redis源码剖析(八)链表
  5. 微前端之qiankun
  6. linux 磁盘查看方式
  7. csharp read excel file get sheetName list
  8. 信号与槽是如何实现的_苹果iPhone 12信号仍弱?网友反馈打不进电话需重启解决...
  9. 关于公司财务的预测,使用sklearn中的bp神经网络
  10. Python案例:按键测试
  11. jmeter压力性能测试-多台机器并发请求
  12. git向远程推送代码提示fatal: Authentication failed
  13. 机器学习基础 | 有监督学习篇
  14. 使用HTML编写简单的邮件模版
  15. java基础学习(3)
  16. 华为手机隐藏代码大全!一秒查出你的手机使用记录
  17. NOI国家集训队论文分类整理
  18. mysql查询每月最后一天数据_Mysql查询每个月的最后一天
  19. 通过PS制作逼真的车窗玻璃雨滴效果
  20. MFC里面的一些实例应用

热门文章

  1. JAVA实现图的邻接表以及DFS
  2. 在线分数加减乘除计算器
  3. hashmap面试问题
  4. 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
  5. 程序员选手机那些事儿
  6. 【Qt学习笔记】3.布局
  7. Centos7 下配置mysql5.6主从复制实例(一主两从)
  8. Linux学习笔记二十——系统裁剪之二
  9. java期末考试 6
  10. ftp,http YUM库