2012-10-23 10 views
6

iPhoneの範囲内でBluetoothデバイスの信号強度を測定することができますか?基本的には、範囲内のデバイスのリストをスキャンして、どれが最高の信号強度を持っているかを調べることです。 iOSでは可能ですか?もしそうなら、どうすればいいですか?iOSでBluetooth信号強度を測定できますか?

答えて

5

はいBluetooth低エネルギー(4.0)の信号強度を測定する方法は、RSSI番号です。あなたは周辺機器をスキャンすると、以下のように、あなたはYESにフラグCBCentralManagerScanOptionAllowDuplicatesKeyを設定します:

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

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

あなたが任意のコードを記述せずRSSI番号の作業を確認したい場合は、iTunesでアプリLightBlueをチェックアウトする必要があります。周辺機器に接続すると、接続されたときに更新されたRSSI番号が毎秒表示されます。

2

CoreBluetooth documentationに見てください:

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

RSSIあなたが探しているものです。免責条項:コアのBluetoothはBluetooth 4 LE専用です。

正確な範囲は問題ではありませんが、一般的に利用可能なデバイスをスキャンすることに興味がある場合は、BeeTeeのgithubプロジェクトをご覧ください。これにより、周囲のすべてのBluetoothデバイスをスキャンできますブルートゥースLE)。再び免責事項:私はBeeTeeの著者です。 ;-)

0

CBCentralManagerを使用して '中央'コードをコーディングすると、最終的にはあなたが探しているCBPeripheralに接続します。ペリフェラルに接続したら、ペリフェラルへの参照を保持し、ペリフェラルのデリゲートとしてオブジェクトを設定し、周辺機器で 'readRSSI'を呼び出します。代理コールバックを取得しますperipheral: didReadRSSI: error: 'readRSSI'を呼び出すメソッドを記述する場合は、performSelector: withObject: afterDelay:を使用して呼び出すことができます。

この質問のもう1つの回答は、スキャン時に「複製を許可」キーを提供することです。 scanForPeripheralsWithServices:options:に渡された辞書キーCBCentralManagerScanOptionAllowDuplicatesKeyのドキュメントでは、このフィルタリングを無効にするとバッテリの寿命に悪影響を及ぼし、必要な場合にのみ使用する必要があります。

遅延呼び出しを書き込む場合は、呼び出し頻度を調整して、ユーザーのバッテリへの影響を管理することができます。

関連する問題