M5: Visual Studio Code + PlatformIO

[Visual Studio Code](https://code.visualstudio.com/) + [PlatformIO](https://platformio.org/) の基本的な使い方を簡単に整理してみました。

## PlaformIO の画面構成

### サイドバー

サイドバーの PlatformIO アイコンをクリックすると Project Tasks パネルにタスクの一覧、Quick Access パネルに PlatformIO のグローバルなメニューが表示されます。ここからプロジェクトの作成や管理、ファームウェアのビルドやアップロードなどをおこなうことができます。

![サイドバー](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/219ad84a-302e-41bc-a43e-2eb1df3d7771.png)

### ステータスバー

ステータスバーには選択中のプロジェクトやシリアルポートなどの情報が表示され、よく使う処理をアイコンから実行することができます。

![Home](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/dbd3b37d-ec3a-45f0-a2b9-c02479b9407d.png)

### ホーム画面

サイドバーの Quick Access > PIO Home > Open またはステータスバーの Home アイコンをクリックすると、PlatformIO のホーム画面を表示します。

![Home](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/5004453f-6041-4229-b459-830b64a584c7.png)

ここからプロジェクトの作成など、プロジェクトに対する操作をおこないます。

![PlatformIO Home](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/eb2c7b03-2ce6-4468-b336-2a871d8862d5.png)

## プロジェクト

### プロジェクトの作成

ホーム画面の「New Project」から適当なディレクトリにプロジェクトを作成します。

- Name: プロジェクトの名前を指定
- Board: `M5Stack Core ESP32` など対象の機種を指定
  - M5Paper 用は専用に用意されていないため、代わりに `M5Stack FIRE` を指定する
- Framework: `Arduino`

これによりプロジェクトの雛形となるディレクトリ構成と、指定した内容が設定された platform.ini というファイルが作成されます。PlatformIO では、この設定ファイルの記述を元に必要なライブラリのダウンロードやビルド処理がおこなわれます。

参考) ["platformio.ini" (Project Configuration File) - PlatformIO](https://docs.platformio.org/en/latest/projectconf/index.html)

### ライブラリの追加

ホーム画面または Quick Access の Libraries > Registry から必要なライブラリを検索し、インストールすることができます。追加したライブラリは platformio.ini の lib_deps 設定に記述されます。

M5 デバイスを制御するためのライブラリは機種ごとに分かれており、適切なライブラリを選択して使用する必要があります。以下はその一部です。使用できる機能だけでなく、インクルードするヘッダファイルや使い方も微妙に異なっていたりするので注意が必要です。

例

- M5Stack Core : [m5stack/M5Stack](https://registry.platformio.org/libraries/m5stack/M5Stack)
- M5Stack Core2 : [m5stack/M5Core2](https://registry.platformio.org/libraries/m5stack/M5Core2)
- M5StickC : [m5stack/M5StickC](https://registry.platformio.org/libraries/m5stack/M5StickC)
- M5StickC-Plus : [m5stack/M5StickCPlus](https://registry.platformio.org/libraries/m5stack/M5StickCPlus)
- M5Paper : [m5stack/M5EPD](https://registry.platformio.org/libraries/m5stack/M5EPD)
- ATOM : [m5stack/M5Atom](https://registry.platformio.org/libraries/m5stack/M5Atom)
- ATOM-S3 : [m5stack/M5AtomS3](https://registry.platformio.org/libraries/m5stack/M5AtomS3)

### プロジェクトのファイル構成

設定ファイル

- .gitignore : バージョン管理対象外とするファイルの指定
- .vscode/extensions.json : VSCode 拡張機能
- .vscode/c_cpp_properties.json : VSCode 用設定ファイル (バージョン管理対象外)
- .vscode/launch.json : VSCode 用設定ファイル (バージョン管理対象外)
- platformio.ini : PlatformIO 用設定ファイル

ディレクトリ

- include/ : ヘッダファイルを格納する。
- lib/ : プロジェクト固有のライブラリ。この中のソースは実行ファイルに静的リンクされる。
- src/ : ソースファイルを格納する。

### シリアルポートの速度設定

plaformio.ini に以下の設定を追記します。

```
monitor_speed = 115200
```

## 基本的な操作

### プロジェクトの選択

![環境選択](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/dcc198e9-b77c-40f6-85f2-e08c9db402bc.png)

複数のプロジェクトを同時に開いていたりプロジェクトに複数の環境が設定されている場合、作業対象が選択されていることを確認しておきます。

### ターミナルを開く

サイドバーの Project Tasks > Default > Miscellaneous > New Terminal またはステータスバーの New Terminal アイコンをクリックすると、ターミナルを開きます。ここから、コマンドを実行してビルドやインストールなどのタスクを実行することもできます。

![New Terminal](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/a3369260-4be3-4ba7-87b6-cc9502b4ea24.png)

例) 

- Build) `pio run --environment <env>`
- Upload) `pio run --environment <env> --target upload`

### デバイスとの接続

デバイスを接続したシリアルデバイスを指定できます。auto でうまくいかない場合は確認してください。

![シリアル選択](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/e1e61493-f3dc-49e6-aa31-51ba879c6ac1.png)

### ファームウェアのビルド

サイドバーの Project Tasks > (環境) > General > Build またはステータスバーの Build アイコンをクリックすると、ソースコードからファームウェアを作成します。

![Build](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/a8f1ce94-800f-4cc7-bb0e-a812942d210e.png)

### ファームウェアの書き込み

サイドバーの Project Tasks > (環境) > General > Upload またはステータスバーの Upload アイコンをクリックすると、ファームウェアをデバイスに書き込みます。

![Upload](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/e95d3ece-2c6f-49b0-a2c1-0354f7931cc2.png)

### シリアルモニター

サイドバーの Project Tasks > (環境) > General > Upload and Monitor またはステータスバーの Serial Monitor アイコンをクリックすると、シリアルポートに出力したログを出力して確認することができます。

![Serial Monitor](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2023/02/23/6c61adce-45bd-4112-9a2d-238e4e0f8156.png)

### ファームウェアの消去

ターミナルから以下のコマンドを実行すると、デバイスのファームウェアを消去することができます。

```shell
pio run --environment <env> --target erase
```