Spresense development on VSCode PlatformIO

目次
Spresenseで開発するために、Arduinoを利用していたが、もう、限界。
複数のプログラムを切り換えて使うたびに、そのWindowがどこにいったか探すのがめんどい。 Editorも気に入らない。 ここ何年かですごく進化したけど、元々ソフトやってたエンジニアにはきつい。
ということで、VSCode の PlatformIOを利用する。
以前の記事の続き。
あと、VSCodeでは、MultiCoreの開発ができないと思っていたけど、そんなことはない。
親切とはいえないけど、 出来る ということを教えてくれただけでも有り難いページ。
ということで、なるべく親切に解説する。
PlatformIO の準備
install
VSCodeに、PlatformIO Pluginをinstallする。
現時点で、 v3.3.1

正しくinstall すると、左のサイドメニューに虫みたいなアイコンが表示される。 これが、PlatformIO の起動ボタン。

一度PlatfromIOを起動するば、以降、下部メニューにも虫と同じ機能の家アイコンがある。 初期画面(HOME)に戻りたいときは、そっちをクリックしてもよい。

虫ボタンをクリックすると、右のペインにPlatfromIO のHOME画面が表示される。
Spresense のDevice情報取得
前述のページにもあるけど、再掲。 githubから有志の方が提供している情報をDownloadする。
まずは、QUICK ACCESS ペインの メニュー Miscellaneous - PlatfromIO Core CLI をクリック。

VSCode Windowsの右下部あたりに、 Terminal が開く。 pio コマンドのhelpが表示されるはず。

Terminal内で、以下のコマンドを実行。
pio pkg install -g -p https://github.com/maxgerhardt/platform-sonyspresense.gitこれが、Arduino の 設定 で board managerのURLを足したのと同様になる。
新規プロジェクトの作成
mainCoreでLED0を、subCore1でLED1をLチカするプログラムを作ってみる。

Create New Project をクリックする。
すると、こんな感じのダイアログが表示されるので、
- Name ... お好きなものを入力
- Board .. Spresenseを選択

Finish するとちょっと時間がかかるけど、最終的に初期のtemplateが作成されて、以下のような画面になる。

platformio.ini の設定
platformio.ini は、ちょっと修正がいる。
SubCore1 を利用する場合、こんな感じ。
[env]
platform = sonyspresense
board = spresense
framework = arduino
monitor_speed = 115200
upload_port = /dev/cu.SLAB_USBtoUART
monitor_port = /dev/cu.SLAB_USBtoUART
[env:spresense_mainCore]
build_src_filter = +<main/>
[env:spresense_subCore1]
build_flags = -DPIO_FRAMEWORK_ARDUINO_CORE_SUB_CORE_1
build_src_filter = +<sub1/>なんてことはない、SubCore用のMake&Uploadの場合、 PIO_FRAMEWORK_ARDUINO_CORE_SUB_CORE_1 をdefine しえやればいいらしい。
あとは、普通。
envセクションは、共通。env:spresense_mainCoreセクションは、MainCore用。ソースのディレクトリ(main.cpp)は、 src/main/ 配下とする。env:spresense_sybCore1セクションは、subCore1用。ソースのディレクトリ(main.cpp)は、 src/sub1/ 配下とする。
環境の切り換え
platformio.ini 上のどの env:xxxx を利用するかの選択は、下部のメニューから行うのがわかりやすい。

source code main.cpp
mainCore用のmain.cpp は、src 配下にフォルダ main を作成し、 src/main/main.cpp というファイル名にする。
subCore1 も同様に、 フォルダ sub1 を作成し、 src/sub1/main.cpp というファイル名にする。

main/main.cpp
setup() で、subCore1 の起動を行い、loop() で、LED0をチカチカする。
#include <Arduino.h>
#include <MP.h>
/*
* LED0 をチカチカする
*/
void setup()
{
int ret;
pinMode(LED0, OUTPUT);
puts("initialization mainCore");
/* Launch SubCore */
printf("Kick SubCore\n");
ret = MP.begin(1);
if (ret < 0) {
printf("MP.begin error = %d\n", ret);
}
}
void loop()
{
puts("mainCore loop!");
digitalWrite(LED0, HIGH);
delay(1000);
digitalWrite(LED0, LOW);
delay(500);
}環境を切り換えて、compile&uploadする。

sub1/main.cpp
loop() で、LED1をチカチカする。
#include <Arduino.h>
#include <MP.h>
/*
* LED1 をチカチカする
*/
void setup()
{
int ret;
pinMode(LED1, OUTPUT);
puts("initialization subCore1");
}
void loop()
{
puts("subCore1 loop!");
digitalWrite(LED1, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
delay(500);
}環境を切り換えて、compile&uploadする。

