PlatformIO を使う(2021年版)

手元に山ほど STM の評価ボードがある。中でも、NUCLEO-L552ZE-Q は ちょっと変わったボードなので使いこなせるようにしたい。 特に PlatformIO 環境でコンパイル可能になることを目指したい。

今回は PlatformIO の使い方だけ軽くおさらい。 PlatformIO も年々使い方が変わるので、最新の情報 を得た方がよい。

venv(python3) 環境を作る

まずは python の venv から。

> python3 -m venv work2021_autumn
> cd work2021_autumn
> source bin/activate.csh
[work2021_autumn] >

PlatformIO をインストール

次に pip で PlatformIO をインストール。 最初、git で platformio をもってきてそこからインストールしたら うまくいかなかった。そんなことせずに、普通に pip でインストールすれば使える。

PlatformIO のインストールに先立ち wheel もインストールする。 とおもったらすでにインストールされていたので単純に PlatformIO をインストール。

[work2021_autumn] > pip install platformio
[work2021_autumn] > rehash
[work2021_autumn] > pio --version
PlatformIO Core, version 5.2.4a2

その後、もう一回 pip install ../platformio でインストールしたら (git clone している場所の setup.py を使ってのインストール) それでもうまくいった。

コマンドは pio が使える。

ボード固有の環境を作る

[work2021_autumn] > mkdir -p work/nucleo_l552ze_q
[work2021_autumn] > cd work/nucleo_l552ze_q
[work2021_autumn] > pio --init nucleo_l552ze_q

これで arudino と同じ環境が出来る。そこで、src ディレクトリの下に test.ino を作ってコンパイルを試みる。

void
setup()
{
    Serial.begin(115200);
}

void loop()
{
    Serial.println("My Hello World");
    delay(1000);
}

しかし下記のようにエラー。

[work2021_autumn] > pio run
Processing nucleo_l552ze_q (platform: ststm32; board: nucleo_l552ze_q; framework: arduino)
--------------------------------------------------------------------------------
Error: Unknown board ID 'nucleo_l552ze_q'

ここから地味に調査

エラーの該当箇所検索

> find ../lib/python3.8/site-packages/platformio/ -type f -exec grep "Unknown board ID" {} \; -print
    MESSAGE = "Unknown board ID '{0}'"
/home/ryos/PlatformIO/wa/lib/python3.8/site-packages/platformio/platform/exception.py

UnknownBoard という exception 用の関数が見つかる。

> find ../lib/python3.8/site-packages/platformio/ -type f -name \*.py -exec grep "UnknownBoard" {} \; -print

raise している個所は二か所

  • platformio/package/manager/platform.py
  • platformio/platform/base.py

むりやりどこか特定する

   raise UnknownBoard(id_+' here')$

base クラスの _BOARDS_CACHE にないのが原因 表示してみる。

> pio run
Processing nucleo_l552ze_q (platform: ststm32; board: nucleo_l552ze_q; framework: arduino)
--------------------------------------------------------------------------------
{}
Error: Unknown board ID 'nucleo_l552ze_q'

あれ?からっぽ。

なんと pio を update しなければいけなかった!!

> pio update
中略
> pio run
中略
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   0.4% (used 880 bytes from 196608 bytes)
Flash: [          ]   3.3% (used 17500 bytes from 524288 bytes)
Building .pio/build/nucleo_l552ze_q/firmware.bin
========================= [SUCCESS] Took 22.39 seconds =========================

なお、カレントディレクトリに boards というのがあればそこも参照するみたい なので、新規のボードもそこに(json ファイルかな?)書いておけば出来そうよ。