屋内測位を行うには、三角測量のために複数の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 out
とError: connect error: Connection refused (111)
次に、 https://stackoverflow.com/questions/22213793/bluetooth-le-on-raspbian 、 https:// 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番目のバイトを読み取るにはどうすればよいですか?
ビーコンから距離をとることは私にとって非常に厄介であり、私の時間の多くを使い果たしました。この問題で私を助けてください。あなたが私を助けるリソースを見つけるのを手伝うことができれば、私は助けを感謝します。
テストした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でテスト済み
たぶんこれはあなたが探しているものです。
ビーコンが接続を拒否して電力を節約している可能性がありますが、信号強度を読み取るために、接続する必要はありません。とにかくその情報をブロードキャストする必要があるためです。
探していた情報をhcidumpで取得できなかったため、代わりにbtmonを使用して、BLEビーコンからRSSIを取得することに成功しました。
btmon &
hcitool lescan --duplicates