2019年8月13日

HUD #5: OBD-II周り

ELM327のドングルが届いたのでBluetooth周りを試してみた。
ELM327との通信は Python-OBDに丸投げでデータを拾うことはできるようになった。

Bluetoothは Raspbian Busterに最初から入ってるので、

  • /etc/systemd/system/dbus-org.bluez.service を編集
    (ExecStart行の末尾に -Cと、ExecStartPost行を追加)
    ExecStart=/usr/lib/bluetooth/bluetoothd -C
    ExecStartPost=/usr/bin/sdptool add SP
    
    
  • bluetoothctl
    scan on  → ELM327ドングルの MACアドレスが出るまで待つ
    pair XX:XX:XX:XX:XX:XX
    trust XX:XX:XX:XX:XX:XX
    
    
  • bluetoothctlで connect XX:XX:XX:XX:XX:XXとやっても接続できない、Python-OBDから触りに行ったときに接続確立するっぽいのでここではやらない
  • /dev/rfcomm1 にバインドする
    sudo rfcomm bind 1 XX:XX:XX:XX:XX:XX
    
    
  • Python-OBDのインストール
    pip3 install obd
    
    
  • あとは Python-OBDでの作業、/dev/rfcomm1を指定して obd.OBD()してる。
    import obd
    import os
    from time import sleep
    
    connection = obd.OBD('/dev/rfcomm1')
    
    while(1):
            cmd = obd.commands.RPM
            response = connection.query(cmd)
            print(response.value)
            sleep(0.1)
と、こんな感じでエンジン回転数を引っ張ってこれるはず。

ところが、ちょっと気になる点がいくつか。
  • 割と高い確率でELM327とECU間の通信が確立できなくて、条件がまだ整理できてない。
  • 使っているドングルが緑/黄/赤の LEDがついていて、スマホアプリから読み出してるときは緑色のLEDが点灯(=ECU通信状態?)、黄色が点滅(=Bluetooth通信中?)、赤色が点灯(=電源)しているが、Python-OBDから読み出しているときは緑色が点灯していない。何か読み出し手順が違うのかも。

0 件のコメント:

コメントを投稿