Вы можете написать команду для переключения состояния периферийного устройства, записав определенное значение состояния в характеристику BLE следующим образом:
[peripheral writeValue:value forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
после того, как характеристика будет записана, будет вызван обратный вызов didWriteValueForCharacteristic, и здесь у вас есть возможность отправить желаемую команду:
-(void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
if([characteristic.UUID isEqual:[CBUUID UUIDWithString:"STATUS_CHARACTERISTC"]]){
//Status written: Write your command here
}}
Не забудьте сначала установить CBPeripheralDelegate на свой объект CBPeripheral: объект CBPeripheralDelegate будет тем, в котором будет реализован метод didWriteValueForCharacteristic (например, это может быть viewController, для которого вы выполняете операции BLE, но вы можете выделить отдельный объект). объект тоже). Обратите внимание, что если вы забудете установить CBPeripheralDelegate, метод обратного вызова не будет запущен.
Другой подход - сначала зарегистрировать приложение, чтобы получать уведомления BLE каждый раз, когда характеристика состояния изменяется на периферийном устройстве. Таким образом, когда вы изменяете периферийное состояние (например, записываете характеристику BLE, как описано выше), CBPeripheralDelegate в приложении iOS будет автоматически уведомлено, и в этом случае будет вызван обратный вызов didUpdateValueForCharacteristic:
-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
if([characteristic.UUID isEqual:[CBUUID UUIDWithString:"STATUS_CHARACTERISTC"]]){
NSData *dataValue = characteristic.value;
NSString *stringValue = [[NSString alloc] initWithData:dataValue encoding:NSUTF8StringEncoding];
NSLog(@"Status changed in: %@", stringValue);
//Send desired command here
}}
Чтобы активировать значение уведомления для признака:
[peripheral setNotifyValue:YES forCharacteristic:c];