CoreBluetooth Central -> Periférico

Soy bastante nuevo en la comunicación bluetooth. Mi primer proyecto tiene la intención de transferir datos desde un dispositivo iOS a un BLEShield (pequeño chip).

Para probar mi código central, decidí configurar un iPhone como periférico (el papel que tendrá el chip, una vez que lo obtuve) y un iPad como central.

Puedo conectar los dispositivos y también enviar datos desde el periférico al central. Sin embargo, es bastante fácil:

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

PERO no puedo hacer funcionar la otra dirección. Para enviar datos desde el lado central, tengo el siguiente código:

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

Supongo que cualquiera de estos methods debería llamarse en el periférico:

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

Pero en realidad no pasa nada. Lamentablemente, mi proyecto de hardware utilizará un chip que solo funcionará en modo periférico y, al final, casi exclusivamente escribiré en el periférico, ya que es un transmisor para señales de control.

¡Espero que alguien pueda ayudarme!

Las properties para:

  • _readChar debe ser CBCharacteristicPropertyRead
  • _writeChar debe ser CBCharacteristicPropertyWriteWithoutResponse

Vea aquí para más detalles. CBCharacteristicPropertyNotify no permite que la característica sea escribible o legible, solo es notificable (suscribirse / darse de baja).

Solo use https://github.com/LGBluetooth/LGBluetooth Hará la vida más fácil