做IOS开发也有很长时间了,但是一直没有做过蓝牙方面的开发。前段时间由于工作需要,开始接触蓝牙开发,刚开始做的时候也是各种看文档,搜索各种文章,资料什么的,费老大劲才摸清楚这个套路,网上虽然关于这方面的东西也有很多,但是总觉得看的不尽兴,所以想自己动手写一写,整理一下。
一 .简述
IOS中关于蓝牙的框架其实有四个:
(1)GameKit.framework 多用于游戏开发,仅限于ios设备之间的连接。
(2)MultipeerConnectivity.framework 这个就是ios设备之间互相传文件用的。
(3)ExternalAccessory.framework 这个框架可以用于和第三方蓝牙进行交互,但是必须是MFI(make for iphone,iPad,ipod。。。等等)设备,但是这种设备需要经过苹果的认证,而且比较困难,所以用的相当少。
(4)CoreBluetooth.framework 这就是我们的主角了,主要用于和第三方蓝牙的交互,这个不需要苹果的认证,但是必须是蓝牙4.0以上的设备(现在基本都是了),蓝牙4.0也叫BLE(Bluetooth Low Energy)所以一般都称之为BlE开发,从iPhone4s及其以后的设备都是支持BLE的。
所以说IOS的BLE开发其实就是CoreBluetooth.framework这个框架的使用,一般情况下现在所说的IOS蓝牙开发也都是BLE开发。我们现在所做的智能家居,智能手环,类似的这些东西基本都是使用的这种方式与iPhone连接的。
二.CoreBluetooth框架简介
1.首先要了解两个概念:
central:中心设备。一般为主动发起连接的设备就是中心设备。
peripheral:外设。外设顾名思义外部设备,比如你用你手机的APP去连接你的智能手环,此时,你的手机叫中心设备,手环就叫外部设备。一般为被连接的设备。又比如,如果是电脑发起连接来连接你的手机,那么此时你的手机就变成了外设,所以说手机可以作为中心设备,也可以作为外部设备。
2. CoreBluetooth框架其实就包含了以上两种场景:
一种就是手机作为中心设备时,和手机作为外部设备时。这两种情况分别有一组相应的API和类。如图所示:
比如说如果我们现在要开发一个智能手环,那么我们的手机就充当了中心设备的角色所以将会使用左边的这组类,反之如果我们要将我们的手机作为外设来开发,那么就会使用右边的这组。一般情况下我们使用左边的这组会相应的多一点。
3. 那么此时我们还需要了解另外几个概念:
服务:每一个外部设备都会拥有若干个服务,比如说你的智能手环可能会拥有一个管理你心率的服务,还有一个管理你跑步情况的服务。这些服务是你的硬件工程师设定的,作为我们在开发的时候只需要知道有哪些服务就可以了,每一个服务都会有一个唯一的UUID,就是一个字符串,用于辨别区分是哪个服务(外部设备也会有其对应的一个UUID),如果你连接到这个设备的话,你是可以搜索到这些服务的。
特征:每一个服务里边都会有若干个特征,我们就是通过这些特征值来与设备进行交互的,还拿手环的例子来说,比如在它的管理你跑步情况的服务中可能有两个特征值,一个特征是读取手环内你跑步的数据,一个特征是用于你的APP发送数据给这个服务,进行一些设置什么的,同样每个服务中的特征也是由你的硬件工程师设置好的,你只需要用就好了,当然这些特征值也会有其对应的一个唯一的UUID。
特征的属性:这些个特征的属性也是不尽相同有的是用来读数据的,有的是用来订阅通知的,有的是用来发送数据的,这些属性同样也都是设定好的,我们只需要知道哪一个特征是什么属性就好了。这些属性种类有一个枚举:
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 };
三.CoreBluetooth框架的基本使用流程
1.中心模式:
先创建中心设备的对象——>搜索外部设备——>连接目标外部设备——>扫描到外设中的服务——>获取到其中的特征——>通过这些特征于设备做数据的交互——>交互完毕断开连接
2.外设模式:
创建外部设备对象——>设置自己的服务,特征,权限等——>发布广告——>设置订阅以及读写特征的委托方法
这里先做一个简单的介绍,接下来还会持续的进行补充,争取将一这方面的内容,尽可能详细的介绍给大家,也会将开发过程中遇到的一些问题以及解决过程分享出来,如果有什么写的不对的地方还请多多指正,希望和大家一起努力,共同进步。
网友评论