ESP32はPlatformIO IDEでの開発がおすすめという話

# platformIO IDEとは
platform IDEとはIDEの名の通り、ソースコードを編集、コンパイル、マイコンに流し込むツールです。フレームワークとしてArduino言語が使用できます。
「ESP32　入門」とgoogle検索で調べると、Arduino IDEでの環境構築を勧められますが、主要な機能はArduino IDEと同じです。ただ、Arduino IDEよりも快適にコーデイングすることができます。

# Arduino IDEとの違い
## Visual Studio Codeで開発ができる
詳しいことは後述しますが、PlatformIO IDEはVisual Studio Code (vscode)上に構築して使用します。つまり、世界で一番使われているエディタといわれているvscodeの機能を利用できるほか、vscodeで普段コードを書いている方は使い慣れたエディタでコードを書けるということです。
個人的にvscodeでesp32の開発をしていて便利だなと思う点を挙げたいと思います。
### 1.IntelliSenseが使える
IntelliSenseって何だよっていう方に一言で説明すると、予測変換機能です。例えばC言語で`printf`関数を打とうとすると`pr`を打った段階でこのように候補の一番上に`printf`が出現します。
![スクリーンショット 2023-05-02 174026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219558/618c509e-c7bb-2105-e97d-40ba5d708b12.png)

予測変換だけでなく、ミスタイプについても指摘してくれます。
![スクリーンショット 2023-05-02 175605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219558/79e6ad05-5419-bd97-8988-a62217950f52.png)
例えば、`printf("Hello world")`の文に`;`をつけ忘れてしまいました。そうすると、赤い波線がソースコードの中に出現して、ミスタイプがあることを教えてくれます。

### 2.github copilotが使える
予測変換繋がりで言うと、github copilotが使えるのもデカイですね。
github copilotはGitHubとOpenAIが共同で開発（OpenAI Codexを利用）したAI駆動のコード補完ツールです。
たとえば、c言語で`int main(void)`と打つと以下のように、自動でコードを提案してくれます。
![スクリーンショット 2023-05-02 182109.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219558/88ee90ce-9d01-0225-e8e3-b9d7b1893ac5.png)
(薄い灰色の部分がAIが提案した文で、`tab`キーを押すとAIの文を受け入れられます）

C言語のようなメジャーな言語でない、Arduino環境でもgithub copilotは使えます。
例えば、今回はシリアル通信をするプログラムを作るとして、setup関数の中に`Serial.begin(115200);`と書こうと思います。
![スクリーンショット 2023-05-02 183615.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219558/05b2b431-80a1-9fcf-7a51-94332f69c008.png)
するとSetup関数の中に`S`と一文字打つだけで、`Serial.begin(115200);`が提案されました。
github copilotを使えば、爆速でコーデイングできること間違えなしですね!!

github copilotは残念ながら、有料のツールなのですが、学生は使うことができます。
学生フォーミュラの方など、学生の方は導入してみてはいかがでしょうか？

https://qiita.com/SNQ-2001/items/796dc5e794ac3f57a945

### 3.コードフォーマッタが使える
地味に便利なのが、このコードフォーマット機能です。コピペとかするときに、インデントが崩れることがあると思います。
このようにインデントがぐちゃぐちゃになってしまった文も
![スクリーンショット 2023-05-02 185854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219558/97cf0c86-d7f2-f6c1-d200-55c17f56074b.png)
`ctrl+s`で保存すると
![スクリーンショット 2023-05-02 190050.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219558/72c6ad32-9ba4-7177-2a75-a5147f706d5f.png)
自動的にコードを整形してから保存してくれます。`tab`を連打してインデントを揃えるような不快な作業がなくなるので、結構便利です。

チームでコードを書くときは、人によってインデントやかっこのつけ方が違うので、このようなコードフォーマットを利用すると、コードの書き方を統一できるので、可読性が上がります。

### 4.UIが今風
以外と大事なUIに関してです。
Arduino IDEはご存知の通りUIがちょっと古いです。
(Arduino IDEは2.0以降になってマシになりましたが、2.0はArduino以外のマイコンボードとの互換性がよくない気がします。最近使ってないから分からないですが、今は改善されたのかな？)
![スクリーンショット 2023-05-08 125646.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219558/ffdffd84-b22c-b197-ebbb-c42486e61477.png)

一方vscodeはUIが洗練されています。またvscodeは拡張機能を追加することができ、テーマも変えられます。昨日はライトテーマだったけど、気分が上がらないからダークテーマにしてみようとかもできますね！
![スクリーンショット 2023-05-08 125728.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219558/82a58db9-2e76-85a4-9ba3-79715dfc5c18.png)


他にも、拡張機能とか色々他にもメリットがありますが、そこは皆さんの身の回りにいるvscode信者にお願いしたいと思います。

## platform IOならではの機能
気づいたらvscodeの宣伝になってしまったので、platform IOならではの機能を紹介したいと思います。
### ポートの自動識別
Arduino IDEを使っていて書き込みができないときにありがちなミスに、マイコンを接続しているusbポートと違うポートを指定していて書き込みができないというのがありますね。しかも、ここのusbポートはcom6でなんてことを普通は覚えていないので、デバイスマネージャで調べたり、色んなポートを選択して書き込みを試みるポートガチャをしたりしますが、platform IOはポートを自動識別して書き込みしてくれるので、ポートで悩むことはありません。

### デバック機能
実はesp32はブレークポイント(好きなところでプログラムを止めて、変数の状態やプログラムの動き方を知れる機能)を使ってデバック作業をすることができます。
詳しいことは、以下の記事をご覧ください。

https://qiita.com/nishinohi/items/d1c1a517f26394c492c3

# 環境構築と使い方について
想像以上に記事が長くなってしまったので、環境構築と使い方については以下の記事で紹介しています。

(現在執筆中につきしばらくお待ちください。)


# まとめ
Platform IOはvscodeで上で使える。つまり最強。

# 宣伝
現在新潟大学学生フォーミュラプロジェクトでは、スポンサーになっていただける企業様や個人を募集しています。
スポンサーの方は、Webサイト(2023年中には改修して綺麗になる予定)やマシン本体やTwitterやInstagramなどの各種SNSで宣伝、今年の活動報告書の送付をさせていただいています。
下記のメールまでご連絡をお待ちしております。
next-fp@eng.niigata-u.ac.jp