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

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

背景

ラズパイを購入し、無事起動するところまで確認できた。今回はラズパイとPC間でCAN通信をしてみる。CAN通信とは自動車内の通信規格であり、飛行機やその他IoTデバイスに広く利用されている規格。知っていて損はないと考え、ラズパイに実装を試みる。前回までの記事はこちら。

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

ラズパイにはCANコントローラーがないので、別途購入する必要がある。ラズパイのGPIOとCANコントローラーを接続することでラズパイがCAN通信できるようになる。ここで問題になるのが、CANコントローラーは5V動作が多く、3.3V仕様のラズパイでは普通には利用できない。改造はなるべくしたくないので、3.3V仕様で動作できる基板を探してみたところ、RS485 CAN HATという基板がAmazonで販売されていることを知る(ボタンをクリックするとAmazonへ飛びます)。

ラズパイの上に載せるだけでOK。困ったのが、ラズパイをケースに入れていると基板がはまらない。そのため、一旦ケースからラズパイを取り出して基板を接続。そして、CAN HighとCAN Lowと接続するため、導線が必要になる。今後のことも考え、一通りの電子工作キットを購入してしまおうと考え、以下を購入(ボタンをクリックするとAmazonへ飛びます)。

Amazon

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

環境構築 PC側

ラズパイと通信する対向機を用意できなかったので、PCに専用デバイスを接続してラズパイと通信を試みる。今回購入したのはInnoMaker社のUSB 2 CAN Module(ボタンをクリックするとAmazonへ飛びます)。

Amazon

CAN HighとCAN lowに接続しやすいようにD-SUBから変換できる部品がセットに含まれていてとても親切。直接つまむこともできるが、故障の原因となるため、できればつまむのは避けたい。

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

SunFounderの電子工作キット内のジャンパーケーブル(オスーオス)を利用し、ラズパイ上のRS485 CAN HATと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のユーザーマニュアルに従いready-made toolをインストール。

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

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を押下してみる。

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

CAN受信テスト

ラズパイ側で以下を実行(受信状況を見るため)。

$ candump can0

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

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

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

3 COMMENTS

コメントを残す

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