最近看了一下蓝牙的方面,整理了一下各方面的资料,加入了些自己的理解。
iOS下Core Bluetooth 框架类之间的关系图:
理论知识必不可少,先插入一些收集到的有用的理论。
1.蓝牙开发分为中心者模式和管理者模式:a.常用的(其实99.99%)就是使用中心者模式作为开发,就是我们手机作为主机,连接蓝牙外设;b.管理者模式,这个基本用到的比较少,我们手机自己作为外设,自己创建服务和特征,然后有其他的设备连接我们的手机。
2.服务(services):蓝牙外设对外广播的必定会有一个服务,可能也有多个,服务下面包含着一些特征,服务可以理解成一个模块的窗口;
3.特征(characteristic):存在于服务下面的,一个服务下面也可以存在多个特征,特征可以理解成具体实现功能的窗口,一般特征都会有value,也就是特征值,特征是与外界交互的最小单位;
4.UUID:可以理解成蓝牙上的唯一标识符(硬件上肯定不是这个意思,但是这样理解便于我们开发),为了区分不同的服务和特征,或者给服务和特征取名字,我们就用UUID来代表服务和特征。
我把整个交互流程分为了下面五层,还是喜欢用笔写。。。先上个图吧。。。
从下往上层级越高,而我们的目的最后要操作的数据的读取和写入在第五层value上。上面两层是通用的,下面三层:服务、特征、数据这些你们的硬件工程师会给你提供相对应的文档。
整个流程下来很简单,我们主要说下后三层,主要的操作都在后三层。
我们的目的很明确,就是对最小单元value的读取或者写入,从而对外设进行指令操作。
每一层在iOS的方法中对应的都有一个关键的类(右侧英文)和若干代理方法,以便我们在这一层进行操作。
详细说一下整个流程,代码就不再上了,网上遍地都是。假设我们已经连接到我们的外设peripheral,我们首先需要拿到我们的外设(因为我们的手机可以连接多个外设,手环啊音响啊耳机啊之类的,所以要判断出我们自己的外设拿到它才能继续操作)。获得了外设之后,我们就可以找寻外设提供的若干服务services,这些服务一般都是协议好的,你的硬件工程师会告诉你。找到你需要的服务,遍历其中的特征characteristic,获得你需要的特征,它的属性value就是你需要进行读写的单元。
上面的每一步走的都是代理方法,当然你还需要处理异常的流程,同样也是对应的若干代理方法。
参考:
https://juejin.im/entry/58f70ecb61ff4b0058111df0
http://www.cocoachina.com/ios/20161021/17813.html