ios蓝牙封装面向智能硬件

蓝牙搜索

蓝牙搜索的功能方法中,用系统原生的方法scanForPeripheralsWithServices:options:,在蓝牙搜索的代理方法centralManager:didDiscoverPeripheral:advertisementData:RSSI:里获取搜索结果,用Block返回搜索结果。另外添加了方法通过设置参数nameStr来筛选返回的设备名称,nameStr为设备模糊搜索参数,设备中包含nameStr字段即可返回搜索结果。

封装后的代码调用方法如下:

1
/** *  开始搜索蓝牙外设,每次在block中返回一个蓝牙外设信息 * * @param nameStr  模糊搜索设备名称,目标设备名称包含字段 *  返回的block参数可参考CBCentralManager 的 centralManager:didDiscoverPeripheral:advertisementData:RSSI: * * @param discoverBlock 搜索到蓝牙外设后的回调 */- (void)scanForPeripheralsWithPrefixName:(NSString *)nameStr discoverPeripheral:(FZDiscoverPeripheralBlock)discoverBlock;

蓝牙设备的连接

蓝牙的连接为系统方法connectPeripheral:options:,连接设备的结果分别通过代理方法centralManager:didConnectPeripheral:返回成功、centralManager:didFailToConnectPeripheral:error:返回失败,通过两个Block分别返回成功和失败。其中成功后要停止搜索stopScan,失败要返回失败原因。

代码方法如下:

1
2
3
4
5
/***连接某个蓝牙外设,并查询服务,特性,特性描述**@paramperipheral
要连接的蓝牙外设*@paramcompletionBlock
操作执行完的回调*/-(void)connectPeripheral:(CBPeripheral*)peripheral
completeBlock:(FZConnectSuccessBlock)completionBlock
failBlock:(FZConnectFailBlock)failBlock;

写入数据

写入数据,在大多数的第三方方法里会有UUID、characteristic、peripheral等很多参数,混乱不易理解。这里我封装后只留了一个characteristic特性参数,而且已经帮大家筛选出来了,可以在封装方法头文件里,连接设备成功后直接获取到。另一方面,写入内容直接用NSString类型就可以,内部会自动转成NSData格式写入设备。

写入数据原生方法为writeValue:forCharacteristic:type:,写入数据后会在代理方法peripheral:didWriteValueForCharacteristic:error:方法里得到是否写入成功,成功与否用Block返回了结果。另外,如果蓝牙设备有应答的时候,会在peripheral:didUpdateValueForCharacteristic:error:方法里返回,也一并封装到了写入方法里,通过Block返回应答结果。

代码封装后的接口为:

1
2
/** *  往某个特性中写入数据 * * @param dataStr
写入的数据 * @param characteristic 特性对象 * @param completionBlock 写入完成后的回调,只有type为CBCharacteristicWriteWithResponse时,才会回调 */- (void)writeValue:(NSString *)dataStr forCharacteristic:(CBCharacteristic *)characteristic completionBlock:(FZWriteToCharacteristicBlock)completionBlock returnBlock:(FZEquipmentReturnBlock)equipmentBlock;

这里需要注意的是:实际开发中,可以用一个叫lightBlue的蓝牙开发辅助APP,看一下设备有多少特征值,我们实际用的时候需要用哪个,这个可以直接询问硬件厂商或硬件开发人员,然后在调用写入方法前,设置封装类中的属性UUIDString的对应值,可以保证连接过程中稳定不出问题

蓝牙的断开

蓝牙的断开,只留了一个方法,断开当前连接的设备,使用系统原生方法cancelPeripheralConnection:,设备的信息在连接时已自动记录,所以不需要传入参数

代码封装后的方法如下:

1
/** *  断开蓝牙连接 */- (void)cancelPeripheralConnection;

获取蓝牙设备的距离

用原生方法readRSSI获取设备的RSSI值,在方法peripheral:didReadRSSI:RSSI:error:方法里可以获取到,然后用RSSI值转换为距离值,Block返回结果。

封装后的方法如下:

1
/** *  获取某外设的距离 * * @param getRSSIBlock 获取信号完成后的回调 */- (void)readRSSICompletionBlock:(FZGetRSSIBlock)getRSSIBlock;

其他

其他的方法,头文件里开放了”RSSI转距离Double类型数据”、”NSData转16进制字符串”、”NSString类型转NSData类型数据”三个方法。


分享这篇文章:
收藏+0