2015年9月13日日曜日

OBD-II Adapter for Arduino用のライブラリを調べてみた。

前回はOBD2のBluetoothアダプタを分解してArduinoとつなげてテストを行ったけど、今回はそのライブラリについて調べてみた。

前回使用したFreematicsのライブラリの使い方というか、詳細な説明が見つからないのでライブラリを微妙に読み解いてみた。
もしかしてFreematicsの製品用のライブラリなので製品自体に説明書とかついてきてるのかな?

中身をさらっと見る限りは特にFreematicsのデバイスでしか使えないような細工とかはされてないような感じで前回の用に適当なELM327デバイスを分解したやつでもこのライブラリで動きそう。(UART接続に限ると思うけど。)

そして前回の車に繋いでも全く反応がないという問題はELM327側の自動プロトコル選択機能だったわけだけど、ライブラリから手動で選択する方法も分かった。

初期化処理のobd.init()時にプロトコルを指定してやればいいみたい。

PROTO_ISO_9141_2
PROTO_KWP2000_5KBPS
PROTO_KWP2000_FAST
PROTO_CAN_11B_500K
PROTO_CAN_29B_500K
PROTO_CAN_29B_250K
PROTO_CAN_11B_250K
が使用できる模様。

例えば、サンプルスケッチ(rpm_led_uart)の21行目を
while (!obd.init(PROTO_CAN_29B_500K));
にすると手動でCANの500kbpsの29bitIDに設定される。
自動プロトコル選択でうまく動かない車種の人は使われてるプロトコルを調べて手動で入れてみると動くようになるかも。

ボーレートの指定方法も判明した。
setBaudRate()で指定できるみたい。
obd.begin();の下辺りに
obd.setBaudRate(9600);
とか入れておけばいいみたい。obdsimを使ってデバッグするときに必要だった。
ちなみにELM327自体のボーレートを変更するときはPCに直接繋いでATコマンドで変更する。

ちなみにobd.read()で読み出せる値はOBD.hの中身を見ればわかるかも。
I2C対応のOBD2アダプタを使う予定がないのでライブラリいじって無効化したらコンパイル後のスケッチサイズが1200バイトぐらい減ったw

0 件のコメント:

コメントを投稿