Daily note

ソフトウェア技術に関する些細なことをメモしていく予定です。

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

無事接続できました。