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はVS Codeのプラグインとして配布されており、後者のPlatformIO Coreを内包しています。そのためVS Codeで開発する方はこちらをマニュアルに従ってインストールすれば良いです。 Platform IO自体はVS Code以外にも対応しており、PlatrormIO Coreをインストールする事で今回説明するCLionの他にもAtomやEclipse、その他多数の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に追加してください。
ちなみにインストール後の環境変数は以下の様になっています。オレンジ枠で囲った部分が今回のインストールで追加された環境変数になります。
まずはインストール用スクリプトを取得します。
ドキュメント記載のリンクよりPythonスクリプトをダウンロードします。
その後Anacondaプロンプトを起動し、ダウンロードしたファイルを実行します。
コマンドプロンプトを起動し、platformio
コマンドをタイプして以下のようになれば正常にインストールできています。
インストールは成功しているのにコマンドプロンプトからplatformio
コマンドを実行できなかった場合、
環境変数の設定に誤りがある可能性がありますので再度確認してください。
CLionのプラグインインストール
CLionプラグイン側は正直なところ オフィシャルマニュアルをそのまま読み進めるだけで問題無いと思います。
実際にプロジェクトをビルドして動かしてみる
ここまでできたら実際にプロジェクトを作成して動かしていきます。 今回は下記ライブラリに依存したプロジェクトを想定して説明していきます。 これはESP-WROOM-02で赤外線パターン信号を制御し、赤外線リモコンとして動作をさせるためのライブラリになります。 github.com
まずはドキュメント通りにプロジェクトを作成します。 ドキュメントにも記載されていますが、プロジェクト名に使用できるのは英数字と-_のみなので注意が必要です(まぁそれ以外使用する事は無いと思いますが)。 今までの手順通りにやっていれば以下の画像の様にボード情報が表示されているかと思います。 表示されていない場合、恐らくPlatformIO Coreのインストールあるいは環境変数の設定に誤りがあります。 最後にCreateを押すとプロジェクトが生成されます。
次に自動生成されたプロジェクトファイルのmain.c
をmain.cpp
にリネームします。
ここまでで、ビルドは出来るようになっているはずです。ライブラリの依存関係設定に入る前にビルドできるかを確認しておきましょう。
まず、ビルド設定をPlatformIO Uploadに設定してビルドします。ここで、依存しているライブラリやビルドツールがあれば自動で取得して設定されます(スゴイ)。
ビルドに成功したら、ターゲットボードを接続し実行ボタンを押す事でROMが焼かれます。
ROMが焼ける事まで確認ができましたら、次に依存ライブラリの設定を行います。
PlatfromIOでは依存関係等の設定はCMakeLists.txt
ファイルでは無く platformio.ini
ファイルに設定する必要があるため注意が必要です。
まずは以下のページで使用するライブラリを検索します。検索ワードはライブラリ名のIRremoteESP8266です。
platformio.org
出てきたライブラリをクリックし、Installationタブに移ると以下の表示があります(2020/03/21時点)ので、lib_depsの項をコピーしておきます。
ここでCLionに戻りプロジェクトフォルダのルートにあるplatformio.ini
ファイルを開き、先ほどコピーしたlib_depsの項を張り付けます。
lib_depsより上の項目はプロジェクト作成時に自動で生成されています。バージョンを明示的に指定せず最新を使用するのであればライブラリIDとライブラリ名が設定されていればOKです。
最後に同ライブラリのサンプルコードをコピーし同様にビルドできるか確認しましょう。 platformio.org
まとめ
CLionとPlatformIOで快適な開発環境を構築できました。 STM32Fの開発環境は最新のCLion(2019.3.5)であればネイティブ対応しているため、私はPlatformIO上に移行させていないのですが、 しばらく運用してみて勝手が良さそうであればこちらの移行も検討したいと思います。
ARMマイコン用デバッガ
デバッガの選定
趣味電子工作ではSTマイコンを使用しており、デバッガにはST-Linkを使用しているのですが、 J-Linkがなかなか快適だという話も聞くので試してみたい。 せっかくなので確認した内容を一覧形式にまとめて置いておきます。
主要なデバッガ
ARMマイコン、特にCortex-MシリーズCPUを対象としたデバッガを主眼として検討していきたいと思います。
複数ベンダのチップに対応しているデバッガとしては以下のシリーズがあります。
どちらのシリーズも機能に応じていくつかの製品が販売されていますが、
基本的に最安価な物(ULink2)でも5万円とホビーで使用するには少々ハードルが高いです。
- ULINK
- J-Link
ULINKはKeil社が開発しているデバッガでARM社による買収で今はオフィシャルのツールとなっています。
J-LinkはSegger社が開発しているデバッガで多くのマイコンに対応しています。
J-Linkは非商用のデバッガJ-Link EDUが販売されています。こちらの性能は商用のJ-Link BASEと同等で、さらに性能を絞ってより安価なJ-Link EDU miniも販売されています。
また、以下はマイコンベンダが提供している安価なデバッガです。提供しているベンダのマイコンがサポートされています。 LPC-LInk2をJ-Linkとして使用する場合は明確にNXPマイコンに限定する文言があるのですが、 ST-LinkやCMSIS-DAPを使ったLPC-Link2の使用ライセンスはどうなっているのでしょう?1
- ST-Link(STマイクロ)
- LPC-Link2(NXP)
比較表
ひとまず個人的に重要な項目を書き出してリスト化します。基本的に気にしているのは価格と動作速度で仮想COMポートがあると尚よい、ぐらいでしょうか。
ブレイクポイントを張れる点数等も見比べたいのですが、マイコンベンダデバッガの情報が出てこない…
U-LinkやJ-Linkには下記の他にもっと上のランクの製品ラインナップもありますが、製品単価が5000円を超えてくるので趣味開発用にそろえるのは少し気合がいる感じです。
現実的に手が出るラインナップはここぐらいでしょうか
J-Link EDU(Base) | J-Link mini | ST-Link V2 | ST-LinkV3 | LPC-Link2 | |
---|---|---|---|---|---|
参考価格 [円] | 7000 | 2000 | 3000 | 5400 | 2800 |
SW動作周波数 [MHz] | 15 | 4 | - | 24 | - |
SWOサンプリング周波数 [MHz] | 30 | 4 | - | 24 | - |
仮想COM | 有り | 無し | 無し | 有り | 有り |
ST-LinkV2とLPC-Link2に関しては明確なスペック表が見つけられなかったので、 もし知っている方がいれば教えていただけると嬉しいです。
ST-LinkV3はSET/mini/MODSと複数の種類があるようですが、上記の表に記載した機能に関してはいずれも同じようなので好みで決めてしまえば良いかと思います。
またST-LinkV2は3000円程度で購入できるのですが、
秋月で2000円未満で入手できる評価ボードNucleo-64の上半分がそのままST-LinkV2デバッガとして使えます。
しかもNucleoボードの方は仮想COMもついているので、外装がある以外のメリットが見いだせない…
結局どれを選べばよいのか
数年前であればJ-Link EDU一択だったように思えますが、最近ST-LinkV3が出て以降は少し悩みそうです。
個人的にはSTマイコンに絞って開発するならST-LInkV3シリーズのどれか、少しでもST以外のマイコンも開発する可能性があるならJ-Link EDUといったところでしょうか。
J-Linkは付属ユーティリティが便利だという話も見たのでそちらも使い比べてみたい所です。
-
知ってる方教えてくれると嬉しいです↩
CLion on WindowsでSTM32環境構築
記事概要
JetBrains社が開発しているC言語開発環境CLionでSTM32Fシリーズマイコンを開発するための環境をWindows上に構築します。
背景
自宅でちょっとした電子工作をする際には、入手性が良く安価なSTM32Fシリーズを使用する事が多いのですが、ここ数年(2018~2019)でSTMicroelectronics(以下ST)がTrueStudioを開発しているIDEのベンダを買収したかと思えば、その開発環境が新規非推奨になったりして開発環境を乗り換える必要が出てきました。
現在STは、無償の開発環境としてSTM32FのコンフィグツールSTM32CubeMXと前述のTrueStudioを統合したSTM32CubeIDEを推奨しているようですが、Twitterを見るとまだ微妙なバグ等があるようで呪詛を吐かれている方を見かける事があります。
CLionの組み込み開発対応
私は、C/C++の開発を行う際JetBrains社のCLionを使用しています。Python開発環境のPyCharmで馴染みのある方もいるのでは無いでしょうか。有償ではありますが、リファクタリング機能やコーディング中の補完機能が非常に優秀で気に入っています。
素のCLionは組み込み開発に対応していないのですが、2016年頃からプラグインの形式でSTマイコンの対応が始まり、2019年のCLion 2019.1 EAPで統合され、安定版としては2019.2で正式に統合されました。せっかくなのでCLionで開発したい。
環境構築の微妙なつまづき
3Dプリンタで出力するモデル等を作るためにメカCADを使用する事があるのでWIndows環境と決別はできません。 オフィシャルドキュメントを見つつ環境構築をしたのですが、Windowsでの開発環境構築に詳しく無い事も相まって微妙に躓いてしまったので備忘録として残しておこうと思います。
本記事を参照した後に下記のオフィシャルドキュメントに沿って進めていけばスムーズに進められるように書いていきたいと思います。
www.jetbrains.com 日本語解説はこちら
開発環境構築
想定読者
- Windows上のCLionでSTM32用の開発環境を構築したい方
- CLionの基本的な操作方法は分かる方
- STM32CubeMXの使い方自体はある程度分かっている方
- 開発環境の構築について詳しく無い方
インストールするソフト
- CLion 2019.2以降のバージョン
- MinGW
- GNU Embedded Toolchain 9-2019-q4-major
- OpenOCD 20200305
- STM32CubeMX
まず初めに上記のソフトをインストールします。CLion自体のインストールは特筆すべき事もないのでここでは割愛します。
MinGW
まずMinGWですが MinGWとMinGW-w64のサポートのみですので、いずれかをダウンロードします。
CLionのツールチェイン設定画面の+
ボタンを押した後、Environment
項のDownload
をクリックすることでダウンロードページへジャンプ1できるので、ここから行くのが確実です。
インストール時にアーキテクチャ等各種設定を求められますが、オフィシャルドキュメント上で今回の目的に対するベストな設定等の説明は見当たらなかったのでググって最初に出てきたページと同等にしてあります。2
最初はGNU Embedded ToolchainにMinGW環境も入っていると勘違いしていて妙に時間を浪費してしまいました…
GNU Embedded Toolchain
次にARM CPU用のコンパイラツールチェインをインストールします。オフィシャルのドキュメントを参照するとバージョンは2019-q3をインストールするよう記載がありますが、私がインストールした時点で2019-q4が公開されていたので、こちらをインストールしていますが、今のところ問題はなさそうです。 こちらは基本的に初期設定のままインストールしています。
インストール後に再度ツールチェインの設定画面を開けば下図の様にコンパイラとデバッガが自動で検出されていると思います。
OpenOCD/STM32CubeMX
次にOpenOCDとSTM32CubeMXをインストールします。オフィシャルページからOpenOCDへのリンクも貼ってありますが、リンク先ではソースで配布されておりいささか手間です。こちらOpenOCDは[Windows環境用にビルドされたファイル]がありましたので、そちらを展開してCドライブ直下に置いています。
本記事を読んでいる方はSTM32CubeMXを既にインストールされている方が多いかと思いますが、まだの方はこちらからダウンロードしてインストールしておきます。
最後に再度CLionのSettings画面に戻りEmbedded DevelopmentでOpenOCDとSTM32CubeMXのパスを設定し、Test
ボタンを押して正常に動作するか確認します。
以降に関してはオフィシャルドキュメントに詳しく説明が載っているため、STM32CubeMXの操作自体に慣れている方であれば特に困ることなくビルドが通る所までいくと思います。
さいごに
自分の知識不足があるとは言え、環境構築(特にWindows)って変なところで躓いたりめんどくさかったりしますよね。 皆さんがこれを見てスムーズに環境構築できれば幸いです。
-
私が実行した際には mingw-w64.org のからSourceforgeにジャンプしてダウンローダを入手できました↩
-
追々ちゃんと調べたい…↩
3Dプリンタの選定
- はじめに
- 購入したプリンタ
- 選定のポイント
- 造形方式の理解
- SLA
- FDM
- 機種の選定
- 造形方式の観点
- 予算の観点
- 情報量の観点
- 候補機種のピックアップ
- 候補機種の絞り込み
- 実際に使用してみてのまとめ
はじめに
プリント基板をおこしたものの、それを収めるケースを作る前に放置してしまったり、
ちょとした部品がサッと手元で作れたらなーと思うことが度々あったので、自らを追い込む意味もかねて思い切って3Dプリンタを買うことにしました。
自分で3Dプリンタを選定するにあたり、先人のブログエントリは大いに参考にさせていただきました。
ただ、買った3Dプリンタを紹介しているブログエントリは多いものの、
どう考えて選定したかといったエントリがあまり無いような気がしたので、本エントリではその点を書きたいと思っています。