手元に山ほど STM の評価ボードがある。中でも、NUCLEO-L552ZE-Q はちょっと変わったボードなので使いこなせるようにしたい。特に PlatformIO 環境でコンパイル可能になることを目指したい。
今回は PlatformIO の使い方だけ軽くおさらい。PlatformIO も年々使い方が変わるので、[最新の情報](https://platformio.org)を得た方がよい。
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 ファイルかな?)書いておけば出来そうよ。