Raspberry piでbluetoothスキャン
ゴール
Bluetooth検出数をもとに混雑度を推定したい。
方法
2通り検討している
- Raspberry Pi
- iPad
Xcodeをインストールするのが面倒なのでできればRaspberry Piでやりたい
Raspberry Piについて
Raspberry Piはデフォルト(?)でソフトウェア側でBluetoothがオフになっている模様
SSHで接続して、全てCLIでコントロールしているのでGUIは使用できない
Bluetoothが動作しているかを確認する
BD Adressは秘匿するべきなのかわかんないけどとりあえず伏せておく
hciconfigがBluetoothデバイスを設定する。[1]
$ hciconfig
hci0: Type: Primary Bus: UART
BD Address: XX:XX:XX:XX:XX:XX ACL MTU: 1021:8 SCO MTU: 64:1
DOWN
RX bytes:2704 acl:0 sco:0 events:116 errors:0
TX bytes:1292 acl:0 sco:0 commands:91 errors:0
DOWN
となっているので、動作していないことがわかる
有効化する
sudo hciconfig hci0 up
Can't init device hci0: Operation not possible due to RF-kill (132)
RF-kill
されているので、有効化できない
RF-killはデバイスの通信電波発振器のステータスを管理する[2]
現在のステータスを確認する
$rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
1: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
hci0:Bluetoothを有効化する
sudo rfkill unblock bluetooth
hcicinfg側でも有効化する
sudo hciconfig hci0 up
スキャンしてみる
hcitoolを使いスキャンする[3]
$ sudo hcitool scan
BLEをhcitoolを用いてスキャンしようとするとエラーが出る
hcitoolを用いてBluetooth low energyをスキャンしたいのだがエラーが出る
$ sudo hcitool lescan
Set scan parameters failed: Input/output error
再起動したら解決した
同じような人がいた
$ sudo hciconfig hci0 down
$ sudo hciconfig hci0 up
$ sudo hcitool lescan
ブルートゥースの正しい略し方はBluetooth → BR/EDR、Low Energy→LEらしい
BRとLEの違い
Bluetoothには通常BR/EDRと省電力のLEが存在する。互換性はないが、両立は可能(つまり両方の電波を発信している可能性がある
LEの場合通信速度は10kbps
通信可能距離は理想値は100mだが、実際には0~10m程度となっている
Under optimal conditions BLE can operate up to 100 meters, but in practice they operate best from 0-25 meters.
What is Bluetooth Low Energy (BLE)? How does BLE work? | Litum
実際に測定してみなければ正確な値はわからないがこれが信頼できる場合には混雑度を知りたい場合には有効だと思う。
(暇があったら測定してみる)
スマートフォンはBR/EDRなのかLEなのか?
最終的には混雑具合が知りたいのでスマートフォンが発信するBluetoothがBRなのかLEなのかが知りたいところである
手元のRaspberry Piで調べたところ次の通りだった
デバイス名 | BR | LE |
---|---|---|
iPhone8 | - | ○ |
OPPO R11s | ○ | - |
iPad | - | ○ |
Macbook Air | - | ○ |