一次与多个外围设备通信的核心

时间:2016-11-09 16:15:58

标签: ios bluetooth-lowenergy core-bluetooth ios-bluetooth

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

1 个答案:

答案 0 :(得分:0)

回答您的问题:是的,您可以与不同的外围设备建立多个连接并对其进行读/写。 iOS设备最多可以同时处理8个连接。

有关实施,请查看Apple的Core Bluetooth Programming Guide。你需要的所有东西都在那里解释。

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