M5Stack Basic v2.6に搭載されているシリアル変換ICであるCH9102FのmacOSドライバ(v1.7時点)では、M5Stackが接続されているシリアルポートを明示的に指定しないでuploadしようとすると次のエラーで失敗します。
(snip) Looking for upload port... Auto-detected: /dev/cu.usbmodemXXXXXXXXXXX Uploading .pio/build/m5stack-fire/firmware.bin (snip) A fatal error occurred: Failed to write to target RAM (result was 01070000: Operation timed out) *** [upload] Error 2
本来接続すべき /dev/cu.wch*
でなく /dev/cu.usbmodem*
に接続しようとして失敗しています。
この事象および、回避方法としてuploadポートをplatformio.iniファイルに指定する方法が下記ブログで紹介されていました(たいへん助かりました)。
しかし、シリアルポートをリポジトリに書き込んだり、それをM5Stackをつなぎ替えるたびに書き換えるのも面倒なので、別の手段を探ってみました。
検証環境
検証環境は次のとおりです。
- macOS 11.2.3 (Big Sur)
- CLion 2022.2.3
- PlatformIO for CLion plugin 22.3739.54
- M5Stack Basic v2.6
PLATFORMIO_UPLOAD_PORT環境変数
uploadポートは、グローバル環境変数 PLATFORMIO_UPLOAD_PORT
で指定することもできます*1。
uploadだけCLIで実行するのであれば、次のように指定できます。
PLATFORMIO_UPLOAD_PORT=$(ls /dev/cu.wch*) pio run --target upload --environment m5stack-core-esp32
しかしこれではテスト実行やデバッグ実行を考えると不便です。 そこで、.bashrcに次のように追加することで、uploadもCLionのGUIから実行できるようにしました。
export PLATFORMIO_UPLOAD_PORT=$(ls /dev/cu.wch*)
.bashrcが読まれるのは(uploadなどの実行時でなく)CLion起動時なので、設定後CLionの再起動が必要です。 また、M5Stackをつなぎ替えたときにもCLionの再起動が必要な点にご注意ください。
コード全体はこちらを参照
Run Configurationで環境変数を指定できるとよいのでは?
とはいえ、PlatformIO for CLion pluginではPlatformIO Coreつまりpio
コマンドを実行していますので、Run Configurationで環境変数を指定できると便利そうです。
これを要望としてIssue Trackerに登録しましたので、類似の悩みをお持ちの方はvoteもしくは、より良い提案をコメントいただけると嬉しいです。
https://youtrack.jetbrains.com/issue/CPP-30672/Support-specify-environment-variable-on-run-configurationyoutrack.jetbrains.com