2012-10-23 19 views
6

Mi chiedevo se posso misurare la potenza del segnale dei dispositivi Bluetooth nel raggio d'azione del mio iPhone. Fondamentalmente quello che voglio fare è cercare un elenco di dispositivi nel raggio d'azione, e quindi vedere quale ha il segnale più alto. È possibile in iOS e come lo farei se fosse così?Posso misurare la potenza del segnale Bluetooth in iOS?

risposta

5

Sì, c'è un modo per misurare la potenza del segnale per Bluetooth Low Energy (4.0) è il numero di RSSI. Quando si digitalizza per le periferiche verrà impostata l'CBCentralManagerScanOptionAllowDuplicatesKey bandiera su YES come illustrato di seguito:

NSDictionary * dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@YES, CBCentralManagerScanOptionAllowDuplicatesKey, nil]; 

// Start scanning for peripherals 
[cmanager scanForPeripheralsWithServices:nil options:dictionary]; 

Se volete vedere il numero di lavoro RSSI senza scrivere codice si dovrebbe verificare l'applicazione LightBlue in iTunes. Quando ti connetti a una periferica, ti mostrerà il numero RSSI aggiornato ogni secondo quando è connesso.

2

Date un'occhiata alla CoreBluetooth documentation:

- (void)centralManager:(CBCentralManager *)central 
didDiscoverPeripheral:(CBPeripheral *)peripheral 
    advertisementData:(NSDictionary *)advertisementData 
        RSSI:(NSNumber *)RSSI 
{ ... } 

RSSI è quello che state cercando. Disclaimer: Core Bluetooth è realizzato solo per Bluetooth 4 LE.

Se l'intervallo esatto non è importante, ma sei interessato alla scansione di dispositivi che sono disponibili in generale, puoi dare un'occhiata al progetto github BeeTee, che ti consente di scansionare tutti i dispositivi Bluetooth intorno a te (non solo Bluetooth LE). Di nuovo disclaimer: sono l'autore di BeeTee. ;-)

0

Quando codifichi il tuo codice "centrale" utilizzando CBCentralManager, ti connetteresti alla CBPeripheral che stai cercando. Una volta che sei connesso alla periferica, tieni un riferimento ad esso, imposta il tuo oggetto come delegato della periferica e invoca 'readRSSI' sulla periferica. Riceverai una richiamata delegata peripheral: didReadRSSI: error: Se scrivi un metodo che richiama 'readRSSI', puoi richiamarlo usando performSelector: withObject: afterDelay:.

Un'altra delle risposte suggerite a questa domanda è di fornire la chiave "consenti duplicati" durante la scansione. I documenti per il tasto dizionario CBCentralManagerScanOptionAllowDuplicatesKey quando passati a scanForPeripheralsWithServices:options: indicano che "Disabilitare questo filtro può avere un effetto negativo sulla durata della batteria e dovrebbe essere usato solo se necessario".

Se si sceglie di scrivere un richiamo ritardato, è possibile ottimizzare la frequenza delle chiamate per aiutare l'amministratore a gestire l'impatto sulle batterie degli utenti.

Problemi correlati