もりぶーノート

DIYとか電子工作とか

CLion + PlatformIOで快適開発

開発環境の共通化

本記事ではJeBrains社製のC言語統合開発環境であるCLion上にPlatformIO(後述)を組み込んで、ESP-WROOM-02の開発環境を構築します。
以前の記事で書いたSTM32Fシリーズ開発環境のCLion乗り換えに引き続き、 ESP-WROOM-02の開発環境を使い勝手の悪いArduino IDEからCLionに乗り換えることで、これらの開発環境を共通化しようと思います。

課題

今回の記事執筆に至る課題としては二点あります。 私はSTM32FシリーズとESP-WROOM-02を使用する事が多いのですが、それぞれ課題があります。
まず一点目はSTM32Fシリーズは以前の記事で書いたように開発環境が混沌としており、 環境も十分に成熟しているとは言えなさそうです。そのためCLionで開発ができるように環境を整えました。 molyb.hatenablog.com

二点目はESP-WROOM-02の問題です。
ESP-WROOM-02はEspressif Systems社が開発しているWi-Fiモジュールで、安価で簡単にWi-Fiに接続できます。 秋月等で購入すれば技適も取得された物となりますので、法律面でも安心です。 本モジュールはマイコン等と組み合わせて使用する他に、Arduino IDE経由でArduinoプログラムを書き込んで独立動作させる事ができます。 他の方の作例を見ますと多くの方がArduino IDEを使用しており、設定方法等も基本的にArduino IDEに関するものが多い印象を受けます。
ただ、Arduino IDEコンパイルも遅く補完機能や関数ジャンプもできずお世辞にも使いやすいとは言えません。特に個人的にはコンパイルの遅さが致命的です。 Arudino IDEはビルド時にすべてのファイルをビルドするため、大した変更をしていないにも関わらず待ち時間が多く発生します。 ビルド時の問題に起因する妙なトラブルが発生しないため、特にエントリユーザフレンドリーなArduinoにおいて理解できなくは無いですが、その代償があまりにも大きすぎます。

問題解決

上記の問題(特にESP-WROOM-02の問題)を解消するため、CLion上にPlatformIOに組み込んで開発環境を整えていきます。

PlatformIOとは?

PlatformIOは組み込み開発の次世代エコシステムと謳っています。 具体的に何かと言うと、異なるベンダの異なるマイコンでも同一の開発環境やライブラリで開発できるように ボード情報やライブラリおよび管理ツールを包括して提供しています。 さらに、CIや静的解析、ユニットテストのための機能も提供しているそうなのでこちらもいずれ試してみたいと思います。

本ツール類はクロスプラットフォームで開発されており、提供されている機能としては

  • PlatformIO IDE
  • PlatrormIO Core(CLI)

が挙げられます。 PlatformIO IDEVS Codeプラグインとして配布されており、後者のPlatformIO Coreを内包しています。そのためVS Codeで開発する方はこちらをマニュアルに従ってインストールすれば良いです。 Platform IO自体はVS Code以外にも対応しており、PlatrormIO Coreをインストールする事で今回説明するCLionの他にもAtomEclipse、その他多数のIDEに対応しています1

開発環境構築

CLion上に環境を構築するためにはまず、Platform IO Core のインストールとCLionのプラグインインストールが必要です。 基本的には公式のチュートリアルを参照していただければ良いのですが、 チュートリアルに記載がなくハマった点をフォローする形で記載していきたいと思います。

前提の環境

今回は以下の環境を前提として説明を行います。

環境 バージョン
OS WIndows 10
IDE CLion 2019.3.5
PlatformIO Core 4.3.0

PlatformIO Coreのインストール

