PlatformIO ― platform.ini について
PlatformIO ― platform.ini について
「 env: 」、「 platform 」、「 framework 」、「 board 」 編
以下の記事はPlatformIO ホームページを参考にしています。
“ PlatformIO は 「platform.ini」 (プロジェクト設定ファイル)で各プロジェクトごとに環境設定をします。 このファイルの記述に基づいて、PlatformIOは必要なツールチェーンを自動的にダウンロードし、インストールします。そして、設定に記述されたボード型にコンパイルやアップロードを行います。 ”
素人的理解では、、、
PlatformIOで
新規にプロジェクトを立ち上げた時
Gitからリポジトリをクローンしてプロジェクトを立ち上げた時
編集中のプロジェクトでも 「platform.ini」 を書き換えて保存した時
右下にコメントがでて何か作業してくれています。それが、「platform.ini」ファイルを基に、環境を設定している、ということかな、と。初回は結構時間がかかります。
自動でやってくれるのは大変ありがたいですが、一度つまづくと素人では立て直すことが大変難しいところでもあります。(たぶん後で出てくるバージョン指定の問題が大きいかと愚考)
難しい ( ^ω^)・・・
どんな設定が書いてあるのか理解するために、まず、「PlatformIO ホームページ platform.ini について」から「 .iniファフィル の記述の仕方」についての例をみてみましょう。
(https://docs.platformio.org/en/latest/projectconf/index.html#projectconf)
VScodeなどで「platform.ini」ファイルを開くと上図のような記述があります。
[ ] (大かっこ) +env で 各プロジェクト全体の環境設定
[ ] (大かっこ) +env:プロジェクト名(任意につけることができる)で各プロジェクト内での個別の環境設定
をしているのだと思います。任意につけることができますが、後で見てわかりやすい名前がいいです。
[env]又は[env:プロジェクト名] 以下の
platform =
framework =
board =
と
lib_deps =
が大事なところかな、と思います。ライブラリ関係は情報が多いので、別にページを作ります。
build_flags =
もよく見かけるので大切そうですが、今の私にはまだ理解できません。また、そのうちに、、、
メモ platform.ini での記述の決まりについて
「;」で始まる行は無視され、コメントの入力に使用できます。
複数の値を指定するには、次の 2 つの方法があります。
1)値を ", " (コンマ + スペース) で分割します。(半角スペースなのでわかりにくい!)
例) default_envs = uno, nodemcu (nodemcuの前に半角スペースがあります!)
2)複数行形式。新しい行はそれぞれ少なくとも 2 つ以上のスペースで始まります。
(上図の中の 「 lib_deps = 」以降の記述を参考にしてみてください。)
それでは[env:プロジェクト名]以下の「 platform 」、「 framework 」、「 board 」についてみていきます。私がよく使っているM5stackを例に調べてみます。「 platform 」、「 framework 」、「 board 」の細かい定義はホームページをみてもよくわかりません。
M5stack だと
platform は espressif32 (M5stack社製品ですが、心臓部はespressif社のESP32を使っています。)
framework は arduino (ここはよくわかりません。)
board は m5stack-core2 (製品名です。)
後で述べますが、ここの記述はPlatformIOのRegistry(レジストリ)に登録されているものと一致する必要があります。
になります。
「 platform 」、「 framework 」、「 board 」は任意に名前を付けることはできません。既定の名前とバージョンがあります。それらはPlatformIO ホームページのRegistry(レジストリ)から検索できます。(恐らく、諸々自分で作り上げる力があれば、任意の名前を付けることができますが。)
「ESP32」で検索すると公式のPlatform一式がでてきます。
platform 2023/4/19時点の最新バージョンは6.1.0ですが、画面右下の方から過去のバージョンも選択できます。
Boards 197個が登録されている。(2023/4/19時点)
Frameworks 「Arduino」「Espidf」の二つ
ここに登録された「 platform」、「 framework 」、「 board 」が利用できる「名称」です。
arduinoで作られた「.ino」ファイルを使う時は、FrameworkにAruduinoを指定する必要がありそうです。<Aruduino.h>を自動でインストールしてくれる、のかな?
さらに、この画面右下の方に、Dependencies17 として依存関係のあるファイルたちが記載されています。このファイル間の依存関係を自動で調べて、ライブラリやコンパイルなどのプログラムをまとめてくれるのがPlatformIOの本業なのかな、と思います。
この時に、参照するプログラムのバージョンを指定することで、将来の予期せぬバージョン変更に伴う、危機的なエラーを回避することができます。バージョンを指定しておかないと、常に最新バージョンを参照するので、本プログラムもその度に調整する必要がでてきます。
Installationをみると、この platform を platform.ini に導入する方法が書いてあります。
Command Line Interface(CLI)は、私、使い慣れないので省略します。英語が読める方は自分で読んでいただいた方が確かだと思います。(私は、英語力も、プログラム力も危うい、、、)
推奨される記述の仕方
(バージョンの部分指定)
platform = espressif32@^3.5.0
(バージョンの部分指定)
platform = espressif32@~3.5.0(注:チルダです、詳細後述)
(バージョンを固定) 多分、最も推奨される方法
platform = espressif32@3.5.0
推奨されない記述の仕方
(常に最新版を導入)
platform = espressif32 (@以降がない)
gitのアドレスからの指定 (多分、gitのバージョンまで指定できそうです。)
(開発版) (これは、常に最新版をインストールすることになるのかな?)
platform = https://github.com/platformio/platform-espressif32.git
ちょっとここから先は未理解です。
(gitのブランチを指定?)
https://github.com/platformio/platform-espressif32.git#master
(gitの特定のバージョンを指定?)
https://github.com/platformio/platform-espressif32.git#f8340a2081a31c2ac8ed2b16907f2a21dc8897d4
さて、いくつかのエラーを経て得た素人的理解では、バージョン指定をするのがもっともよさそうです。公式ホームページでもそう記載されています。(当然ですが、、、)バージョン違いによるエラーはエラーメッセージからは理解しにくいです。エラーでは「ファイルが無い」「ビルドできない」「コンパイルできない」という形で表現されるからです。
メモ2 PlatformIOでの
バージョンの記述のルール
(https://docs.platformio.org/en/latest/core/userguide/pkg/cmd_install.html#version-requirements)
PlatformIO は Python セマンティックバージョンに基づいている、らしいです。PlatformIO自体がPythonで作られているから、まあ、そうでしょう。
ファイル名の語尾に
@<バージョン要件><MAJOR>.<MINOR>.<PATCH>
<MAJOR> ファイルの大きな変更。互換性がなくなる。
<MINOR> 機能の追加(下位互換性)。
<PATCH> バグ修正(下位互換性)。
<バージョン要件>
まず簡単に、よくわからない記号について。
(̂:サーカムフレックス。キャレット記号に似ているのでキャレット記号と呼ばれることもある)
(~はチルダ(半角)で、行の上部に表示されるものです。技術不足のためHP上に表示できませんでした。すいません。)
^1.2.3- 1文字目だけ指定(下位互換性のある機能、1.x.xということ。)
~1.2.3- 1文字目と2文字目が同じバージョン、及び同等以上の3文字目バージョン
1.2.3- 正確なバージョン番号。バージョン要件は空白(半角)。
他にも色々なバージョン指定の書式がありますが、よくわからないのでここでは省略します。
「 framework 」、「 board 」も同様に、PlatformIO ホームページのRegistry(レジストリ)から検索できます。Explore で登録された「 Library」 「 Platform」 「 Tool」 を検索することができます。
実際のところ、これらのファイルの中身がなにで、何が必要なのか、は私にはまだわかりませんが、PlatformIO は 「platform.ini」 (プロジェクト設定ファイル)で各プロジェクトごとに環境設定をする時に、「platform.ini」の記述に基づいて、このレジストリや、PCに作られたPlatformIO用のローカルのレジストリを参照して、必要なバージョンのツールファイルやライブラリやコンパイルソフトなどを自動的にダウンロードし、インストールしてくれているのだと思います。
「 platform 」、「 framework 」、「 board 」についての記事でした。
PlatformIOはいろいろなプログラム開発環境を自動で統合してくれますが、その肝は「 platform.ini」 (プロジェクト設定ファイル)にあるのだと思います。PlatformIOはプロジェクトを作成した時に、メインのプログラムをとりまくプログラムとその依存関係を、指定したバージョンで、環境構築し保存するので、参照先のライブラリが変更されても影響を受けなくすることができます。C言語系なら、プリプロセス、コンパイル、アセンブル、リンクして実行ファイルの作成までできる環境構築を自動でしてくれます。
今回参照した主なページです。
PlatformIO 最新のドキュメント フロントページ
https://docs.platformio.org/en/latest/
「platformio.ini」 (Project Configuration File)についてのページ https://docs.platformio.org/en/latest/projectconf/index.html
「platforms」の最新のドキュメント
https://docs.platformio.org/en/latest/platforms/index.html
「frameworks」の最新のドキュメント
https://docs.platformio.org/en/latest/frameworks/index.html
「boards」の最新のドキュメント
https://docs.platformio.org/en/latest/boards/index.html
PlatformIO 「Registry」 実際のファイルのあるところ
https://registry.platformio.org/search
今後も理解を深めていきたいです。