OBD2 データをMacbook上のpythonで取得する

前回、OBD2コネクタを使ってECU情報を取得をしてみた。

sgi-don.hatenablog.com

 

既存のアプリで情報を表示したけど、今回はデータだけを取得したい。

Androidアプリ開発はやったことがないので敷居が高いので、とりあえずpythonでサラッと取得する方法をやってみようと思う。

 

 

 

以下のサイトに倣って進めていこう。

nomunomu.hateblo.jp

MacbookBluetoothシリアル通信接続

早速Terminalを開いて

 


% sudo hciconfig hci0 up
sudo: hciconfig: command not found

 

ん?

早速つまづく。

 

Macbookにはhciconfigとかhcitoolとかコマンドがないようだ。

さて困った。Bluetooth制御できる何かがないか調べてみる。

 

qiita.com

 

普通にBluetooth接続して、 `cu` コマンド発行すれば繋がるようだ。

 

OBDクエリ発行方法

Bluetoothシリアル接続できることがわかったが、bindに関する記述が見つからない。

 

OBD2ライブラリの公式サイトをあさって見ると、接続方法が書いてあった。

 

python-obd.readthedocs.io

 


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
>>>

 

回転数が取れたようだ。