この記事は、 CLionをエディタとして使い、PlatformIO CLI(pioコマンド)でESP32(Arduino)をビルド・アップロードする 開発環境の作り方をまとめたものです。CLionのコード補完や定義ジャンプの快適さを活かしつつ、ビルドとアップロードはコマンドラインのpio runに任せる、という構成になります。
JetBrains製品の使いやすさに感心している中、ESP32(Arduino)のC++開発をClionで行うことに成功しました。これにより、「VS Code x PlatformIO」から「Clion x PlatformIO」へ開発環境を変更できました。情報が少なかったため苦労しましたが、ChatGPTやGoogle検索を駆使して解決できました。
ESP32全般の記事は Arduino・ESP32・Raspberry Piで始めるIoT電子工作まとめ にまとめています。まだESP32を動かしたことがない方は、先に ESP32でLチカするまでの設定 を済ませておくとスムーズです。
事前準備: PlatformIOプラグインのインストール
VS Codeの拡張機能でPlatformIOをインストールしてましたが、VS Codeと密接してるためClionからは使えないようです。改めてPlatformIOを単体でインストールしました。
$ wget -O get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
$ python3 get-platformio.py
その後シェルにパスを通します。例: ~/.zshrc
export PATH="$PATH:/Users/xxxxx/.platformio/penv/bin"
Clionのインストール
JetBrainsの公式ウェブサイトからClionをダウンロードし、インストールします。有料ですが、仕事になるようであればVS Codeよりかなりオススメです。phpStorm初め、 まとめ買いできるプランもあるのでそちらを選ぶと割安 でした。(4000円/月くらい)
ClionでPlatformIOを使えるようにする
- Clionを開きます。
- 「File」メニューから「Settings」を選択します。
- 「Plugins」セクションを開き、「Marketplace」タブで「PlatformIO」を検索します。
- 「PlatformIO for CLion」プラグインを見つけ、インストールします。
新しいPlatformIOプロジェクトの作成
すでにVScode x PlatformIOでのプロジェクトがある場合にも、まずはClionで新しいPlatformIOプロジェクトの作成をすることをおすすめします。
- 「File」メニューから「New Project」を選択します。
- 「PlatformIO」セクションからESP32のプロジェクトを選択します。
- 必要な設定を行い、「Create」をクリックしてプロジェクトを作成します。
このことにより、ESP32の標準プログラムがローカル環境へインストールされ、IDE上で標準クラスの定義へのジャンプが機能します。
ESP32開発ボードの設定
後は通常通り platformio.ini でビルド情報を書き換えて開発してください。以下は、私の開発環境の一例です。
[platformio]
;src_dir = lib/Adafruit_Seesaw/examples/soilsensor_example
;src_dir = lib/Adafruit_Seesaw/examples/with_display
;src_dir = lib/AE_TSL2572/examples/demo
;src_dir = lib/mhz19_uart/examples/demo
;src_dir = lib/DHT22/examples/demo
;src_dir = lib/Relay/examples/relay_test
;src_dir = lib/Relay/examples/solenoid_valve_demo
;src_dir = lib/Relay/examples/solenoid_valve_online
;src_dir = lib/TGS2450/examples/demo
;src_dir = lib/TGS2450/examples/arduino_uno
;src_dir = lib/TGS2450/examples/uno_debugger
;src_dir = lib/phMeter/examples/demo
;src_dir = lib/phMeter/examples/phMonitor
;src_dir = lib/DS18B20/examples/demo
;src_dir = lib/WS2812B/examples/simple
;src_dir = lib/WS2812B/examples/rainbow
;src_dir = lib/WS2812B/examples/demo
;src_dir = lib/SoilMoistureSensor/examples/demo
;src_dir = lib/ADS1115/examples/demo
;src_dir = lib/ML8511/examples/demo
src_dir = lib/RFID_READER/examples/test_r200
; プログラムのビルドアップロード -> $ pio run -e esp32 -t upload && pio device monitor
; クリーンビルド -> $ pio run --target clean
[env:esp32]
platform = https://github.com/platformio/platform-espressif32.git
board = esp32dev
framework = arduino
monitor_speed = 115200
platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32#2.0.2
build_flags =
'-DWIFI_SSID="hoge"'
'-DWIFI_PASSWORD="fuga"'
'-DDEBUG_MODE=1'
[env:uno]
platform = atmelavr
board = uno
framework = arduino
monitor_speed = 115200
コーディング
通常はsrcフォルダ内にあるmain.cppでプログラムを記述しますが、先のビルド設定のように lib/xxxxx/examples/test 内のinoファイルを単体テストできたりします。C++ベースのライブラリを開発したい場合に便利です。
ビルドとアップロード(pio runの役割)
まだ設定を詰められず、Clionのツールバーから「Build」や「Upload」ができてません。Clion側にもpioのパスを設定する必要があるのでしょう。デバッガーも使えそうなので便利そうではありますが。
そこで、ビルドとアップロードは pio run コマンドに任せます。主な使い方は次の通りです。
- ビルド&アップロード:
pio run -e esp32 -t upload - シリアルモニタを開く:
pio device monitor - クリーンビルド:
pio run --target clean
プロジェクトディレクトリ下でターミナルから以下のコマンドを叩けば、ビルド・アップロードしてそのままシリアルモニタを開けます。&&以降は、アップロードが成功したらシリアルモニタを開く意味です。
$ pio run -e esp32 -t upload && pio device monitor
現在、ClionはあくまでEditorとして使っており、ビルドはCLIのpio runに任せてます。進展あればまた追記します。
クラス名や関数名などの名前解決してくれない、リンクへ飛ばない
ClionでPlatformIOを使う場合は、まず新しいプロジェクトを作成してデフォルトライブラリをインストールすることを推奨します。それでも問題が解決しない場合は、下図のメニューを実行することでリンクできるかもしれません。

また開発を進める上で、ファイル名をリファクタリングしたり、外部からフォルダを追加した後も、ファイルが見つからないエラーが赤い波線で示されることがあります。そんな時はキャッシュのクリアを行うと直る可能性があります。以下手順です:
- 「File」メニューから「Invalidate Caches / Restart」を選択
- 「Clear file system cache and Local History」にチェックを入れて「Invalidate and Restart」を実行

まとめ
ClionとJetBrains製品のIDEは非常に強力で便利です。VS Codeよりもプログラミング作業に集中しやすいと感じます。CLionをエディタ、pio runをビルド・アップロード役として組み合わせるだけで、ESP32(Arduino)開発はかなり快適になります。
関連記事
開発環境が整ったら、実際にESP32を動かしてみましょう。
- Arduino・ESP32・Raspberry Piで始めるIoT電子工作まとめ
- ESP32でLチカするまでの設定
- ESP32へ書き込みエラー・MacBook 2022でconnectできない・自動書き込みに失敗したときの解決方法
- ESP32でADS1115を使う方法|配線図・I2Cアドレス・サンプルコード
- ESP32のマルチスレッドで複数のサーボモータを同時に動かす方法
- ESP32でBluetooth Classicを使ってAndroidと通信する
関連アイテム
ESP32開発で使っている周辺機器です。