0

我正在尝试让我的中央(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);
        }
    }
4

1 回答 1

0

回答您的问题:是的,您可以有多个连接到不同的外围设备并读取/写入它们。iOS 设备最多可以同时处理 8 个连接。

对于实施,请查看 Apple 的核心蓝牙编程指南。你需要的所有东西都在那里解释。

就像一个建议:如果多个设备(我们称它们为 B 和 C)应该从 1 个设备(称为 A)接收数据,我将使用设备 A 上的外围角色,该角色需要将数据发送给其他设备。因为这样设备 B 和 C 就可以扫描、连接和订阅特性并接收更新,而无需再次读取。

于 2016-11-11T09:43:18.890 回答