本サイトはアフィリエイト広告を利用しています

Raspberry PI 4 Model B(ラズパイ)でCAN通信をしてみる

背景

ラズパイを購入し、無事起動するところまで確認できました。

今回はラズパイとPC間でCAN通信をしてみます。

CAN通信とは自動車内の通信規格であり、飛行機やその他IoTデバイスにも広く利用されている規格です。

CAN通信に関する知見を深めたく、ラズパイに実装を試みます。

本当はラズパイを2つ用意してラズパイ同士でCAN通信したかったのですが、予算の都合上、ラズパイの対向機はPCで我慢します。

ラズパイ購入、起動方法に関する記事はこちらをご覧ください。

環境構築 ラズパイにCANコントローラーを接続

ラズパイにはCANコントローラーがないので、別途購入する必要があります

ラズパイのGPIOとCANコントローラーを接続することでラズパイがCAN通信できるようになります。

さらに厄介なことに、CANコントローラーは5V動作が多く、3.3V仕様のラズパイでは普通には利用できません。

ラズパイでも動作できるように改造することも可能ですが、できれば避けたく、3.3V仕様で動作できる拡張ボードを探してみたところ、RS485 CAN HATという拡張ボードがAmazonで販売されていることを知りました(ボタンをクリックするとAmazonへ飛びます)。

ラズパイの上に載せるだけでOKという奇跡の拡張ボードです。

しかしながら困ったのが、ラズパイをケースに入れていると、この拡張ボードをラズパイに接続することができません。

そのため、一旦ケースからラズパイを取り出して拡張ボードを接続します。

ここで、CAN通信はCAN HighとCAN Lowの2本の線を繋ぐことで実現できます。

そのため、ラズパイとPC間でCAN通信するためには、CAN HighとCAN Lowと接続するための導線が必要になります。

今後のことも考え、一通りの電子工作キットを購入しました(ボタンをクリックするとAmazonへ飛びます)。

電子工作キット
Amazon

ジャンパーケーブル以外にもモーターやカメラなども同封されており、楽しみです。

電子工作キット

環境構築 PC側

ラズパイと通信する対向機を用意できなかったので、PCに専用デバイスを接続してラズパイと通信を試みます。

今回購入したのはInnoMaker社のUSB 2 CAN Moduleです(ボタンをクリックするとAmazonへ飛びます)。

USB2CAN
Amazon

CAN HighとCAN lowに接続しやすいようにD-SUBから変換できる部品がセットに含まれていてとても親切です。

直接つまむこともできますが、故障の原因となるため、できればつまむのは避けたいところです。

環境構築 ラズパイ(RS485 CAN HAT)とPC側(USB2CAN)を接続

SunFounderの電子工作キット内のジャンパーケーブル(オスーオス)を利用し、ラズパイ上のRS485 CAN HATとUSB2CAN間を接続します。

接続イメージは以下をご覧ください。

ラズパイとUSB2CANを接続

ここで、RS485 CAN HATとUSB2CANには両方とも120オームの抵抗が用意されています。

RS485 CAN HATはディップスイッチなので老眼の目ではパッと見抵抗ONなのかOFFなのか判別できません。

ということでUSB2CANのジャンパーピンを外しました(写真の間にあるゴミみたいな黒点はジャンパーピン)。

ここまで準備できたらラズパイの電源を入れて、USB2CANをPCに接続します。

ラズパイ側の設定

以下サイトを参考にさせていただきました。

とても親切に解説くださっており感謝です。

https://qiita.com/ryokurta256/items/27f1adfcbcb5cc04b8fa

ラズパイのコンフィグ設定

ラズパイのターミナルで以下コマンドを打ち込むとコンフィグ画面が立ち上がります。

$sudo raspi-config

コンフィグ画面内でInterfacing Optionsを選択し、SPIを有効化します。

ライブラリを有効化

config.txtを編集します。

boot配下にconfig.txtがあるので開いてみるとfirmware配下に移動したので触らないでねと怒られました。

気を取り直してfirmware配下にあるconfig.txtをVIエディタで編集します。

以下をconfig.txtの最終行に追記し、再起動を実施します。

dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=1000000

周波数(osciillator)に関し、Amazonのレビューにもあるように8MHzだったり、12Mhzだったりするので注意が必要です。

購入した拡張ボードが12MHzであることは拡張ボードのここを見るとわかります。

12000と書いてあるので12MHz。

拡張ボードの周波数

再起動が完了したら$dmesgと入力するとライブラリ利用可否状況がわかります。

[ 6.528813] CAN device driver interface

[ 6.648279] mcp251x spi0.0 can0: MCP2515 successfully initialized.

と表示されていればOK。

CANユーティリティをインストール

以下へアクセスし、一式をダウンロードし解凍します。

https://github.com/linux-can/can-utils

そして、以下を実行しインストールします。

$ sudo apt install can-utils

PC側(USB2CAN)の設定

以下サイトからUSB2CANのソフトウェアをダウンロードします。

https://github.com/INNO-MAKER/usb2can

Windows10の場合、ドライバはインストール不要の様子です。

USB2CANのドライバインストール状況を確認

USB2CANのユーザーマニュアルに従いready-made toolをインストールします。

アプリを立ち上げて、Scan Deviceを押下。デバイスを認識した様子です。

USB2CANのアプリケーションを操作している様子

CAN送信テスト

ラズパイ側でインターフェース設定します。

$ sudo ip link set can0 up type can bitrate 500000

CANコマンドCANID=123、DATA=11 22 33 44 55 66 77 88をテスト送信します。

$ sudo cansend can0 123#1122334455667788

PC側(USB2CAN)でOpen Deviceを押下してみます。

USB2CANのアプリケーションを操作している様子

PC側へCANフレームが届いた!感動!次はラズパイ側へ送信する準備です。

CAN受信テスト

受信状況を見たいので、ラズパイ側で以下を実行します。

$ candump can0

USB2CANでFrameIDとデータを設定し、Sendを押下。

USB2CANのアプリケーションを操作している様子

送信はできているので、ラズパイ側を確認します。

ラズパイ側で受信を確認している様子

ラズパイ側で受信できている!疎通完了! 次は定期送信に挑戦します。

次の記事はこちら。

3 COMMENTS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です