2012-10-23 11 views
6

Ich frage mich, kann ich die Signalstärke von Bluetooth-Geräten in Reichweite meines iPhone messen. Grundsätzlich möchte ich nach einer Liste von Geräten in Reichweite suchen und dann sehen, welche die höchste Signalstärke hat. Ist es in iOS möglich und wie würde ich es tun?Kann ich Bluetooth-Signalstärke in iOS messen?

Antwort

5

Ja, es gibt eine Möglichkeit zur Messung der Signalstärke für Bluetooth Low Energy (4.0) ist die RSSI-Nummer. Wenn Sie sich für Peripheriegeräte scannen Sie das Flag CBCentralManagerScanOptionAllowDuplicatesKey auf YES gesetzt, wie unten dargestellt:

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

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

Wenn Sie die RSSI-Nummer Arbeit sehen möchten, ohne Code schreiben Sie die App sollten überprüfen, LightBlue in iTunes. Wenn Sie eine Verbindung zu einem Peripheriegerät herstellen, zeigt es Ihnen die aktualisierte RSSI-Nummer jede Sekunde an, wenn es verbunden ist.

2

Werfen Sie einen Blick auf die CoreBluetooth documentation:

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

RSSI ist das, was Sie suchen. Haftungsausschluss: Core Bluetooth ist nur für Bluetooth 4 LE geeignet.

Wenn der genaue Bereich keine Rolle spielt, Sie aber an allgemein verfügbaren Scannern interessiert sind, können Sie sich das github Projekt BeeTee ansehen, mit dem Sie nach allen Bluetooth Geräten in Ihrer Umgebung scannen können (nicht nur Bluetooth LE). Nochmal Disclaimer: Ich bin der Autor von BeeTee. ;-)

0

Wenn Sie Ihren "zentralen" Code mit CBCentralManager codieren, stellen Sie eventuell eine Verbindung zu dem CBPeripheral her, nach dem Sie suchen. Sobald Sie mit dem Peripheriegerät verbunden sind, behalten Sie einen Verweis darauf, legen Sie Ihr Objekt als den Delegaten der Peripherie fest und rufen Sie "readRSSI" auf dem Peripheriegerät auf. Sie erhalten einen Delegaten-Callback peripheral: didReadRSSI: error: Wenn Sie eine Methode schreiben, die 'readRSSI' aufruft, können Sie sie mit performSelector: withObject: afterDelay: aufrufen.

Eine andere der vorgeschlagenen Antworten auf diese Frage ist die Bereitstellung der Taste "Duplikate zulassen" beim Scannen. Die Dokumentation für den Wörterbuchschlüssel CBCentralManagerScanOptionAllowDuplicatesKey bei Übergabe an scanForPeripheralsWithServices:options: zeigt an, dass "das Deaktivieren dieser Filterung sich negativ auf die Lebensdauer der Batterie auswirken kann und nur bei Bedarf verwendet werden sollte".

Wenn Sie einen verzögerten Aufruf schreiben möchten, können Sie die Häufigkeit der Anrufe einstellen, um die Auswirkungen auf die Batterien Ihrer Benutzer zu managen.

Verwandte Themen