2017-02-09 16 views
0

最近使用しているデバイスと接続したい。 rssiから最近接距離を取得/計算する方法は?アンドロイドから最も近いBluetooth低エネルギーデバイスに接続するにはどうすればいいですか?

たとえば、部屋に2つのデバイスがあります。私がその部屋を歩いていると、私のアンドロイドデバイスは自分の位置から最も近いデバイスに接続します。

私はdon cordovaプラグインとjavascriptを使用しています。このプロジェクトはアンドロイドデバイスで実行されます。

+0

高いRSSIでは、一般的にデバイスがcolserになります。しかし、デバイスのTX強度設定のために正しくない可能性があります。 –

+0

どちらが良いですか、最高のrssiを使用するか、最初にメートル単位で計算しますか?私は式を見つけました。http://developer.radiusnetworks.com/2014/12/04/fundamentals-of-beacon-ranging.html –

+0

RSSIからの距離を計算することはできません。道はない。より近いデバイスがより低いRSSIを持つ状況に直面することさえできます –

答えて

0

あなたは、Androidのビーコンライブラリを使用することができます。 https://altbeacon.github.io/android-beacon-library/

それは(正確ではありません)の距離を測定値が得られますが、あなたは近いいるビーコンを検出するためにそれらを使用することができます。

例:

public class RangingActivity extends Activity implements BeaconConsumer { 
    protected static final String TAG = "RangingActivity"; 
    private BeaconManager beaconManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ranging); 
     beaconManager = BeaconManager.getInstanceForApplication(this); 
     beaconManager.bind(this); 
    } 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     beaconManager.unbind(this); 
    } 
    @Override 
    public void onBeaconServiceConnect() { 
     beaconManager.addRangeNotifier(new RangeNotifier() { 
      @Override 
      public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
       if (beacons.size() > 0) { 
        Log.i(TAG, "The first beacon I see is about "+beacons.iterator().next().getDistance()+" meters away.");   
       } 
      } 
     }); 

     try { 
      beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
     } catch (RemoteException e) { } 
    } 
} 

そうでない場合、あなたはデバイスのためのRSSIを読み、時間をかけてそれらを平均化し、外れ値を取り出すことができます。より近いものほど大きなもの(大きさはより正のもの)です。

関連する問題