まず、公式チュートリアルの手順通に倣ってPlatform IO Coreをインストールするのですが、 インストールにはPython環境が必要です。 今回は有名なPythonディストリビューションであるAnacondaをインストールし、その上でPlatformIOをインストールしていきます。 こちらからAnacondaのPython 3.7 versionインストーラを入手し、インストールします。 ここで、インストール時にPython環境を複数インストールするつもりで無いならば Add anaconda to my PATH environment valueというチェックボックスにチェックをつけて、Anacondaを環境変数PATHに追加してください。
ちなみにインストール後の環境変数は以下の様になっています。オレンジ枠で囲った部分が今回のインストールで追加された環境変数になります。
f:id:molyb:20200320202814p:plain

まずはインストール用スクリプトを取得します。 ドキュメント記載のリンクよりPythonスクリプトをダウンロードします。 その後Anacondaプロンプトを起動し、ダウンロードしたファイルを実行します。
f:id:molyb:20200320203548p:plain

コマンドプロンプトを起動し、platformioコマンドをタイプして以下のようになれば正常にインストールできています。 f:id:molyb:20200320203823p:plain

インストールは成功しているのにコマンドプロンプトからplatformioコマンドを実行できなかった場合、 環境変数の設定に誤りがある可能性がありますので再度確認してください。

CLionのプラグインインストール

CLionプラグイン側は正直なところ オフィシャルマニュアルをそのまま読み進めるだけで問題無いと思います。

実際にプロジェクトをビルドして動かしてみる

ここまでできたら実際にプロジェクトを作成して動かしていきます。 今回は下記ライブラリに依存したプロジェクトを想定して説明していきます。 これはESP-WROOM-02で赤外線パターン信号を制御し、赤外線リモコンとして動作をさせるためのライブラリになります。 github.com

まずはドキュメント通りにプロジェクトを作成します。 ドキュメントにも記載されていますが、プロジェクト名に使用できるのは英数字と-_のみなので注意が必要です(まぁそれ以外使用する事は無いと思いますが)。 今までの手順通りにやっていれば以下の画像の様にボード情報が表示されているかと思います。 表示されていない場合、恐らくPlatformIO Coreのインストールあるいは環境変数の設定に誤りがあります。 f:id:molyb:20200320205101p:plain 最後にCreateを押すとプロジェクトが生成されます。

次に自動生成されたプロジェクトファイルのmain.cmain.cppにリネームします。 f:id:molyb:20200320213318p:plain

ここまでで、ビルドは出来るようになっているはずです。ライブラリの依存関係設定に入る前にビルドできるかを確認しておきましょう。
まず、ビルド設定をPlatformIO Uploadに設定してビルドします。ここで、依存しているライブラリやビルドツールがあれば自動で取得して設定されます(スゴイ)。 f:id:molyb:20200321095350p:plain

ビルドに成功したら、ターゲットボードを接続し実行ボタンを押す事でROMが焼かれます。

ROMが焼ける事まで確認ができましたら、次に依存ライブラリの設定を行います。 PlatfromIOでは依存関係等の設定はCMakeLists.txtファイルでは無く platformio.iniファイルに設定する必要があるため注意が必要です。
まずは以下のページで使用するライブラリを検索します。検索ワードはライブラリ名のIRremoteESP8266です。 platformio.org

出てきたライブラリをクリックし、Installationタブに移ると以下の表示があります(2020/03/21時点)ので、lib_depsの項をコピーしておきます。

f:id:molyb:20200321094201p:plain

ここでCLionに戻りプロジェクトフォルダのルートにあるplatformio.iniファイルを開き、先ほどコピーしたlib_depsの項を張り付けます。 lib_depsより上の項目はプロジェクト作成時に自動で生成されています。バージョンを明示的に指定せず最新を使用するのであればライブラリIDとライブラリ名が設定されていればOKです。 f:id:molyb:20200321094449p:plain

最後に同ライブラリのサンプルコードをコピーし同様にビルドできるか確認しましょう。 platformio.org

まとめ

CLionとPlatformIOで快適な開発環境を構築できました。 STM32Fの開発環境は最新のCLion(2019.3.5)であればネイティブ対応しているため、私はPlatformIO上に移行させていないのですが、 しばらく運用してみて勝手が良さそうであればこちらの移行も検討したいと思います。