前言:项目中需要蓝牙开发,跌跌撞撞总算开发完成,记录一下。
一、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.简介:
- 可用于第三方蓝牙设备交互,设备必须支持蓝牙4.0
- iPhone的设备必须是4S或者更新
- iPad设备必须是iPad mini或者更新
- iOS的系统必须是iOS 6或者更新
- 蓝牙4.0以
低功耗
- 著称,所以一般被称为BLE(bluetooth low energy)
- 使用模拟器调试
- Xcode 4.6
- iOS 6.1
- 应用场景
- 运动手环
- 智能家居
- 拉卡拉蓝牙刷卡器
核心概念
- CBCentralManager:中心设备(用来连接到外部设备的管家)
- CBPeripheralManager:外部设备(第三方的蓝牙4.0设备)
比如手机app作为中心设备去发现和操作其它蓝牙设备,就是左边这种场景。反之手机、智能手环等蓝牙设备作为外设就是右边那种场景。
2.当手机作为中心设备去连接第三方蓝牙设备的时候,首先需要了解下面几个概念
服务:每一个外部设备都会拥有若干个服务,比如说你的智能手环可能会拥有一个管理你心率的服务,还有一个管理你跑步情况的服务。这些服务是你的硬件工程师设定的,作为我们在开发的时候只需要知道有哪些服务就可以了,每一个服务都会有一个唯一的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 };
外设、服务、特征间的关系
蓝牙中心模式流程
1. 建立中心角色
2. 扫描外设(discover)
3. 连接外设(connect)
4. 扫描外设中的服务和特征(discover)
- 4.1 获取外设的services
- 4.2 获取外设的Characteristics,获取Characteristics的值,获取Characteristics的Descriptor和Descriptor的值
5. 与外设做数据交互(explore and interact)
6. 订阅Characteristic的通知
7. 断开连接(disconnect)
蓝牙外设模式流程
1. 启动一个Peripheral管理对象
2. 本地Peripheral设置服务,特性,描述,权限等等
3. Peripheral发送广告
4. 设置处理订阅、取消订阅、读characteristic、写characteristic的委托方法