2016-11-09 12 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); 
    } 

Breakpoints указать код выполняется и бревенчатые шоу «вызов посланные» на правильный периферийный, это просто, что периферическое никогда не получает его.

Код для периферийного приема:

-(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: type:], и, получая, я имею в виду периферийное didUpdateValueForCharacteristic callback. – Hester

ответ

0

Чтобы ответить на ваш вопрос: Да, возможно, что вы можете иметь несколько соединений с различными периферийными устройствами и чтения/записи в них. iOS могут обрабатывать до 8 одновременных подключений.

Для реализации взгляните на Core Bluetooth Programming Guide от Apple. Там объясняются все, что вам нужно.

Как предложение: если несколько устройств (назовем их B и C) должны получать данные с одного устройства (называемого A), я бы использовал периферийную роль на устройстве A, которому необходимо отправить данные другим. Потому что тогда устройства B и C могут сканировать, подключаться и подписываться на характеристику и получать обновления без необходимости читать снова.

+0

Привет, p2pkit. Причина, по которой я не могу иметь A в качестве периферии, заключается в том, что если B подключен, то C не сможет ее увидеть и наоборот. Есть ли у вас конкретная ссылка в руководстве Core Bluetooth? Я использовал его много и не нашел ничего, определяющего, как обрабатывать несколько соединений, подобных этому. – Hester