Raspi3とOBD製品のBLE接続をする
概要
Raspi3B+とOBDデバイスを、hcitoolとgatttoolを利用して、BLE接続してみました。
使用したOBDデバイス
今回使用したOBDデバイス(BLE利用)は、以下です。
これを車内にあるOBDコネクタへ接続し、Raspi3とBLE接続します。
使用したBLE制御コマンド
hcitoolコマンドで、周辺にあるBLEデバイスを探索し、OBDデバイスを発見します。
gatttoolコマンドで発見したOBDデバイスと接続します。
OBDデバイスの探索
Raspi3から以下のコマンドを入力すると、周辺にあるBLEデバイスを標準出力にリスト表示します。
pi@raspberrypi:~ $sudo hcitool lescan
接続対象となるOBDデバイスが見つかったらCtrl+Cキーを入力し、コマンドを終了させます。 対象のOBDデバイス(IOS_Vlink)は以下のように発見されます。
pi@raspberrypi:~ $sudo hcitool lescan LE Scan ... (中略) DD:0D:30:46:AB:E7 IOS-Vlink (中略)
OBDデバイス名の左側に、そのデバイスのBDアドレス(上の例ではDD:0D:30:46:AB:E7)が表示されます。 このBDアドレスを接続対象として、gatttoolコマンドで接続を実施します。
OBDデバイスとの接続(失敗)
pi@raspberrypi:~ $sudo gatttool -b DD:0D:30:46:AB:E7 -I
上のコマンドの意味は、
「デフォルト接続対象をDD:0D:30:46:AB:E7とし、インタラクティブ(対話)モードでgatttoolを起動する」
です。
対話モードで起動後、connectコマンドを発行することで、接続対象とBLE接続を試みます。
pi@raspberrypi:~ $ sudo gatttool -b DD:0D:30:46:AB:E7 -I [DD:0D:30:46:AB:E7][LE]> connect Attempting to connect to DD:0D:30:46:AB:E7 [DD:0D:30:46:AB:E7][LE]>
接続を待機しています・・・
Error: connect error: Connection refused (111) [DD:0D:30:46:AB:E7][LE]>quit pi@raspberrypi:~ $
接続に失敗しました。quitコマンドで対話モードを抜け、gatttoolコマンドを終了します。
パブリックアドレスとランダムアドレス
BLE接続をするためには、その接続対象のBDアドレスが必要になりますが、BLEの場合はBluetoothと異なり、公的に発行されたBDアドレス(これをパブリックアドレスという)以外に、ランダムアドレスというものが存在しました。 gatttoolはデフォルトでは、パブリックアドレスとしてBLE接続をしているようで、それで接続が失敗していると考えました。
ランダムアドレスでの接続
gatttoolでランダムアドレスで接続するためにtオプションを使います。
pi@raspberrypi:~ $ sudo gatttool -t random -b dd:0d:30:46:ab:e7 -I [dd:0d:30:46:ab:e7][LE]> connect Attempting to connect to dd:0d:30:46:ab:e7 Connection successful
無事接続できました。