背景
ラズパイを購入し、無事起動するところまで確認できました。
今回はラズパイと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へ飛びます)。
ジャンパーケーブル以外にもモーターやカメラなども同封されており、楽しみです。
環境構築 PC側
ラズパイと通信する対向機を用意できなかったので、PCに専用デバイスを接続してラズパイと通信を試みます。
今回購入したのはInnoMaker社のUSB 2 CAN Moduleです(ボタンをクリックすると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を押下。
送信はできているので、ラズパイ側を確認します。
ラズパイ側で受信できている!疎通完了! 次は定期送信に挑戦します。
次の記事はこちら。
[…] Raspberry PI 4 Model B(ラズパイ)でCAN通信をしてみる […]
[…] Raspberry PI 4 Model B(ラズパイ)でCAN通信をしてみる […]
[…] Raspberry PI 4 Model B(ラズパイ)でCAN通信をしてみる Raspberry PI 4 Model B(ラズパイ)で計測した温度をMQTT送信(python) MQTT経由でRaspberry PI 4 Model B(ラズパイ)からモーター制御 SHARE […]