Po prostu zacząłem od podstawowej architektury bluetooth dla iOS i pracuję nad aplikacją, która musi stale skanować urządzenia BLE, aby móc pobierać ich numer RSSI co minutę lub więc.Core Bluetooth - stała aktualizacja RSSI urządzeń w zasięgu
Obecnie mam:
manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[manager scanForPeripheralsWithServices:nil options:options];
ten zaczyna moja aplikacja skanowanie urządzeń ble i nazywa to metoda delegata, gdy urządzenie zostanie wykryte:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
NSLog(@"Did discover peripheral. peripheral: %@ rssi: %@, UUID: %@ advertisementData: %@ ", peripheral, RSSI, peripheral.UUID, advertisementData);
//Do something when a peripheral is discovered.
rssiLabel.text = [RSSI stringValue];
[manager retrievePeripherals:[NSArray arrayWithObject:(id)peripheral.UUID]];}
metoda ta staje mi numer RSSI obwodowego, który mogę wyświetlić. Ostatni wiersz następnie wywołuje tę metodę Delegat:
- (void) centralManager:(CBCentralManager *)central didRetrievePeripherals:(NSArray *)peripherals {
NSLog(@"Currently known peripherals :");
int i = 0;
for(CBPeripheral *peripheral in peripherals) {
NSLog(@"[%d] - peripheral : %@ with UUID : %@",i,peripheral,peripheral.UUID);
}
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
[manager scanForPeripheralsWithServices:nil options:options];
}
Kod ten wydaje się działać i robi Skanuj mniej więcej co 1 minutę, ale nie wiem dokładnie, dlaczego to działa ...
Dokumentacja na rdzeń bluetooth jest dość rzadki, więc jeśli ktoś ma jakiś pomysł, jak to zrobić, lub ma lepszy sposób robienia tego, co próbuję osiągnąć, byłbym wdzięczny za pomoc!
wydaje się działać ... Jak często RSSI aktualizowane? EDYCJA: Raz na minutę?Wydaje mi się, że jest pewien czas, kiedy się nie łączysz, aby ponownie rozpocząć skanowanie. – chwi
Właśnie zacząłem czytać dokumentację, więc jesteś bardziej niż ja. Pytanie, dlaczego dzwonisz do ScanForPeripheralsWithServices w trybie delegatów didRetrievePeripherals? Wywołujesz go już po przydzieleniu CBCentralManager. Może to powodować powtarzanie skanowania, o którym wspomniałeś. – mkr707
tylko moje dwa centy za> = 7.0: retrievePeripheralsWithIdentifiers musi być używany od teraz. –