Pregunta

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

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

Puedo conectar los dispositivos y también enviar datos del periférico a la central.Aunque 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 que la otra dirección funcione.Para enviar datos desde el lado central, tengo el siguiente código:

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

Supongo que se debe llamar a uno de estos métodos 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.Desafortunadamente, mi proyecto de hardware utilizará un chip que solo puede funcionar en modo periférico y, al final, escribiré casi exclusivamente al periférico, ya que es un transmisor para las señales de control.

espero que alguien pueda ayudarme!

¿Fue útil?

Solución

Las propiedades para:

  • _readChar debe ser CBCharacteristicPropertyRead
  • _writeChar debe ser CBCharacteristicPropertyWriteWithoutResponse

Consulte Aquí Para más detalles.CBCharacteristicPropertyNotify no permite que la característica sea de escritura o legible, solo es notificable (suscribirse / cancelar la suscripción).

Otros consejos

Simplemente use https://github.com/lgbluetooth/lgbluetooth hará que la vida sea más fácil

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top