ここでは、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が有効になるように選択します。
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
ここまでで、車両につないで車両情報が確認できるようになりました。