OBD2 データをMacbook上のpythonで取得する
前回、OBD2コネクタを使ってECU情報を取得をしてみた。
既存のアプリで情報を表示したけど、今回はデータだけを取得したい。
Androidアプリ開発はやったことがないので敷居が高いので、とりあえずpythonでサラッと取得する方法をやってみようと思う。
以下のサイトに倣って進めていこう。
MacbookでBluetoothシリアル通信接続
早速Terminalを開いて
% sudo hciconfig hci0 up
sudo: hciconfig: command not found
ん?
早速つまづく。
Macbookにはhciconfigとかhcitoolとかコマンドがないようだ。
さて困った。Bluetooth制御できる何かがないか調べてみる。
普通にBluetooth接続して、 `cu` コマンド発行すれば繋がるようだ。
OBDクエリ発行方法
Bluetoothシリアル接続できることがわかったが、bindに関する記述が見つからない。
OBD2ライブラリの公式サイトをあさって見ると、接続方法が書いてあった。
connection = obd.OBD("/dev/ttyUSB0")
cuとか使わずに、直接記述すれば良いようだ。
ports = obd.scan_serial() # return list of valid USB or RF ports
print ports # ['/dev/ttyUSB0', '/dev/ttyUSB1']
connection = obd.OBD(ports[0]) # connect to the first port in the list
勝手に見つけてくれる方法もあるようだ。こっちの方が便利そう。
というわけで、Macbook上でBluetooth接続を行なった上で、以下のようなpythonスクリプトを実行してみる。
pip install obd
% pip install obd
Collecting obd
Downloading obd-0.7.1.tar.gz (52 kB)
|████████████████████████████████| 52 kB 627 kB/s
Collecting pyserial==3.*
Downloading pyserial-3.5-py2.py3-none-any.whl (90 kB)
|████████████████████████████████| 90 kB 4.3 MB/s
Collecting pint==0.7.*
Downloading Pint-0.7.2.tar.gz (149 kB)
|████████████████████████████████| 149 kB 5.8 MB/s
Building wheels for collected packages: obd, pint
Building wheel for obd (setup.py) ... done
Created wheel for obd: filename=obd-0.7.1-py3-none-any.whl size=64205 sha256=1d23fc5e0bd2cfaa3fc0efbd4d8a543268cf71b8bd897213b08d8c15d816101f
Stored in directory: /Users/sugiiyouichi/Library/Caches/pip/wheels/42/09/d3/114bda4486cd5af3588877faae3d618577530d4ddb55143419
Building wheel for pint (setup.py) ... done
Created wheel for pint: filename=Pint-0.7.2-py2.py3-none-any.whl size=120414 sha256=14784874bbcf64c0daf4102b9ac0ef28884ace9409cf91b040e5f207844808c3
Stored in directory: /Users/sugiiyouichi/Library/Caches/pip/wheels/d3/a6/bf/6129a4992e29241ed26e210533b1dddf4f2a67e2c57355e9f6
Successfully built obd pint
Installing collected packages: pyserial, pint, obd
Successfully installed obd-0.7.1 pint-0.7.2 pyserial-3.5
%
インタプリタで実行
% python
Python 3.8.11 (default, Aug 6 2021, 08:56:27)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import obd
>>> ports = obd.scan_serial()
>>> print(ports)
['/dev/tty.OBDII-SPPslave']
>>> connection = obd.OBD(ports[0])
>>> rpm = connection.query(obd.commands.RPM)
>>> print(rpm)
859.5 revolutions_per_minute
>>>
回転数が取れたようだ。