本文介绍了蓝牙的简单使用
一.蓝牙概念
蓝牙2.0为传统蓝牙,传统蓝牙也称为经典蓝牙.
蓝牙4.0因为低耗电,所以也叫做低功耗蓝(BLE).它将三种规格集一体,包括传统蓝牙技术、高速技术和低耗能技术.
二.BLE支持两种部署方式
1. 双模式
低功耗蓝牙功能集成在现有的经典蓝牙控制器中,或在现有经典蓝牙技术芯片上增加低功耗堆栈
,整体架构基本不变,因此成本增加有限.
2. 单模式
面向高度集成、紧凑的设备,使用一个轻量级连接层(Link Layer)提供超低功耗的待机模式操作、简单设备恢复和可靠的点对多点数据传输,还能让联网传感器在蓝牙传输中安排好低功耗蓝牙流量的次序,同时还有高级节能和安全加密连接.
三.蓝牙各版本使用选择
1. 蓝牙2.0,不上架
使用私有API,手机需要越狱.
2. 蓝牙2.0,要上架
进行MFI认证,使用ExternalAccessory框架.手机不需要越狱.
3. 蓝牙4.0,要上架
使用CoreBluetooth框架,手机不需要越狱.(CoreBluetooth是基于BLE来开发的)
4. 说明
对于小的硬件厂商来说,MFI认证通过几率不大,不仅耗钱还耗时,所以,还是推荐使用蓝牙4.0.
(MFI:Make for ipad ,iphone, itouch 专们为苹果设备制作的设备)
四.问题描述
公司要求iOS端需要和钢琴进行蓝牙连接并进行数据通信,我以为钢琴是蓝牙4.0,然后快速集成CoreBluetooth框架写了一个demo,扫描外设时,没有发现钢琴的蓝牙名称,可是用iphone打开系统设置,可以发现钢琴对应的蓝牙.问了安卓的同事,得知钢琴的蓝牙只有2.0的模块,所以,安卓端是用2.0蓝牙进行交互的.公司决定不做MFI认证,改用蓝牙4.0.在与硬件厂商交涉的过程中,得知钢琴中的蓝牙是4.0的,但是,他们在设计蓝牙板子的时候,没有集成低功耗技术.之后,板子寄回硬件厂商,添加BLE模块.这才踏上蓝牙4.0的正轨.
五.蓝牙4.0使用解析
1.基本知识
central:中心,连接硬件的设备.
peripheral:外设,被连接的硬件.
说明:外设在一直广播,当你创建的中心对象在扫描外设时,就能够发现外设.
如图所示:
service:服务.
characteristic:特征.
说明:一个外设包含多个服务,而每一个服务中又包含多个特征,特征包括特征的值和特征的描述.每个服务包含多个字段,字段的权限有read(读)、write(写)、notify(通知).
2.蓝牙4.0分为两种模式
中心模式流程
- 建立中心角色
[[CBCentralManager alloc] initWithDelegate:self queue:nil]
- 扫描外设
cancelPeripheralConnection
- 发现外设
didDiscoverPeripheral
- 连接外设
connectPeripheral
4.1 连接失败didFailToConnectPeripheral
4.2 连接断开didDisconnectPeripheral
4.3 连接成功didConnectPeripheral
- 扫描外设中的服务
discoverServices
5.1 发现并获取外设中的服务didDiscoverServices
- 扫描外设对应服务的特征
discoverCharacteristics
6.1 发现并获取外设对应服务的特征didDiscoverCharacteristicsForService
6.2 给对应特征写数据writeValue:forCharacteristic:type:
- 订阅特征的通知
setNotifyValue:forCharacteristic:
7.1 根据特征读取数据didUpdateValueForCharacteristic
外设模式流程
- 建立外设角色
- 设置本地外设的服务和特征
- 发布外设和特征
- 广播服务
- 响应中心的读写请求
- 发送更新的特征值,订阅中心
六.蓝牙4.0开发步骤
1.本文采用中心模式
导入CoreBluetooth框架,#import <CoreBluetooth/CoreBluetooth.h>
2.遵守CBCentralManagerDelegate,CBPeripheralDelegate
协议
3.添加属性
|
|
常量,具体服务和特征是读还是写的类型,问公司硬件厂商,或者问同事.
4.创建中心管理者
|
|
创建存储设备数组
5.扫描设备之前会调用中心管理者状态改变的方法
|
|
扫描设备
6.扫描到设备并开始连接
|
|
7.连接的三种状态,如果连接成功,则扫描所有服务(也可以扫描指定服务)
连接失败重连
连接断开重连
连接成功并扫描服务
8.发现服务并扫描服务对应的特征
|
|
9.扫描到对应的特征,写入特征的值,并订阅指定的特征通知.
|
|
10.根据特征读取到数据
|
|
读取值打印结果:
提示:上Appstore下载LightBlue,进行蓝牙通信测试.