web-dev-qa-db-ja.com

LinuxでBluetoothビーコンからRSSI値を取得するには(具体的に推定)

屋内測位を行うには、三角測量のために複数のBluetoothビーコンから距離を取得する必要があります。関連する詳細をできる限り多く提供しようとしました。このプロジェクトはRPi用ですが、現在、最初にラップトップでテストを試みています。私はこれについてインターネットで見つけることができるもののほとんどを試しました:

Rssi値を取得するための最良の方法は、hcitool rssi <address of beacon>

ここから https://stackoverflow.com/questions/24417017/bluetooth-le-signal-strength-linux

これをテストするために、最初にモバイル用に取得しようとしました。 「Not Connected」と表示されていました。最初に接続する必要があると思ったので、モバイルを接続するために多くの方法を試しました。

a)hcittol cc <address of mobile>

b)gatttool -b <address of mobile> -t random --interactive

c)rfcomm connect 0 <address of mobile> 10

いずれの場合も、モバイルでペアをクリックすると、接続が終了しました。

次に、Bluetoothメニューから通常の方法でモバイルをペアリングし、hcitool rssi <Address of mobile>を試してみましたが、最終的に値-8が返されました。

モバイル用に手に入れたので、ビーコンに移動しました。

次に、ビーコンに対しても同じことを試みました。今回は、最初にhcitool lescanを実行して利用可能なビーコンのアドレスを取得し、その後hcitool lecc <address of beacon>コマンドを使用してビーコンの1つに接続しなければなりませんでしたCould not create connection: Connection timed out他の2つの方法:

rfcomm connect 0 <address of beacon> 10エラーが返されましたCan't connect RFCOMM socket: Host is down hci0が起動していることが確認できたときに。

それからSudo gatttool -b F1:15:A7:E3:17:63 --interactiveで試してみた後、インタラクティブモードが開き、connectコマンドを入力しました。これにより、Attempting to connect to <address of beacon>の後にさまざまなエラーが発生しました。主にconnect error : Connection timed outError: connect error: Connection refused (111)

次に、 https://stackoverflow.com/questions/22213793/bluetooth-le-on-raspbianhttps:// ubuntuforumsから-t randomを使用する必要があると読みました。 org/showthread.php?t = 2204808 およびもう1つのソースが見つかりません。

そこでSudo gatttool -b F1:15:A7:E3:17:63 -t random --interactiveと入力しました。この中にconnectコマンドを入力すると、エラーError: connect error: Device or resource busy (16)が表示され、時にはError: connect error: Input/Output Error

その後、おそらくhciconfig hci0 downでhci0を再起動する必要があることを読んだ後、hciconfig hci0 upでトリックを行い、ビーコンを接続しました。

しかし、その後、「GLib-WARNING **:無効なファイル記述子」と言った後、すぐに切断されました。

`私はここを読みます https://raspberrypi.stackexchange.com/questions/53982/how-to-fix-gatttools-glib-warning-invalid-file-descriptor これは接続不良のためです。ビーコンを近づけてみましたが、同じことをしました。

とにかく、接続されている短い時間の間に少なくとも1つのrssi値を取得しようとしました。しかし、それがこのように接続されていたとしても、私はhcitool rssi <address of beacon>をしました。エラーは次のようになりました:

hcitool rssi F1:15:A7:E3:17:63
Get connection info failed: No such file or directory

私はまだ適切な解決策を見つけていません。

Rssi値を読み取る別の方法を試してみましたが、次の結果が得られました。

hcidump -R
HCI sniffer - Bluetooth packet analyzer ver 5.37
device: hci0 snap_len: 1500 filter: 0xffffffffffffffff
> 04 0E 04 01 0B 20 00 
> 04 0E 04 01 0C 20 00 
> 04 0E 04 01 0C 20 00 
> 04 0F 04 00 01 0D 20 
> 04 0F 04 00 01 16 20 
> 04 0F 04 00 01 13 20 

これは切断される前のことでした。私はここを読みます https://stackoverflow.com/questions/37073114/obtain-rssi-with-hcidump これは14番目のバイトを読むと言いました。これらはすべて16進数であるように見えたため、これは各数値が1バイトであることを意味します。しかし、この方法では、1行に7つの数字しかありません。14番目のバイトを読み取るにはどうすればよいですか?

ビーコンから距離をとることは私にとって非常に厄介であり、私の時間の多くを使い果たしました。この問題で私を助けてください。あなたが私を助けるリソースを見つけるのを手伝うことができれば、私は助けを感謝します。

3
Cosmopal

テストしたSudo btmgmt findとRSSI値を取得しました。

編集後の出力:

hci0 dev_found: xx:xx:xx:xx:xx:xx type BR/EDR rssi -86 flags 0x0003
eir_len 5

(xxは私に置き換えられます)

Raspi zero wでテスト済み

たぶんこれはあなたが探しているものです。

3
user782606

ビーコンが接続を拒否して電力を節約している可能性がありますが、信号強度を読み取るために、接続する必要はありません。とにかくその情報をブロードキャストする必要があるためです。

探していた情報をhcidumpで取得できなかったため、代わりにbtmonを使用して、BLEビーコンからRSSIを取得することに成功しました。

btmon &
hcitool lescan --duplicates
1
Adam