
PlatformIOでESP32-C6(M5Stack NanoC6)を扱う際のツールチェーン不整合トラブル解消法
【概要】
ESP32-C6(M5Stack Nano C6) をArduino フレームワークを使おうとして PlatformIO でビルドしたところ、ツールチェーンやフレームワークのバージョン不整合で苦戦した顛末と解決方法をまとめました。
M5Stack Nano C6をPlatformIOで使う
本題の前に、M5Stack Nano C6をPlatformIOで利用する方法は以下のページにて詳細に記載されています。
M5Stack NanoC6購入
M5Stack NanoC6でSSD1306 OLEDを使つ
最初の問題
自分も上記ページを参考に開発をしていましたが、年末にいつもと違うPCで開発環境を構築しようとPlatformIO で `esp32-c6-devkitm-1` ボードをビルドしようとしたところ、以下のエラーが発生しました。
Resolving esp32-c6-devkitm-1 dependencies...
Configuring toolchain packages from a remote source...
Tool Manager: Installing espressif/toolchain-riscv32-esp @ 13.2.0+20240530
UnknownPackageError: Could not find the package with 'espressif/toolchain-riscv32-esp @ 13.2.0+20240530' requirements for your system 'windows_amd64'
見たところ、特定バージョン(13.2.0+20240530) の RISC-V ツールチェーンが見つからないというエラーで、Windows 環境ではまだ提供されていないか、プラットフォーム指定が古い/新しいなどの不整合がありそうでした。
いろいろ試したけれど解決しきれず
不足のファイル(`pioarduino-build.py` など)を手動でコピー
`.platformio` や `.cache` フォルダを削除して再インストール
公式/非公式の `platform = espressif32` バージョンを切り替え
カスタムプラットフォーム(`pioarduino` など)を使ってみる
……などを試してみたところ、一部のエラーは解消したものの、最終的にはビルド中に別の不整合が発生。バージョン不一致やコールバック関数のシグネチャ変更といった問題が連鎖的に起きてしまいました。
原因の一端:`arduino-esp32` が2週間前にバージョンアップ
Arduino Core for ESP32 は頻繁に更新されており、ESP32-C6 サポートもまだ新しいことから、PlatformIO のプラットフォームやツールチェーンと同期が取れていない場合が多いようです。
最終的な解決方法
以下のように `platformio.ini` を設定したところ、ビルドが通るようになりました。
違いは、espressif32のバージョン指定(6.6.0)と
framework-arduinoespressif32のブランチ指定(#idf-release/v5.1)を追加したことです。
[env:esp32-c6-devkitm-1]
platform = espressif32@6.6.0 ; バージョンを 6.6.0 に固定
board = esp32-c6-devkitm-1
framework = arduino
platform_packages =
platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#idf-release/v5.1 ;ブランチidf-release/v5.1を指定
platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/esp32-arduino-libs.git#idf-release/v5.1
build_flags =
-DARDUINO_USB_CDC_ON_BOOT=1
-DARDUINO_USB_MODE=1
なぜこの設定で解決するのかの予想
`platform = espressif32@6.6.0`
ESP-IDF 5.1 系と整合を取れるバージョン。6.9.0 では不具合が起こるケースがあった。`arduino-esp32` と `esp32-arduino-libs` を `idf-release/v5.1` に指定
ESP32-C6 は新しい ESP-IDF (v5.1) をベースにしているため、同じバージョンの Arduino Core およびライブラリを使うことで不整合がなくなる。RISC-V ツールチェーンのバージョンや内部のシンボルが一致
esp-idf ビルド済みライブラリとコンパイラ(`toolchain-riscv32-esp`)の組み合わせが適切になる。
参考リンク
Could not find the package with 'espressif/toolchain-riscv32-esp-8.4.0+2021r1'
How to fix PlatformIO ESP32 missing SConscript file: platformio-build.py
上記の多くの記事では不足ファイルをコピーする、キャッシュを削除する、プラットフォームを切り替えるなどの対処法が紹介されていますが、最終的にはバージョン不一致が原因だったため、バージョンを整合させることが最も重要でした。
まとめ
ESP32-C6 + Arduino はまだ開発途上であり、PlatformIO との整合性が崩れがち。
フレームワーク(Arduino-ESP32) とプラットフォーム(esp-idf) のバージョンをそろえる必要がある。
今回は `espressif32@6.6.0` と `arduino-esp32.git#idf-release/v5.1` を指定することで解決した。
もし同じようなエラーで悩んでいる方がいれば、一度各バージョンが正しく揃っているかを確認してみてください。