概略
Windows10上の、Visual Studio Code(VSCode)から、Arduinoを利用できるように設定します。関数名の補完などができるようになり、便利です。
事前準備
- Arduino IDEをインストールします。
- VSCodeをインストールします。
- C/C++ for Visual Studio Codeをインストールします。
C/C++ for Visual Studio Codeは、インストールしなくても、以下の、Arduino for Visual Studio Codeのインストール時に、同時にインストールするか、尋ねられると思います。
VSCodeの設定
- Arduino for Visual Studio Code のインストール
Extensions(拡張機能)からArduinoを検索し、「Arduino for Visual Studio Code」をインストールします。.inoファイルを読み込ませると、自動で推奨されるかもしれません。私が試したときは、Version 0.2.27でした。
最新は、Version 0.3.5となりました。画面キャプチャは、0.2.27のものです。

- 文字化けの防止
Windowsでは、デフォルトのままでは、Arduino IDEが出力する日本語が文字化けするので、以下のファイルを手動で修正します。
C:\Users\USERNAME\.vscode\extensions\vsciot-vscode.vscode-arduino-0.3.4\out\src\common\util.js
spawn()内で、chcpを呼び出している、215~225行目をコメントアウトします。これにより、コードページをデフォルトの65001(UTF-8)から変更しないようにします。
|
|
- .vscode/c_cpp_properties.json の設定(Arduino UNOの場合)
以下に、c_cpp_properties.json の例を記載します。USERNAMEは適宜変更してください。なぜこういう設定をしたのかは、後半に記載しています。
|
|
VSCodeを使う
Arduino Unoを利用した例です。Arduino IDEで追加インストールした、Arduino core for the ESP32 についても、特に問題なく動作しました。最後に少し記載しています。
VSCodeでディレクトリを開く
スケッチファイルではなく、スケッチファイルが存在するディレクトリを開きます。単にファイルを開いただけでは、編集はできますが、ファイルをコンパイルしようとしたとき、「Cannot find the sketch file.」と出てきて、うまくArduinoと連携できませんでした。なお、Arduino IDEとは異なり、ディレクトリ名とスケッチ名を異なるものにしてもうまく動作するようです。とはいえ、Arduino IDEで開いたときはエラーになると思うので、わざわざそういうことをする必要はないと思います。
何も設定しない状態で、簡単なプログラムを書いてみました。
|
|
このときは、VSCodeがArduinoのスケッチの情報を何も持っていないため、Serialやdelay()が未定義と報告されています。

まず、Arduinoの機能をArduinoボードの種類を選択します。ウインドウの下部にある、<Select Board Type>をクリックします。

画面にボードの選択肢が現れます。今回は、「Arduino/Genuino Uno」を選択しました。

すると、画面に以下のような変化が現れます。
- 開いているディレクトリ配下に、「.vscode」ディレクトリが作成されます。以下の2つのファイルが作成されます。
- arduino.json: Arduino関係の設定
- c_cpp_properties.json: C/C++言語関係の設定
- エラーの内容が変わる。
これは、Arduinoボードの種類を選ぶことで、Arduino用の設定が読み込まれたためです。ただ、設定が完璧ではないようで、設定を追加する必要があります。とりあえず、Serialとdelay()を解決してみます。

新しくできた、.vscode の下の、c_cpp_properties.json を開き、以下の設定を変更/追加しました。
includePath に、“C:\\Program Files (x86)\\Arduino\\hardware\\tools\\**” を追加。
|
|
利用するライブラリによっては、includePathをさらに追加/変更する必要があると思います。
defines を追加。Arduino Unoなので、「__AVR_ATmega328P__」を追加しました。これで、Serialが正しく理解されるようになります。正しいJSON定義にするために、definesの前行に、「,」が必要なので注意してください。vscode自身が注意してくれますが。
|
|
これ以外に、platform.txt に定義されている、コンパイラに渡す定義を渡すのが正しいのではないかと思います。
Arduino Unoの場合は、おそらく、以下の定義を入れておけば、かなり正確になるのではないかと思います。また、intelliSenseModeは、Windows環境でのデフォルトは、「msvc-x64」でしたが、「clang-x64」に変更しています。msvc-x64では、size_tを解決できませんでした。
名称 | 値 | 説明 |
---|---|---|
__AVR_ATmega328P__ | MCU | |
F_CPU | 16000000L | クロック周波数 |
ARDUINO | 10810 | IDEバージョン(この例は 1.8.10) |
ARDUINO_AVR_UNO | ボード | |
ARDUINO_ARCH_AVR | アーキテクチャ |
以下に、c_cpp_properties.jsonの例を示します(再掲です)。パスは、適宜変更してください(特にライブラリのパスはユーザ名の変更が必要です)。
|
|
Arduinoにスケッチをアプロードする。
シリアルポートを設定した後(ウインドウの右下)、スケッチをアップロード(ウインドウの右上)します。

