バイクからOBD2経由でECU情報を取得する。(失敗)
前回の記事で、車(SUZUKI ワゴンR)のECUからOBD2を使ってエンジン回転数を取得することができました。
僕がやりたかったことは、車ではなくバイクのECUから情報を取得すること。 もっと言えば、走行中のバイクからECU情報を取得して、Android端末へ情報表示する。 もっと言えば、ヘルメットに装備したHUDに表示、そして最終的にはARグラス/ARコンタクトに表示したい!
という妄想を現実化すべく、第一歩を歩んでおります。
というわけで今日は、バイクのECUにOBD2コネクタを接続して情報を取得する。
バイクにOBD2と接続する。
OBD2コネクタを接続する。
OBD2コネクタは、Amazonで買った以下のもの
こちらは16ピン接続。
んで、うちのバイク(SUZUKI Bandit1250S)は、
バイク右側のカウルを外すと、
6ピンでした。そのままでは繋げられません。
KITACOから、OBD用に6ピン→16ピン変換ケーブルが売っています。
3000円かぁ、ちょっと高いなと思っていたらAliExpressに安く売っていました。
ついでにELM327のコネクタも追加購入してみます。
今度は大丈夫だろう。
この状態で、エンジンをかけて、AndroidアプリのTorqueで動作確認してみる。。。。
ECUを認識できない・・・なんだこりゃ。
Pythonから接続してみる。
Torqueで認識できないって、何が起こっているんだ。
何が起こっているかを確認するため、前回、車で動作確認OKだったPythonスクリプトで動作確認してみる。
(obd2) obd % python3 obd_loop.py [obd.elm327] Failed to set baudrate [obd.obd] Cannot load commands: No connection to car Not Connected end (obd2) obd % python3 obd_loop.py [obd.elm327] Failed to query protocol 0100: unable to connect [obd.elm327] Adapter connected, but the ignition is off [obd.obd] Cannot load commands: No connection to car OBD Connected end
何度やってもエラーになる。エラーパターンは2つ。
obd.logger.setLevel(obd.logging.DEBUG)
でデバッグ表示してみた。
パターン1:
(obd2) obd % python3 obd_loop.py [obd.obd] ======================= python-OBD (v0.7.1) ======================= [obd.obd] Explicit port defined [obd.elm327] Initializing ELM327: PORT=/dev/tty.OBDII-Port BAUD=auto PROTOCOL=auto [obd.elm327] Response from baud 38400: b'' [obd.elm327] Response from baud 9600: b'' [obd.elm327] Response from baud 230400: b'' [obd.elm327] Response from baud 115200: b'' [obd.elm327] Response from baud 57600: b'' [obd.elm327] Response from baud 19200: b'' [obd.elm327] Failed to choose baud [obd.elm327] closing port [obd.elm327] write: b'ATZ\r' [obd.elm327] Failed to set baudrate [obd.obd] Closing connection [obd.obd] Cannot load commands: No connection to car [obd.obd] =================================================================== Not Connected end
パターン2:
(obd2) obd % python3 obd_loop.py [obd.obd] ======================= python-OBD (v0.7.1) ======================= [obd.obd] Explicit port defined [obd.elm327] Initializing ELM327: PORT=/dev/tty.OBDII-Port BAUD=auto PROTOCOL=auto [obd.elm327] Response from baud 38400: b'' [obd.elm327] Response from baud 9600: b'\x7f\x7f\r?\r\r>\x7f\x7f\r?\r\r>\x7f\x7f\r?\r\r>\x7f\x7f\r?\r\r>\x7f\x7f\r?\r\r>ATZ\r\r\rELM327 v1.5\r\r>\x7f\x7f\r?\r\r>\x7f\x7f\r?\r\r>' [obd.elm327] Choosing baud 9600 [obd.elm327] write: b'ATZ\r' [obd.elm327] wait: 1 seconds [obd.elm327] read: b'ATZ\r\r\rELM327 v1.5\r\r>' [obd.elm327] write: b'ATE0\r' [obd.elm327] read: b'ATE0\rOK\r\r>' [obd.elm327] write: b'ATH1\r' [obd.elm327] read: b'OK\r\r>' [obd.elm327] write: b'ATL0\r' [obd.elm327] read: b'OK\r\r>' [obd.elm327] write: b'AT RV\r' [obd.elm327] read: b'13.5V\r\r>' [obd.elm327] write: b'ATSP0\r' [obd.elm327] read: b'OK\r\r>' [obd.elm327] write: b'0100\r' [obd.elm327] read: b'SEARCHING...\rUNABLE TO CONNECT\r\r>' [obd.elm327] Failed to query protocol 0100: unable to connect [obd.elm327] Adapter connected, but the ignition is off [obd.obd] Cannot load commands: No connection to car [obd.obd] =================================================================== OBD Connected [obd.obd] Closing connection [obd.elm327] closing port [obd.elm327] write: b'ATZ\r' end
接続できる場合と接続できたけど途中から通信できなくなるパターン(ignition is off?)があるようだ。
調べていくと、電気的に問題がある場合に発生するとのこと。
2つあるELM327どちらも発生するので、変換ケーブルの問題かな。
もう少し調べていくと、どうやらそもそもこのバイクはOBD2に対応していないようだ。
http://tarte.2ch.sc/test/read.cgi/motorbike/1567170897/
327 :774RR:2019/11/12(火) 23:54:47 ID:UnYz6yHM.net このバイクはOBDコネクターってある? わかる人教えて 330 :774RR:2019/11/14(木) 00:22:36.92 ID:h/ypfHbw.net >>327 2016/10以降の新型車に適応されるOBDのコネクタなら無いよ 初年度2007だしな 代わりにディーラーモードカプラなら付いてる、出力される故障コードは FIとABS周りに限ってならクルコントラコン他盛々の現行車に見劣りしない
2016年10月ってこの話だな。
https://www.mlit.go.jp/common/001094623.pdf
文中に 電気系統の断線等による機能不良を監視する OBD システムの装備を義務付ける。
って書いてある。
Bandit1250Sは2007年からのモデルだし、このバイクの初年度登録は2014年。
だめかー。バイク買い換えるかー。
さらにもっと調べていくと、
OBD2
の義務化は新車は2020年12月以降、生産継続車は2022年11月から義務化のようだ。
ということは、今世に出ているバイクでOBD2が動作するバイクはほとんどないってことじゃないですかー
バイク買い替えるしかないかな。