2016-11-09 4 views
0

J'essaie d'obtenir mon central (appareil iOS) pour communiquer avec deux périphériques (un périphérique iOS, un non). Individuellement, ils fonctionnent bien, mais je constate qu'une fois que les deux périphériques sont impliqués, seul le périphérique qui a été connecté le plus récemment peut recevoir des données du périphérique central. Est-il possible d'envoyer des données de la centrale à chaque périphérique sans déconnecter et reconnecter le périphérique?Central de communiquer avec plusieurs périphériques à la fois

Ceci est mon code écrit périphérique:

- (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); 
    } 

points d'arrêt indiquent que le code est en cours d'exécution et les spectacles du journal « défi envoyé » à c'est juste que périphérique ne reçoit jamais le périphérique correct, il.

code pour recevoir périphérique:

-(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

Comment gardez-vous la référence du périphérique? Comment envoyez-vous vos données aux deux périphériques (puisque je suppose que vous envoyez les mêmes données aux deux)? – Larme

+0

S'il vous plaît montrer un peu de code – Paulw11

+0

Il y a beaucoup de code et il est réparti de sorte qu'il est difficile de partager. Quelle partie du code est pertinente? J'envoie différentes données aux périphériques. Essentiellement, un périphérique est utilisé pour déclencher le central pour envoyer des données à un autre. Le central est toujours capable de recevoir des données de chaque périphérique, mais pas de les envoyer aux deux. Par send je veux dire [writeValue périphérique: forCharacteristic: type:] et par receive je veux dire périphérique didUpdateValueForCharacteristic callback. – Hester

Répondre

0

Pour répondre à votre question: Oui, il est possible que vous pouvez avoir plusieurs connexions à différents périphériques et lecture/écriture à leur disposition. Les appareils iOS peuvent gérer jusqu'à 8 connexions simultanées.

Pour la mise en œuvre, jetez un oeil à la Core Bluetooth Programming Guide d'Apple. Toutes les choses dont vous avez besoin sont expliquées ici. À titre de suggestion: Si plusieurs périphériques (appelons-les B et C) doivent recevoir des données d'un périphérique (appelé A), j'utiliserais le rôle périphérique sur le périphérique A qui doit envoyer les données aux autres. Parce que les périphériques B et C peuvent alors scanner, se connecter et s'abonner à une caractéristique et recevoir des mises à jour sans avoir à relire.

+0

Salut p2pkit. La raison pour laquelle je ne peux pas avoir A comme périphérique est que si B est connecté, alors C ne pourra pas le voir et vice versa. Avez-vous une référence particulière dans le guide Core Bluetooth? Je l'ai beaucoup utilisé et n'ai rien trouvé qui spécifie comment gérer plusieurs connexions comme celle-ci. – Hester