前言
在最近一段时间中,经常听到有朋友在群里问谁做过蓝牙开发,如何如何。然而在实际工作过程中真的木有这方面的工作经历,倒是留意过这方面的知识,没有进入过实操,所以记忆不是很深刻。特此整理一下,以备不时之需。
正文
蓝牙是一种无限计数标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。
大白话就是蓝牙是一种短距离无线通信技术。
关键词说明
中心设备: 用来扫描周围蓝牙硬件的设备。
外部: 被扫描的设备。
广播: 外设不停的散播蓝牙信号,让中心设备可以扫描到。
服务: 外设广播和运行的时候会有服务,可以理解成一个功能模块,中心设备可以读取服务,外设可以有多个服务。每个服务又包含了很多字段,这些字段的权限一般分为 读read
,写write
,通知notiy
几种,就是我们连接设备后具体需要操作的内容。
特征: 在服务中的一个单位,一个服务可以有很多个特征,特征会有一个value,一般读写的数据就是这个value。
UUID: 区分不同的服务和特征,可以理解为服务和特征的身份证。
CoreBluetooth
框架
在iOS
中主要使用CoreBluetooth
框架实现蓝牙的开发。通过CoreBluetooth
可以轻松实现外设或中心设备的开发。
CoreBluetooth
框架可以分为两个模块:中心设备(peripheral),外设(central),它们都各有一套API
提供给开发者使用。
上图的左侧是中心设备开发相关的类,我们的一些相关操作是依靠CBCentralManager
来进行的。
-
CBCentralManager
: 蓝牙中心设备管理类,用来统一调度中心设备的开发。 -
CBPeripheral
: 蓝牙外设 -
CBService
: 蓝牙外设的服务,可以又0个或者多个服务 -
CBCharacteristic
: 服务中的特征,每一个蓝牙服务中可以又0个或多个特征,特征中包含数据信息。 -
CBUUID
: 可以理解为服务或特征的身份证,可以用来选择需要的服务和特征。
上图中右侧是外设开发相关的类
-
CBPeripheralManager
: 用于开发蓝牙外设的中心管理类 -
CBCentral
: 蓝牙中心设备 -
CBMutableService
: 外设开发的时候可以添加多个服务,所以这里用CBMutableService
来创建添加服务 -
CBMutableCharacteristic
: 每个服务中可以有多个特征,外设开发给服务添加特征的时候使用这个类 -
CBATTRequest
: 读或者写请求,它的实例对象有一个value属性,用来装在外设进行蓝牙读取或写入请求时的数据。一般在外设写入或读取的回调方法中有这样一个参数。
蓝牙设备的状态
- 待机状态(standby)
- 广播状态(advertising)
- 扫描状态(Scanning)
- 发起连接状态(Initiating)
- 已连接(Connected)
开发流程
蓝牙中心模式流程
- 建立中心角色
- 扫描外设
- 连接外设
- 扫描外设中的服务和特征
4.1 获取外设的services
4.2 获取外设的特征,获取特征中的值,以及特征值的描述 - 与外设做数据交互
- 订阅特征的通知
- 断开连接
蓝牙外设模式流程
- 启动一个Peripheral管理对象;
- 本地Peripheral设置服务,特性,描述,权限等等;
- Peripheral发送广告;
- 设置处理订阅、取消订阅、读特征、写特征的委托方法。
注意事件
蓝牙外设必需为4.0及以上(2.0需要MFI认证)
蓝牙第三库
再查阅各种资料学习蓝牙的时候,突然发现了在git
上一个很好的第三方库,BabyBluetooth。值得去学习一下。
简介
BabyBluetooth
是一个基于CoreBluetooth
框架封装的轻量级的开源库,可以很方便的使开发者使用CoreBluetooth
,同时它使用Block
替代了CoreBluetooth
的代理,减少了蓝牙开发过程中的代码量,同时它支持蓝牙设备中心模式和外设模式。
源码解读
关于BabyBluetooth
的源码的阅读,留待后续完成。