Question

Je suis assez nouveau dans la communication Bluetooth.Mon premier projet vise à transférer des données d'un appareil iOS vers un BLEshield (petite puce).

Pour tester mon code central, j'ai décidé de configurer un iPhone en périphérique (le rôle que jouera la puce une fois que je l'aurai reçue) et un iPad en tant que Central.

Je peux connecter les appareils et également envoyer des données du périphérique vers la centrale.C'est quand même assez simple :

- (void)startService {
    _readChar = [[CBMutableCharacteristic alloc] initWithType:[CBUUID ...] properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];
    _writeChar = [[CBMutableCharacteristics alloc] initWithType:[CBUUID ...] properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsWriteable];

    _service = [[CBMutableService alloc] initWithType:[CBUUID ...] primary:YES];
    [_service setCharacteristics:@[_readChar, _writeChar]];

    _peripheral = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
    [_peripheral addService:_service];

    [_peripheral startAdvertising:@{CBAdvertisementDataServiceUUIDKey: @[[CBUUID ...]], CBAdvertisementDataLocalNameKey: @"ServiceName"}];
}

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic {
    [_peripheral updateValue:[@"HELLO WORLD" dataUsingEncoding:NSUTF8StringEncoding] forCharacteristic:_readChar onSubscribedCentrals:nil];
}

MAIS je n'arrive pas à faire fonctionner l'autre sens.Pour envoyer des données depuis le côté central, j'ai le code suivant :

[_activePeripheral writeValue:[@"PONG" dataUsingEncoding:NSUTF8StringEncoding] forCharacteristic:_writeChar type:CBCharacteristicWriteWithoutResponse];

Je suppose que l'une ou l'autre de ces méthodes doit être appelée sur le périphérique :

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error

Mais en réalité rien ne se passe.Malheureusement mon projet matériel utilisera une puce qui ne peut fonctionner qu'en mode périphérique et au final j'écrirai presque exclusivement sur le périphérique car c'est un émetteur de signaux de contrôle.

J'espère que quelqu'un pourra m'aider !

Était-ce utile?

La solution

Les propriétés pour :

  • _readChar devrait être CBCharacteristicPropertyRead
  • _writeChar devrait être CBCharacteristicPropertyWriteWithoutResponse

Voir ici pour plus de détails. CBCharacteristicPropertyNotify ne permet pas que la caractéristique soit inscriptible ou lisible, elle est uniquement notifiable (inscription/désinscription).

Autres conseils

Il suffit d'utiliser https://github.com/lgblueooth/lgbluetooth Cela facilitera la vie

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top