Pergunta

Eu sou muito novo para ser estabelecida a comunicação bluetooth.Meu primeiro projeto prevê a transferência de dados de um dispositivo iOS para um BLEshield (pequeno chip).

Para testar o meu código, eu decidi configuração de um iPhone de periféricos (o papel que o chip vai ter, uma vez que eu tenho ele) e uma iPad como Central.

Que eu possa ligar os dispositivos e também enviar dados a partir do periférico para o central.É muito fácil, porém:

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

MAS eu não posso tomar outra direção de trabalho.Para o envio de dados do serviço central de lado, eu tenho o seguinte código:

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

Eu suponho que qualquer um desses métodos deve ser chamado no periférica:

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

Mas, na verdade, nada acontece.Infelizmente o meu projeto de hardware vai usar um chip que só pode trabalhar no modo periférico e, no final, eu quase exclusivamente escrever para o periférico como é um transmissor para sinais de controle.

Espero que alguém possa me ajudar!

Foi útil?

Solução

As propriedades para:

  • _readChar deve ser CBCharacteristicPropertyRead
  • _writeChar deve ser CBCharacteristicPropertyWriteWithoutResponse

Ver aqui para obter mais detalhes. CBCharacteristicPropertyNotify não permitir a característica de ser escrita, ou legível, é só notificáveis (assinar).

Outras dicas

Basta usar https://github.com/LGBluetooth/LGBluetooth Ele vai fazer a vida mais fácil

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top