2016-05-06 11 views
0

ビーコンをシミュレートするために、ラズベリーパイとBluetoothドングルを使用します。私は、ラズベリーでそれを変更するときにビーコンのUUIDを検出するモバイルアプリに必要な時間を測定したいと思います。このコードでは、私はビーコンIプリントのIDを変更する前に、私はアンドロイドアプリとサーバー間の時刻を同期させる

sudo ntpdate -u 2.android.pool.ntp.org 

とラズベリーパイの時間を同期したよりタイル

final Resources res = this.getResources(); 
     final int id = Resources.getSystem().getIdentifier(
       "config_ntpServer", "string","android"); 
     final String defaultServer = res.getString(id); 

を同期するためにスマートフォンが使用するサーバーを見つけました時間

timestamp() { 
    date +"%T,%3N" 
} 


timestamp # print timestamp 

sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1..... 

そして私はUUIDを変更しlogcatに時間がUUIDが初めて見られた場合、結果はalwayse負である時間を比較しますUUIDが15:33:03,276に変更され、15:33:02.301で検出されました。

これは同期の問題ですか?これを行うより良い方法はありますか?

答えて

1

いくつかの考え:彼らはネットワークに接続している場合は、デフォルトで

  • Androidデバイスの両方とPiは、自動的にNTPサーバに自分の時間を同期します。何もする必要はありません。

  • NTPデーモンは、クロックをただちに変更するとは限りません。時間の経過とともにゆっくりと調整され、即時ジャンプによってLinuxプロセスを動かさないようにします。ラズベリーパイにはリアルタイムクロックがないので、起動時に常に不正確な時間があります。起動後数分待ってからAndroidデバイスと同期してください。

  • NTPは完全ではありません。インターネットタイムサーバーを使用している場合、クロックを数十ミリ秒以上に同期させることを期待しないでください。 Bluetooth検出時間は非常に速く(10秒間の範囲でも)、検出時間が-100msになった場合、この設定の範囲内である可能性があります。

検出時間は約-1.0秒です。これは、時間がうまく同期していないことを示しています。私はPiが問題だと思ってそこでトラブルシューティングをします。両方のデバイスでミリ秒単位で時間を表示してトラブルシューティングを行うと便利です。

関連する問題