お客様からのご依頼で、
ソフトにCAN通信の機能を追加しています。
以前から追加しているのですが、
ESP32のArduinoは、簡単ですね。
以下のCAN通信のライブラリを使用すると
ESP32相互のCAN通信は簡単にできました。
http://www.iotsharing.com/2017/09/how-to-use-arduino-esp32-can-interface.html
また、単純にTOYOTAさんのヨーレートセンサを
接続して、測定結果を表示するのも、
できました。
ESP32とCANを接続するには、間にトランシーバICが必要です。
今回は、MCP2561を使用し、終端抵抗は75Ω2個。
これで、ヨーレートセンサからのデータは受信できます。
以下のサイトを参考にさせていただきました。
https://www.shutingrz.com/post/can-training-first/
※使用できるCANのIOピンは以下の通りのようです。
GPIO5 / GPIO12 / GPIO25 D CAN TX
GPIO4 / GPIO14 / GPIO35 R CAN RX
それぞれ、ペアになっており、当方が開発した
IOボードでは、GPIO25とGPIO35しか
空いてないため、GPIO25とGPIO35に変更して
使用しました。
また、ボーレート等の通信設定が必要になります。
ヨーレートセンサとの通信は500kHzとなるため、
ライブラリのソースを修正する必要がありました。
この辺も、どこかに整理できるといいのですが・・・。
とりあえず、機器からデータを読み出せましたが、
ヨーレートとESP32しかCANバスにいないという状況は
実際的ではないですね。
現在、SavvyCANやISim、Controlsを使用して、
Linuxで仮想のCAN通信を行っております。
VCAN0ですが、ソケット通信なんですね。
VCAN0上のパケットをESP32に送信、
一方ESP32が受信した、実際のCANのパケットを
VCAN0上に間接的に送る方法を現在検討中です。
これができると、Linux上のパケット送信がESP32で受け取れて
ESP32に届いたCANのパケットをパソコンに送れるんですが・・・。
現状、Linuxに接続したESP32のボタンを押すと、
Linux上の車のシミュレータのドアを開けることができました。
データの送信はできていそうです。
実際に公表するには、多くのパケットがあっても
正常動作するように検証が必要です。