我有多个具有相同服务和特征的BLE设备。我可以扫描和连接多个设备。在连接之后,当我尝试通过发送命令来区分每个连接时,它不起作用。它与单个设备完美配合。这是套接字连接吗?就像服务器生成子线程一样,每个客户端都可以通过线程维护连接。
请提供一些有关如何在其他设备从设备读取数据时扫描每个设备的提示。
-(void) scanDevice {
centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[centralManager scanForPeripheralsWithServices:nil options:0];
[AppDelegate app].cbCentral = centralManager;
}
-(void) stopScan {
[[AppDelegate app].cbCentral stopScan];
}
-(void)connectToDevice:(CBPeripheral *)peripheral{
[[AppDelegate app] cbCentral].delegate = self;
[[[AppDelegate app] cbCentral] connectPeripheral:peripheral options:nil];
}
-(void)calldiscoverServicesForPeripheral:(CBPeripheral *)peripheral{
[peripheral setDelegate:self];
[peripheral discoverServices:nil];
}
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {
NSLog(@"Connected PERIPHERAL %d",peripheral.state);
[delegate getConnectedPeripheral:peripheral];
NSLog(@"Connected peripheral %@",peripheral);
}
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error {
NSLog(@"Discovered servicea: %@", peripheral.services);
for (CBService *service in peripheral.services) {
NSLog(@"Discovered service: %@", [service.UUID data]);
[peripheral discoverCharacteristics:nil forService:service];
}
}
我会详细解释,
我有表格视图,其中包含BLE设备。这是第一次它是空的,所以我将通过调用类"扫描设备"来搜索设备。
这"扫描设备" class包含所有Corebluetooth方法,如CBCentralManager分配,CBperipheral委托方法。
搜索完成后,我将在表格视图中显示设备并连接到BLE设备。我从" Scan Device"中获取了一些数据。类。
现在,我想搜索更多设备进行连接并获取数据。为此,我将在" ScanDevices"中调用[[CBCentralManager alloc] initWithDelegate:self]。类。此时,对于之前的设备(连接和读取)显示警告"不是有效的外围设备"新设备正在连接并从设备读取数据。
但我希望一次从两个设备读取数据
请帮帮我... 感谢
答案 0 :(得分:1)
您不应该继续创建新的CBCentral - 这样做会导致您之前的CBCentral被取消分配,从而导致现有外围设备无效。
您应该激活一次扫描,例如viewWillAppear
,然后在viewWillDisappear
停用。
在ScanDevices
课程中开始扫描并设置代理后,每次找到并连接新的外围设备时,它都会调用[delegate getConnectedPeripheral:]
。