Make.

OBD2(CAN)で自動車と通信(ソフト編)

Pocket

ここでは、RaspberryPiと車を接続して、通信する方法を解説します。
回路の解説は、OBD2(CAN)で自動車と通信(ハード編)を参考にしてください。

以下の解説する方法で、RaspberryPi上で車の中に流れる車速やエンジン回転数を確認したり、一部の機能を制御を行うための操作ができるようになります。

【注意】車の通信を妨害する恐れもあるため、最悪事故や故障につながります。ここで解説する方法は、自己責任で実施してください。


Raspbianの準備

ここでは、Linux カーネルのバージョンが 3.18以降のRasbianの利用を想定しています。
それ以前のカーネルでは、CANコントローラ(MCP2515)との接続設定に、カーネルの再構築が必要となるため、
最新のバージョンで実施することをお勧めします。

ハードウェアとRaspbianの準備が完了したら、Rapsberry Pi側の設定を行います。
CANコントローラ(MCP2515)と、RaspberryPiの接続はSPI通信で行います。
そのため最初にSPIを有効にする必要があります。


SPIの設定

以下のコマンドを実行して、RaspberryPiの設定を行います。

$ raspi-config

Advanced Optionsを選択して、A6のSPIを選択します。
SPIが有効になるように選択します。

00221
00222


CANコントローラとの接続設定

SPIを有効にしたら、エディタで/boot/config.txtを開き、次の3行を加えます。

$ sudo vi /boot/config.txt
dtparam=spi=on
dtoverlay=mcp2515-can0-overlay,oscillator=16000000,interrupt=25
dtoverlay=spi-bcm2835-overlay

設定を有効にするために、一度再起動します。
こうすることで、RaspberryPiのSPI端子をMCP2515との接続に割り当てることができます。

ここまでで CAN通信をするためのドライバは準備は完了しました。
次は、通信を確認するためのソフトをインストールします。


CAN Utilsのインストール

CAN通信を確認するためのソフトcan utilsをダウンロードして、実際にCAN通信を確認します。

以下のコマンドを実行し、ソフトをダンロードして、インストールします。

$ sudo apt-get install autoconf git libtool
$ git clone https://github.com/linux-can/can-utils.git
$ cd can-utils
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

動作確認

まずは、車両に接続しないで、MCP2515との接続を確認します。
これらの操作は省いてもかまいません。

以下のコマンドを実行し、can0としてデバイスを登録します。
「loopback on」では、実際にCANバスに信号を出さず、CANコントローラである「CMP2515」のみで操作が完結しています。

$ sudo ip link set can0 type can bitrate 500000 loopback on
$ sudo ifconfig can0

その後、以下のコマンドを実行して、受信したコマンドを表示します。

$ candump can0

次に、もう一つコンソールを立ち上げ、以下のコマンドを実行します。

$ cansend can0 123#1122334455667788

dumpしたコンソールに

pi@raspberrypi:~ $ candump can0
  can0  123   [8]  11 22 33 44 55 66 77 88
  can0  123   [8]  11 22 33 44 55 66 77 88
  can0  123   [8]  11 22 33 44 55 66 77 88
  can0  123   [8]  11 22 33 44 55 66 77 88

が表示されたらMCP2515との接続は確認できています。

candumpやcansendが動かない場合

can0デバイスがdownしている可能性があるため、以下のコマンドを実行してください。

$ sudo ifconfig can0 up

逆にcan0デバイスの機能を無効化したい場合は、以下のコマンドを実行します。

$ sudo ifconfig can0 down

車両との接続

実際に車両のOBD2コネクタに接続して、以下のコマンドを実行すると、車両に流れるCAN信号を受信することができます。
信号が流れていない場合は、IGをONにしてください。

$ sudo ip link set can0 type can bitrate 500000
$ candump can0

ここまでで、車両につないで車両情報が確認できるようになりました。

Pocket