やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

PlatformIO for CLionで #M5Stack へのuploadポートを環境変数で指定する

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ファイルに指定する方法が下記ブログで紹介されていました(たいへん助かりました)。

blog.magcho.com

しかし、シリアルポートをリポジトリに書き込んだり、それを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の再起動が必要な点にご注意ください。

コード全体はこちらを参照

github.com

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

参考

www.switch-science.com

mag.switch-science.com

www.jetbrains.com

platformio.org