背景
ラズパイを購入し、無事起動するところまで確認できた。今回はラズパイと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へ飛びます)。
ジャンパーケーブル以外にもモーターやカメラなども同封されており、楽しみ。
環境構築 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 […]