我正在编写一个与多个(5个和10个之间)相同的BLE设备进行通信的应用程序。每个BLE设备都有多个特性,有些是静态的,有些是更新的,有些则可以写入。
该应用程序在导航控制器中嵌入了多个ViewController,适用于IOS设备(特别是IOS 8+和iPhone 6)。
为了使程序高效并与CoreBluetooth协同工作,我已经创建了类来管理BLE交互:
和
外围设备发送并由管理员接收的已知连接特性的数据随后存储在后端SQLite数据库中。
我面临的问题是回写连接的外围设备特性。我已经收集了CBC特性中的特征,但是当我尝试写入CBC特性的值为NULL时,它不会在类中持续存在。
以下是我使用过的代码的摘要:
BLEServicesClass中的CBC特性定义
#import "BLEServicesClass.h"
#import "BLEControlClass.h"
NSString *srModeUUIDString = @"346D0003-12A9-11CF-1279-81F2B7A91332";
@interface BLEServicesClass() <CBPeripheralDelegate> {
@private
CBPeripheral *servicePeripheral;
CBCharacteristic *srModeCharacteristic;
@end
didDiscoverCharacteristicForService
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error;
{
NSArray *characteristics = [service characteristics];
CBCharacteristic *characteristic;
if ([[characteristic UUID] isEqual:srModeUUID]) {
NSLog(@"didDiscoverServices - Mode Characteristic");
srModeCharacteristic = characteristic;
}
写入特征
-(void)writeCharacteristic:(CBCharacteristic *)whichCharacteristic data:(NSData*)data device:(NSString *)device
{
NSArray *devices;
devices = [[BLEControlClass sharedInstance] connectedPeripherals];
int i;
for (i = 0; i < [[[BLEControlClass sharedInstance] connectedPeripherals] count]; i++) {
CBPeripheral *peripheral=[[[BLEControlClass sharedInstance] connectedPeripherals] objectAtIndex:i];
peripheral.delegate=self;
NSString *tesfordevice = peripheral.name;
if (tesfordevice == device) {
[whichCharacteristic.service.peripheral writeValue:data forCharacteristic:whichCharacteristic type:CBCharacteristicWriteWithResponse];
}
}
}
这称为:
-(void)writeModeCharacteristic:(NSData*)data :(NSString *)device
{
[self writeCharacteristic:srModeCharacteristic data:data device:device];
}
我的问题是srModeCharacteristic最初在发现时正确设置但后来为NULL。
请帮忙吗?
答案 0 :(得分:0)
我建议始终按需解决特征 ,即通过迭代并采用匹配的UUID来获取第一个特征。如果没有,请进行新扫描-服务相同。
这样,你的程序将很容易地生存下来重新连接。