CoreBluetooth: невозможно определить характеристики обнаруженного периферийного устройства
Я написал некоторый код CoreBluetooth, я могу обнаружить устройства, но мне кажется, что я не могу обнаружить характеристики периферийных устройств, которые я обнаруживаю. У кого-нибудь есть хороший пример кода, который я могу использовать для проверки своего кода?
Вот что я написал:
#import "ViewController.h"
@property(nonatomic, strong) CBCentralManager* centralmanager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.centralmanager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
CBCentralManagerState currentState = central.state;
NSLog(@"state %i", currentState);
switch (central.state)
{
case CBCentralManagerStatePoweredOn:
{
NSDictionary *options = @{
CBCentralManagerScanOptionAllowDuplicatesKey: @YES
};
[self.centralmanager scanForPeripheralsWithServices:nil options:options];
NSLog(@"I just started scanning for peripherals");
break;
}
}
}
- (void)centralManager:(CBCentralManager *)central
didConnectPeripheral:(CBPeripheral *)peripheral{
NSLog(@"connected!");
}
- (void) centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
[self.centralmanager connectPeripheral:peripheral options:nil];
if ([[advertisementData description] containsString:@“keyword”]) {
NSLog(@"peripheral count %lu", (unsigned long)[peripheral.services count]);
[peripheral.services count];
for (int i=0; [peripheral.services count]; i++) {
for (CBService *s in peripheral.services) {
[peripheral discoverCharacteristics:nil forService:s];
}
}
}
}
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
NSLog(@"did discover characteristic for service");
}
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSArray *)serviceUuids{
NSLog(@"discovered a peripheral's services: %@", serviceUuids);
}
1 ответ
Посмотрите здесь: пример кода
В основном процесс таков:
- Сканирование для устройств
- Обнаружить устройство
- Подключиться к устройству
- Запросить устройство для услуг
- Спросите у услуг характеристики
- Пишите, читайте или получайте уведомления по характеристикам
Впоследствии вам не придется искать и обнаруживать устройства, так как ранее обнаруженные устройства могут быть извлечены из кэша и подключены напрямую.
Редактировать: --------------------
Прочитайте пример:[aPeripheral readValueForCharacteristic:aChar];
Пример уведомления:[aPeripheral setNotifyValue:YES forCharacteristic:aChar];
Оба этих вызова приведут к - (void) peripheral:(CBPeripheral *)aPeripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
- функция для вызова, когда устройство BLE возвращает значение. При использовании уведомления этот обратный вызов вызывается автоматически каждый раз, когда устройство обновляет свое значение для этой характеристики.