PlatformIO で ESP32 の CAN を使う方法を紹介します.
はじめに
理由はよくわかっていませんが,現時点において PlatformIO の環境では ESP32 の CAN がサポートされていません.フレームワークとして ESP-IDF を選択して CAN のサンプルを実行しようとしても「fatal error: driver/can.h: No such file or directory」となってしまいます.
対応
これは,CAN 関連のドライバーがインストールされていないのが原因です.ESP-IDF からファイルを取得すると動くようになります.
具体的には,PowerShell で次のコマンドを実行します.ユーザ名等は環境変数から取得するようにしていますので,Windows10 の PowerShell にそのままコピペすれば OK です.
1 2 3 4 |
Invoke-WebRequest https://raw.githubusercontent.com/espressif/esp-idf/master/components/driver/can.c -OutFile "C:\Users\$env:username\.platformio\packages\framework-espidf\components\driver\can.c" Invoke-WebRequest https://raw.githubusercontent.com/espressif/esp-idf/master/components/driver/include/driver/can.h -OutFile "C:\Users\$env:username\.platformio\packages\framework-espidf\components\driver\include\driver\can.h" Invoke-WebRequest https://raw.githubusercontent.com/espressif/esp-idf/master/components/soc/esp32/include/soc/can_struct.h -OutFile "C:\Users\$env:username\.platformio\packages\framework-espidf\components\soc\esp32\include\soc\can_struct.h" Invoke-WebRequest https://raw.githubusercontent.com/espressif/arduino-esp32/master/tools/sdk/ld/esp32.peripherals.ld -OutFile "C:\Users\$env:username\.platformio\packages\framework-espidf\components\esp32\ld\esp32.peripherals.ld" |
注意点
現時点で,driver/can.h
は,include 周りのバグがあるので,#include "driver/can.h"
をソースの先頭に書くと「error: unknown type name ‘TickType_t’」というエラーが表示されてしまいます.
この場合,#include "freertos/FreeRTOS.h"
の後に #include "driver/can.h"
を書くようにすることで解消できます.
コメント