完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这张是蓝牙知识的结构图,下面的内容将围绕这些东西展开进行。
这张是蓝牙连接发送数据的流程图,下文进入coding阶段的讲解顺序,大家先有个大概印象,等阅读完本文再回来看这张图将理解的更深一些。 1、苹果对蓝牙设备有什么要求BLE:bluetouch low energy,蓝牙4.0设备因为低功耗,所有也叫作BLE。苹果在iphone4s及之后的手机型号开始支持蓝牙4.0,这也是最常见的蓝牙设备。低于蓝牙4.0协议的设备需要进行MFI认证,关于MFI认证的申请工作可以看这里:关于MFI认证你所必须要知道的事情 在进行操作蓝牙设备前,我们先下载一个蓝牙工具LightBlue,它可以辅助我们的开发,在进行蓝牙开发之前建议先熟悉一下LightBlue这个工具。 2、操作蓝牙设备使用什么库 苹果自身有一个操作蓝牙的库CoreBluetooth.framework,这个是大多数人员进行蓝牙开发的首选框架,除此之外目前github还有一个比较流行的对原生框架进行封装的三方库BabyBluetooth,它的机制是将CoreBluetooth中众多的delegate写成了block方法,有兴趣的同学可以了解下。下面主要介绍的是原生蓝牙库的知识。 中心和外围设备 如图所示,电脑、Pad、手机作为中心,心跳监听器作为外设,这种中心外设模式是最常见的。简单理解就是,发起连接的是中心设备(Central),被连接的是外围设备(Peripheral),对应传统的客户机-服务器体系结构。Central能够扫描侦听到,正在播放广告包的外设。 服务与特征外设可以包含一个或多个服务(CBService),服务是用于实现装置的功能或特征数据相关联的行为集合。 而每个服务又对应多个特征(CBCharacteristic),特征提供外设服务进一步的细节,外设,服务,特征对应的数据结构如下所示 3、如何扫描蓝牙 在进行扫描之前我们需要,首先新建一个类作为蓝牙类,例如FYBleManager,写成单例,作为处理蓝牙操作的管理类。引入头文件#import CBCentralManager是蓝牙中心的管理类,控制着蓝牙的扫描,连接,蓝牙状态的改变。 1)、初始化 CBCentralManagerOptionShowPowerAlertKey对应的BOOL值,当设为YES时,表示CentralManager初始化时,如果蓝牙没有打开,将弹出Alert提示框 CBCentralManagerOptionRestoreIdentifierKey对应的是一个唯一标识的字符串,用于蓝牙进程被杀掉恢复连接时用的。 2)、扫描 扫面方法,serviceUUIDs用于第一步的筛选,扫描此UUID的设备 options有两个常用参数:CBCentralManagerScanOptionAllowDuplicatesKey设置为NO表示不重复扫瞄已发现设备,为YES就是允许。CBCentralManagerOptionShowPowerAlertKey设置为YES就是在蓝牙未打开的时候显示弹框 3)、CBCentralManagerDelegate代理方法 在初始化的时候我们调用了代理,在CoreBluetooth中有两个代理,
这个方法标了@required是必须添加的,我们在self.centralManager初始换之后会调用这个方法,回调蓝牙的状态。状态有以下几种: 该枚举在iOS10之后已经废除了,系统推荐使用CBManagerState,类型都是对应的 peripheral是外设类 advertisementData是广播的值,一般携带设备名,serviceUUIDs等信息 RSSI绝对值越大,表示信号越差,设备离的越远。如果想装换成百分比强度,(RSSI+100)/100,(这是一个约数,蓝牙信号值并不一定是-100 - 0的值,但近似可以如此表示) 在蓝牙于后台被杀掉时,重连之后会首先调用此方法,可以获取蓝牙恢复时的各种状态 4、如何连接 在扫面的代理方法中,我们连接外设名是MI的蓝牙设备 连接的状态 对应另外的CBCentralManagerDelegate代理方法 连接成功的回调 连接失败的回调 连接断开的回调 连接成功之后并没有结束,还记得CBPeripheral中的CBService和CBService中的CBCharacteristic吗,对数据的读写是由CBCharacteristic控制的。我们先用lightblue连接小米手环为例,来看一下,手环内部的数据是不是我们说的那样。 其中ADVERTISEMENT DATA显示的就是广播信息。 iOS蓝牙无法直接获取设备蓝牙MAC地址,可以将MAC地址放到这里广播出来 FEEO是ServiceUUIDs,里面的FF01、FF02是CBCharacteristic的UUID Properties是特征的属性,可以看出FF01具有读的权限,FF02具有读写的权限。特征拥有的权限类别有如下几种:5、如何发送并接收数据 通过上面的步骤我们发现CBCentralManagerDelegate提供了蓝牙状态监测、扫描、连接的代理方法,但是CBPeripheralDelegate的代理方法却还没使用。别急,马上就要用到了,通过名称判断这个代理的作用,肯定是跟Peripheral有关,我们进入系统API,看它的代理方法都有什么,因为这里的代理方法较多,我就挑选几个常用的拿出来说明一下。 1)、代理方法 2)、步骤 通过这几个方法我们构建一个流程:连接成功->获取指定的服务->获取指定的特征->订阅指定特征值->通过具有写权限的特征值写数据->在didUpdateValueForCharacteristic回调中读取蓝牙反馈值 解释一下订阅特征值:特征值具有Notify权限才可以进行订阅,订阅之后该特征值的value发生变化才会回调didUpdateValueForCharacteristic 3)、实现上面流程的实例代码 比如我们要获取蓝牙电量,由硬件文档查询得知该指令是**0x1B9901**,那么获取电量的方法就可以写成 如果写入成功,我们将会在didUpdateValueForCharacteristic方法中获取蓝牙回复的信息。 6、如何解析蓝牙数据 如果你顺利完成了上一步的操作,并且看到了蓝牙返回的数据,那么恭喜你,蓝牙的常用操作你已经了解大半了。因为蓝牙的任务大部分就是围绕发送指令,获取指令,将蓝牙数据呈现给用户。上一步我们已经获取了蓝牙指令,但是获取的却是0x567b0629这样的数据,这是什么意思呢。这时我们参考硬件文档,看到这样一段: 那么我们就可以得出设备电量是 60%。 对数据解析的流程就是:判断校验和是否正确,是不是一条正确的数据->该条数据是不是我们需要的电量数据,即首字节为0x567b->根据定义规则解析电量,传给view显示。其中第一步校验数据,视情况而定,也有不需要的情况。(上述文章阐述归伦茨科技公司所有,转载请注明出处,更多相关信息欢迎关注微信公众号:lenze_tech或微信号:lenzetech) |
|
|
|
高通的蓝牙QCC308x和51xx芯片开发工具和文档必须高通审核才能下载和使用吗?
1205 浏览 0 评论
1501 浏览 0 评论
会员风采!华秋电子——致力于“为电子产业增效降本”的数字化智造平台
991 浏览 0 评论
【应用笔记】BlueNRG-LP、BlueNRG-LPS+省电模式
8042 浏览 1 评论
11263 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:39 , Processed in 0.654190 second(s), Total 63, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号