Visual Studio Code のプロファイル機能で、独立した PlatformIO による Arduino UNO R4 開発環境を作る

Microsoft の無料エディター「[Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code)」(以下、vscode)には[「プロファイル」機能](https://code.visualstudio.com/docs/editor/profiles)があります ([Version 1.75(2023年1月版)でGA](https://code.visualstudio.com/updates/v1_75#_profiles))。
プロファイルとは、用途や目的によって複数の設定や環境を作成、手軽に切り替えられる機能です。

ここではvscodeのプロファイルの新規作成と、そのプロファイルへvscode用組み込み向け開発環境「[PlatformIO](https://platformio.org/)」をインストールし、Arduino UNO R4 の開発環境を作る方法を解説します。

:::note info
プロファイル機能自体は [VSCodeの設定の切り替えや共有に便利なプロファイル機能を活用しよう](https://qiita.com/loftkun/items/cf44155510e4a2e18637) に詳しく解説されています。
:::

## 前提環境

* vscode (1.75 以降) がインストール済みであること ([ダウンロードページ](https://code.visualstudio.com/download))。
* インターネットに接続されていること

※ Windows のみでチェックしていますが、Linux・macOS でもおそらく動くと思います

## vscodeでのプロファイル作成

vscode から [設定] → [プロファイル] → [プロファイルの作成...] と進む。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/0891d2c1-3be3-dfb7-b71d-2fcf7d68cddd.png)

プロファイル名、アイコンを設定し [作成] と進む。

* プロファイル名:
ここでは `PlatformIO` としています。この名前は一覧性の他に、vscode 起動時の名称にも使うことができるため、スペースや `$` といった特殊記号は避けた方が無難です
* アイコン:
当該プロファイルでの起動時における、vscode 設定ボタンのアイコンです。今どのプロファイルで起動しているのかの目安に使えます。
* コピー元:
既存のプロファイルを流用するときには指定します。なければ `なし` で問題ありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/4ffd14fb-fac5-098a-260a-51de963a0045.png)

しばらくすると、vscode の設定ボタンがプロファイルのアイコンで指定したものになります。プロファイルが作成され、そのプロファイルに切り替わった状態です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/db596c5e-eb7b-99f0-053e-e384639742f9.png)

これで他のプロファイルに影響することなく、表示フォントなどの設定や拡張機能がインストールできるようになります。

:::note warn
全プロファイルに適用されてしまう設定等があるようです (未確認情報でスマン)。
おそらく Docker のような OS まで含めた開発環境(の拡張機能)とかは対応のしようがないのかも。大体大丈夫だと思いますが、確認用の別プロファイルを作っておいて、切り替えてみるのもよいでしょう。
:::

:::note info
[既定のプロファイルを最小限にしておく](https://zenn.dev/atsushifx/articles/devtools-vscode-profile-minimumextensions)という Tips もあるようです。
:::

### プロファイルの操作

ここでは、プロファイルの操作を解説しています。PlatformIO のインストールに進みたい方は、スキップしてください。

#### プロファイルの確認と切り替え

[設定] → [プロファイル(xxx)] で表示される一覧で、プロファイルを切り替えられます。
xxx には、現在のプロファイル名が表示されます。

#### プロファイルの同期

[設定の同期](https://code.visualstudio.com/docs/editor/settings-sync)が有効であれば、プロファイルも同期されます。同期対象はすべてになっており、今のところ(2024年1月)対象の選択はできません。

#### プロファイルの削除

[設定] → [プロファイル(xxx)] → [プロファイルの削除...] で、削除対象のプロファイルを選択するダイアログが表示されます。そこから選んで削除できます。
ダイアログでの [OK] を押した瞬間に削除されるので注意しましょう。

設定のバックアップは、プロファイルのエクスポートで行いましょう。プロファイルの同期は、削除も同期されるためバックアップになりません。

#### プロファイルを指定して起動

※ Windows で確認していますが、他の OS でも同様だと思います。

`Code.exe` の引数に `--profile [プロファイル名]` を指定することで、指定したプロファイルで起動できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/001582b9-768d-928a-4dee-fd13230cb402.png)

## PlatformIO のインストールと設定

PlatformIO のインストールは vscode の拡張機能から行えます。拡張機能名は「PlatformIO IDE」(提供元は PlatformIO) です。

`platformio` で検索すれば大丈夫でしょう。その後 [インストール] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/495f1035-ca12-4473-be12-0ba939cb37a4.png)

しばらくすると PlatformIO のインストールが終わり、vscode の再読み込みを要求されるので [Reload Now] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/de9c7328-5c46-ff7b-06c2-3313342da01e.png)

:::note info
途中、いくつかの拡張機能を要求されることもあります。併せてインストールしてください。
:::

### Arduino UNO R4 向けの開発環境を作る

vscode の [PlatformIO のアイコン] → PlatformIO の [Create Project] で "PIO Home" を表示、Quick Access 内の [New Project] に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/f53d19f5-812f-09d8-29fb-dfeae70666b6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/0d94997e-e583-2ebd-3879-2c6486e95596.png)

