Arduino IDEつらい・・・、Visual Studio Codeでスケッチを書く方法

「Arduino IDE」はArduinoでの統合開発環境として、スケッチをプログラミングする時にお世話になっている方も多いと思います。

しかし、まあ、使いにくい・・・
コード量が増えていくと何を書いているのか分からなくなります・・・
できれば普段使っているようなエディターでコードは書きたいところです。

そこで、
Microsoftが作っている拡張機能『Visual Studio Code Extension for Arduino』を使って、
Visual Studio Codeでスケッチを書けるようにしました。

先日、オープンソース化されましたね！
https://blogs.msdn.microsoft.com/iotdev/2017/07/06/visual-studio-code-extension-for-arduino-is-now-open-sourced/
https://github.com/Microsoft/vscode-arduino

# インストール
## Arduino IDEをインストールする
「Arduino IDEは使わないって言ったじゃないか！」と思うかもしれませんが、
内部的にはArduino IDEの機能が使われています。もし持っていなければダウンロードしてください。

<img width="921" alt="スクリーンショット 2017-07-17 14.48.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/7132/4d91c95c-a8d8-8caf-6ad2-88452467ccfa.png">
https://www.arduino.cc/en/main/software#download


## 『Visual Studio Code Extension for Arduino』をインストールする
Visual Studio Codeを開き、拡張機能から`Arduino`と検索しExtensionをインストールします。

![スクリーンショット 2017-07-17 16.54.17.png](https://qiita-image-store.s3.amazonaws.com/0/7132/8c19a543-d07e-5894-1c56-36dcada0544f.png)
Microsoftの`vscode-arduino`となっているやつ


# 簡単な使い方

基本的に `command + shift + P` でコマンドパレットを開き実行します。

![スクリーンショット 2017-07-17 16.57.56.png](https://qiita-image-store.s3.amazonaws.com/0/7132/74170e5f-7b38-7bb8-8606-82268f8de981.png)
Arduinoと検索すると、拡張機能のコマンドが増えているはず

## サンプルコードを開いてみる
試しに `Arduino: Examples` を開いてみると、Arduino IDEに入ってたいつものサンプルコード達が表示されます。
`Build-In Examples/01.Basics/Blink` を選択

![スクリーンショット 2017-07-17 17.03.33.png](https://qiita-image-store.s3.amazonaws.com/0/7132/566192a2-2a6f-6ac6-4897-1eb67ed415b4.png)

開くとこんな感じ、Lチカサンプルです。

 ![スクリーンショット 2017-07-17 17.08.00.png](https://qiita-image-store.s3.amazonaws.com/0/7132/3964240f-4622-1ffe-a462-dc041351cd07.png)


## ボードを選択
右下のステータスバーにある`<Select Board Type>`と書かれている部分
もしくは `command + shift + P` => `Arduino: Board Config`
からマイコンボードの選択画面が開きますので、使用するボードを選択します。

![スクリーンショット 2017-07-17 17.11.30.png](https://qiita-image-store.s3.amazonaws.com/0/7132/18ec886d-7f75-5f2f-fa2b-e8fbef376e27.png)
今回はArduino Unoを使用


## シリアルポートを選択
右下のステータスバーにある`COM1`と書かれている部分
もしくは `command + shift + P` => `Arduino: Select a serial port`
から通信に使用するシリアルポートを選択します。

![スクリーンショット 2017-07-17 17.18.44.png](https://qiita-image-store.s3.amazonaws.com/0/7132/ddb4e887-a2f5-bb4a-c79c-9f931bdb64df.png)
今回はUSBポートを使用


## Arduinoに書き込む
`command + option + U`
もしくは `command + shift + P` => `Arduino: Upload`
を実行すると、Arduinoへスケッチを書き込むことができます。

![スクリーンショット 2017-07-17 17.34.21.png](https://qiita-image-store.s3.amazonaws.com/0/7132/acbfe281-6583-9ee2-c664-339b71bad6a1.png)
一瞬Arduino IEDが表示される。

<img src="https://qiita-image-store.s3.amazonaws.com/0/7132/b4eedd4c-dfb3-3c1b-c9c3-fd0e1b557cbc.jpeg" alt="Lチカ画像" height="340">
当たり前ですが、ちゃんとLチカしました！


# シリアル通信でデバッグ
Arduinoのデバッグにはシリアル通信でログを確認するのが一般的だと思います。
VS Codeだけでシリアル通信のやり取りも可能です。

## ボーレートを設定
右下のステータスバーに書かれている数字の部分（初期値は9600でした）
もしくは `command + shift + P` => `Arduino: Change Board Rate`
でシリアル通信速度（ボーレート）を設定

 ![スクリーンショット 2017-07-17 17.49.31.png](https://qiita-image-store.s3.amazonaws.com/0/7132/3c03996d-5e75-3731-ca39-5bf2ef339de6.png)


## コードの修正
先程のBlinkを少し修正して、シリアル通信のコードを書き加えました。
このコードを　`command + shift + P` => `Arduino: Upload` で再び書き込みます。

```c:Blink.ino
void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.println(1);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  Serial.println(0);
  delay(1000);
}
```
Onだったら`1`、Offだったら`0`が交互に出力されるはず


## シリアルモニターを表示
右下のステータスバーに書かれている電源のプラグみたいなアイコン
もしくは `command + shift + P` => `Arduino: Open Serial Monitor`
でシリアルモニターが表示されます。

![スクリーンショット 2017-07-17 17.58.08.png](https://qiita-image-store.s3.amazonaws.com/0/7132/9f7f8b66-2ba4-eff1-2270-bddeac996b84.png)
これで結構捗る！

接続中はアイコンが☓になっているので、クリックするとCloseされます。


## 設定ファイル
`.vscode/json:arduino.json`の中に設定ファイルが出来上がっている。


```json:.vscode/json:arduino.json
{
    "sketch": "Blink.ino",
    "port": "/dev/cu.usbmodem1421",
    "board": "arduino:avr:uno"
}
```

ここに設定が保存されているので、毎回設定し直す必要がなくて便利！


# おわり
`Verify` や `Send Text to Serial Port` などもあり、Arduino IDEにある機能は一通り揃っているようです。
書き込みがワンクリックで出来ないのがちょっと不便ですが、概ね良い感じです。
`Library Manager` はこっちの方が見やすい

ちなみに`command + shift + P` は `F1` でも開けます