这几年一直在做IOS端的智能穿戴的APP,使用蓝牙开发的频率也比较高,所以对蓝牙开发还是有一定的了解,写篇文章记录总结。
理论知识,我就不详细说了。简单理解:我们手机是CBCentralManager,就是中心。我们的手环等是CBPeripheral,就是外设。
手机APP连接外设需要的步骤:搜索外设—>>连接外设—->>查找外设的服务—->>查找外设的服务对应特征。以上都是成功,不包括错误失败。
手机APP收发指令,都是通过 服务+特征 来进行处理。
具体的做法,我们可以看我封装的一个类,拖到项目中就可以用。
一、初始化
封装的类名为:BleOperatorManager
_bleOpt = [BleOperatorManager sharedInstance];
_bleOpt.delegate = self;
_bleOpt.realTimeUpdateDeviceListBlock = ^(NSArray *listArray, NSDictionary *rssiDic, NSDictionary *macDic) {
//实时返回搜索到的外设,listArray存了所有的外设结构(CBPeripheral *),macDic保存了外设的mac地址
};
_bleOpt.gainMacAddress = ^NSString *(NSDictionary *advertisementData) {
//解析mac地址,并返回给原类
NSData *data = advertisementData[@"kCBAdvDataManufacturerData"];
return @"FF:FF:FF:FF";
};
二、基本操作指令
搜索:startScanDevice:(NSArray *)adverUUIDArray
停止搜索:stopScanDevice
连接外设:connectSelectPeripheral:(CBPeripheral *)peripheral
断连:disconnectCurrentPeripheral:(BOOL)hasRecord
三、收发操作
前面说过,发送是需要 服务+特征 的,服务和特征,在连接蓝牙的时候,可以得到,当然也可以lightBlue查看。
然后发送就是:sendDataToBand:(NSData *)data WithServiceUUID:(NSString *)serviceUUID WithCharacteristicUUID:(NSString *)characteristicUUID withWriteType:(CBCharacteristicWriteType)writeType
如果发送是CBCharacteristicWriteWithResponse类型,那么发送完成后,就会调用
peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
//发送后的代理
}
接收数据:外设主动操作,我们只是对应代理回调:
peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
//收到的数据为:characteristic.value
}
四、后话
还得有下面的配置:
项目加入CoreBluetooth库
plist文件加入:
Required background modes:App communicates using CoreBluetooth
网友评论