3

Я совершенно новый для связи с Bluetooth. Мой первый проект предназначен для передачи данных с устройства iOS на BLEshield (мелкий чип).CoreBluetooth Central -> Периферийные устройства

Чтобы проверить свой центральный код, я решил настроить iPhone как периферийный (роль, которую получит чип, как только я ее получу), и iPad как центральный.

Я могу подключить устройства, а также отправить данные с периферийного устройства в центральный. Это довольно легко:

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

НО Я не могу заставить другое направление работать. Для передачи данных из центральной части, у меня есть следующий код:

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

Я полагаю, что ни один из этих методов должны быть вызван на периферийном:

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

Но на самом деле ничего не происходит. К сожалению, мой аппаратный проект будет использовать чип, который может работать только в периферийном режиме, и в конце концов я почти исключительно напишу на периферию, поскольку это передатчик для сигналов управления.

Я надеюсь, что кто-то может мне помочь!

ответ

5

Свойства для:

  • _readChar должен быть CBCharacteristicPropertyRead
  • _writeChar должен быть CBCharacteristicPropertyWriteWithoutResponse

См here для более подробной информации. CBCharacteristicPropertyNotify не позволяет характеристикам записываться или читать, он доступен только для подписки/подписания/отмены подписки.

+0

Когда я устанавливаю то вверх, как это, я не получаю уведомление о коннекторах. Я теперь установил их с помощью 'CBCharacteristicPropertyRead | CBCharacteristicPropertyNotify', но я до сих пор не получаю никаких уведомлений о записи ... –

+0

Теперь я получил уведомление и смог прочитать его значение! БЛАГОДАРЯ! –

+0