2012-10-23 184 views
6

我想知道是否可以測量我的iPhone範圍內的藍牙設備的信號強度。基本上我想要做的是掃描範圍內的設備列表,然後查看哪一個具有最高的信號強度。是否可以在iOS中使用,如果可以,我會怎麼做?我可以在iOS中測量藍牙信號強度嗎?

回答

5

是的,有一種方法可以測量藍牙低功耗(4.0)的信號強度,它是RSSI編號。如果你想看到的RSSI數量的工作,而無需編寫你應該在iTunes中檢查出的應用程序LightBlue任何代碼

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

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

:當你掃描外設,你會標誌CBCentralManagerScanOptionAllowDuplicatesKey設置爲YES,如下圖所示。當連接到外圍設備時,它會在連接時每秒向您顯示更新的RSSI號碼。

2

看一看到CoreBluetooth documentation

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

RSSI是你在找什麼。免責聲明:核心藍牙僅適用於藍牙4 LE。

如果確切的範圍並不重要,但您對通常可用的掃描設備感興趣,您可以看看github項目BeeTee,它允許您掃描周圍的所有藍牙設備(不僅藍牙LE)。再次聲明:我是BeeTee的作者。 ;-)

0

當你使用CBCentralManager編寫你的'central'代碼時,你最終會連接到你正在尋找的CBPeripheral。一旦連接到外設,請保留對其的引用,將對象設置爲外設的代理並在外設上調用'readRSSI'。你將得到一個委託回調peripheral: didReadRSSI: error:如果你編寫了一個調用'readRSSI'的方法,你可以使用performSelector: withObject: afterDelay:來調用它。

此問題的另一個建議答案是在掃描時提供'允許重複'鍵。當傳遞到scanForPeripheralsWithServices:options:時,字典密鑰CBCentralManagerScanOptionAllowDuplicatesKey的文檔指示「禁用此過濾可能會對電池壽命產生不利影響,應僅在必要時使用」。

如果您選擇編寫延遲調用,則可以調整呼叫頻率以幫助您管理對用戶電池的影響。