我正试图让我的中央(iOS设备)与两个外围设备(一个iOS设备,一个不是)进行通信。他们单独工作正常,但我发现一旦我涉及两个外围设备,只有连接到最近的外围设备能够从中央设备接收数据。有没有办法从中央向每个外设发送数据,而无需断开和重新连接外设?
这是我写给外围设备的代码:
- (void) peripheral: (CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBChatacteristic *)characteristic error:(NSError *)error{
NSString *newValue = [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding];
NSLog(@"Received: %@ from %@", newValue, peripheral.name);
CBPeripheral *sender = peripheral;
if([newValue isEqualToString:@"ready"]){
NSData *messageValue = [@"challenge dataUsingNSUTF8StringEncoding];
[sender writeValue:messageValue forCharacteristic:_writeCharacteristic type:CBCharacteristicWriteWithResponse];
NSLog(@"Challenge sent to %@", sender.name);
}
断点表示代码正在执行,日志显示“挑战已发送”到正确的外设,只是外设从未接收到它。
外围接收代码:
-(void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray<CBATTRequest *> *) requests{
for(int i=0; i<requests.count; i++){
CBATTRequest *request = requests[i];
if([request.characteristic.UUID isEqual:_writeCharacteristic.UUID]){
NSString *stringValue = [[NSString alloc] initWithData:request.value encoding:NSASCIIStringEncoding];
NSLog(@"Write Request: %@", stringValue);
}
}
答案 0 :(得分:0)
回答您的问题:是的,您可以与不同的外围设备建立多个连接并对其进行读/写。 iOS设备最多可以同时处理8个连接。
有关实施,请查看Apple的Core Bluetooth Programming Guide。你需要的所有东西都在那里解释。
正如建议:如果多个设备(让他们称之为B和C)应该从1个设备(称为A)接收数据,我将使用需要将数据发送到的设备A上的外围角色其他。因为设备B和C可以扫描,连接和订阅特征并接收更新,而无需再次阅读。