2016-11-09 111 views
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); 
     } 
    } 
+0

你如何参考外设?你如何将你的数据发送到两个外设(因为我猜你是向两者发送相同的数据)? – Larme

+0

请显示一些代码 – Paulw11

+0

这里有很多代码,它遍布所以很难分享。哪部分代码是相关的?我正在向外围设备发送不同的数据。本质上,一个外设用于触发中央向另一个发送数据。中央总是能够从每个外设接收数据,而不是同时发送给两者。通过发送我的意思是[外围writeValue:forCharacteristic:类型:]并通过接收我的意思是外围didUpdateValueForCharacteristic回调。 – Hester

回答

0

要回答你的问题:是的,它是可能的,你可以有不同的外设多个连接和读/写他们。 iOS设备最多可以处理8个同时连接。

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

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

+0

Hi p2pkit。我不能将A作为外设的原因是,如果B连接,则C将无法看到它,反之亦然。 Core蓝牙指南中是否有特别的参考?我一直在使用它,并没有找到任何指定如何处理多个连接的内容。 – Hester