スケッチの書き込みに成功すると、以下のようになります。

その後、ウインドウ右下の、プラグマーク(私の場合COM3の左側。下の画像では「×」に変わっています)をクリックし、シリアルモニタに切り替えると、Arduinoからの出力が確認できます。通信速度を合わせるのを忘れないようにしてください。

オプション設定
グローバルオプション
File -> Preferences -> Settings(Ctrl + ,)で、設定画面を出した後、Extentions->Arduino configurationを選ぶと出てきます。
一部の設定は、コマンド(F1)からも可能なようです。
オプション | 説明 |
---|---|
arduino.path | Arduinoへのパス。デフォルトは自動検出したArduino。 |
arduino.commandPath | 実行形式の、arduino.pathからの相対パス。デフォルト値は、Windows: arduino_debug.exe, Mac: Contents/MacOS/Arduino, Linux: arduino |
arduino.additionalUrls | サードパーティパッケージ用のボードマネージャのURL。複数指定するときは、コンマで区切るか、文字列の配列にする。 |
arduino.logLevel | CLI出力のログレベル。info もしくは verbose。デフォルトは info。 |
arduino.allowPDEFiletype | Arduino-1.0.0以前の拡張子である .pde の利用可否。Processingのコードが壊れる(break)ので注意。デフォルトは false。 |
arduino.enableUSBDetection | USBの検出の許可・不許可。デフォルトはtrue。 |
arduino.disableTestingOpen | USBポートのオープン状態を確認するためのテストメッセージを自動送信することの許可・不許可。デフォルトはfalse(テストメッセージを送信する)。 |
arduino.skipHeaderProvider | ヘッダの補完の拡張の提供有無。デフォルトはfalse。 |
arduino.defaultBaudRate | シリアルポートモニタのデフォルトボーレート。デフォルトは115200。 |
スケッチごとのオプション
各ディレクトリ内の、.vscode/arduino.json ファイルの設定です。
オプション | 説明 |
---|---|
sketch | メインとなるArduinoのスケッチファイル名。 |
port | デバイスに接続しているシリアルポート名。 |
board | 現在選択しているArduinoのボード名。Arduino: Change Board Typeコマンドで設定できる。 |
output | コンパイル時の出力ディレクトリ。未設定の場合は、一時ファイルを毎回作成する。デフォルトは未設定。 |
debugger | デバッガの名称。 |
prebuild | スケッチファイルをビルドする前に実行する外部コマンド。一つだけ設定できる。 |
outputを設定すると、オブジェクトファイルを再利用するので、コンパイルが早くなります。
ESP-WROOM-32 の場合
ESP-WROOM-32でも試してみました。
何も接続しない状態で、ボードを"ESP32 Dev Module(esp32)“を選択してみました。Arduino Unoと同様のエラーが出ていました。c_cpp_properties.json を見てみると、“forcedInclude” が空だったので、Arduino.h をフルパスで設定すると、問題なく動作しました。IncludePathは、とりあえず修正不要でした。
その後、ESP-WROOM-32を接続してみると、“Adafruit HUZZAH ESP8266"と認識されてしまい、ボードパッケージをインストールするか、尋ねられました。
あとは、スケッチのアップロードも、シリアルモニタも、問題なく動作しました。
参考リンク
https://github.com/microsoft/vscode-arduino
最終更新日
February 23, 2021