esp32でCAN通信を行う場合、CAN Bus Transceiverが別途必要になります。
CAN Bus Transceiverには駆動電圧が5Vの製品と、3.3V以上で駆動できる製品が有りますが、
esp32で5Vの製品を使う場合は、受信側のデータラインのレベルシフトが必要になります。
私は、安価(US$1)に入手できて、3.3Vで駆動できるSN65HVD230を使いました。
1つのCAN Bus上で、5V CAN Bus Transceiverと3.3V CAN Bus
Transceiverは混在して使うことができますが
混在して使う場合、終端抵抗を120Ωから150Ωに変更しないと送信が動きませんでした。
モジュールから左側のチップ抵抗(終端抵抗)を外して、150Ωの抵抗をCAN-HとCAN-Lの間に挟んで使いました。
CAN Bus上に既に終端抵抗が2つ有る場合、終端抵抗は不要です。
5V CAN Bus Transceiverと3.3V CAN Bus Transceiverを混在して使う場合の注意点がこちらに公開されて
います。
終端抵抗を2つに分割して、+1V Ground Shiftする回路を使うと良さそうなことが書かれています。
CAN Bus TransceiverとESP32の接続は以下の様になります。
CANコントローラを使う場合、2つのGPIO(GPIO32/33)をCANの送受信で使いますが、使用するGPIOは変更することができま
す。
CAN通信で使用できるGPIOに特に制限は無い様です。
こ
ちらに受信フィルター(Acceptance Filter)に関する説明が公開されています。
Bit layout of single filter mode と Bit layout of dual filter mode
の図が有りますが、Right side MSBit(図の右側が最上位ビット)で記載されています。
Right side MSBitの図を今まで見たことが無かったので、てっきりLeft side
MSBit(図の左側が最上位ビット)だと思い込んで、
メチャクチャはまりました。