* Name:
プロジェクト名。フォルダ名にも使われるので、スペースや特殊記号は避けた方が良いでしょう
* Board:
`Arduino Uno R4 WiFi` もしくは `Arduino Uno R4 Minima` を選びます
* Framework:
`Arduino` であることを確認してください

ここまで設定したら [Finish] をクリックすると、必要なダウンロードが始まります。5～10分程度を見込んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/b4587644-b311-c17e-1ea1-7501b9ddd63a.png)

:::note
Location の Use default location は、標準ではドキュメントフォルダ内の `PlatformIO` フォルダです。
ドキュメントがOneDrive等で同期していると、コンパイル毎に同期されるため不便です。

Use default location のチェックを外して個別に指定するか、`pio settings set projects_dir /foo/bar/dir` にて、デフォルトの変更をおススメします。

* https://community.platformio.org/t/how-to-change-default-new-project-location/2828/4
* https://docs.platformio.org/en/latest/core/userguide/cmd_settings.html#projects-dir
:::

無事終了するとプロジェクト(フォルダ)内の `platformio.ini` を開いた状態になります。これで環境は整いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/b8ee4386-5079-3f28-33a7-7ae5c7506d74.png)
二回目以降のプロジェクト作成は、ダウンロードも無いので素早く作成されます。

## `setup()` `loop()` の編集とビルド・マイコンへのアップロード

`setup()` `loop()`  は、プロジェクト内の `src/main.cpp` の中です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/3bd8a6e8-51d3-f1d2-ec22-ac9721d35d16.png)

ビルドは `Ctrl + Alt + B` 、マイコンへのアップロード(ビルド含) は `Ctrl + Alt + U` です。
コマンドパレットからでも呼び出せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/3065cd08-39a0-b6d8-b245-20b38a375d4c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/888d693b-0a64-dff3-9eea-498e595e541b.png)

シリアルモニターは `Ctrl + Alt + S` です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/85ee73b2-a536-ccf5-8730-95ca22d52818.png)
以下のようにパネルが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/e98e1500-d30c-4299-2319-44e11aacd8a2.png)

シリアルモニターのデフォルトの通信速度は9600bpsです。変更する場合は `platformio.ini` 内に `monitor_speed` 項目を追加してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/4b428610-3e58-ab1c-224e-492078ba196a.png)
変更後、再度シリアルモニターを立ち上げると、このように `115200` でスタートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/ad7d7f53-56f9-2c5b-b67f-f407ea488d16.png)

## 確認用、最小コード

```c++:src/main.cpp
#include <Arduino.h>

void setup() {
  delay(3000);
  Serial.begin(9600);
  Serial.println();
  Serial.println("Start");
}

void loop() {
  Serial.println(millis());
  delay(1000);
}
```

## あとがき

お疲れさまでした！

[EoT]