概要
Windows10上の、Visual Studio Code(VSCode)から、Arduinoを利用できるように設定します。関数名の補完などができるようになり、便利です。Arduino開発チームが開発しているArduino Tools extension for VS Codeではないので注意してください。
ここでは、Visual Studio Code extension for Arduino 0.4.7のときの設定などを記載します。以前はIntellisenseを動かすためにいろいろ必要でしたが、最近のバージョンではとりあえず動作させるためには、追加の設定を行う必要がなくなっています。
また、バージョンアップによりデグレードが発生することもよくあるようです。問題が起こった場合は、古いバージョンに戻すと問題が解決する場合もあります。
対応状況
私の環境で、Visual Studio Code extension for Arduinoのアップロード/シリアル通信/IntelliSenseの各機能が動作するかを、いくつか試してみました。あくまで、私の環境での特定のバージョンでの状況です。VSCodeは、バージョンによる違いが結構あるようなので、注意してください。
Visual Studio Code extension for Arduinoと、Arduino IDEのバージョンは以下の通りです。
- Visual Studio Code extension for Arduino: 0.4.7
- Arduino IDE: 1.8.16
以下の表のソフトウェアバージョンは、Arduino IDEのボードマネージャで表示される各ボード用のソフトウェアバージョンです。
ボード/ソフトウェアバージョン | アップロード | シリアル通信 | IntelliSense |
---|---|---|---|
Uno/1.8.3 | ✔ | ✔ | ✔ |
Due/1.6.12 | ✔ | ✔ | ✔ |
ESP32 Dev Module/2.0.1 | ✔ | ✔ | - |
Spresense/2.3.0 | ✔ | ✔ | ✔ |
ESP32のv2.0.1では、IntelliSenseが動作しませんでした。ネットを調べたところ、Parse failed when cmdline too long #1275が該当するようで、vsciot-vscode.vscode-arduino-0.4.7/out/src/arduino/arduino.js に、Split by lines when parsing stdout of build #1276のパッチをあてると、正しく動作しました。そのうち改善されるのではと思います。
事前準備
以下の事前準備を行います。
- Arduino IDEをインストールします。
- VSCodeをインストールします。
- C/C++ for Visual Studio Codeをインストールします。
C/C++ for Visual Studio Codeは、インストールしなくても、以下の、Arduino for Visual Studio Codeのインストール時に、同時にインストールするか、尋ねられると思います。
なお、Arduino IDEではなく、Arduino CLIを利用することも可能なようです。ここでは、Arduino IDEを利用しています。
VSCodeの設定
VSCodeを利用するために、以下の設定を行います。
- Visual Studio Code extension for Arduino のインストール
- 文字化けの防止
- .vscode/c_cpp_properties.json の設定(Arduino UNOの場合)
Visual Studio Code extension for Arduino のインストール
Extensions(拡張機能)からArduinoを検索し、「Visual Studio Code extension for Arduino」をインストールします。.inoファイルを読み込ませると、自動で推奨されるかもしれません。

文字化けの防止
Windowsでは、デフォルトのままでは、Arduino IDEが出力する日本語が文字化けするので、以下のファイルを手動で修正します。
C:\Users\USERNAME\.vscode\extensions\vsciot-vscode.vscode-arduino-0.4.7\out\src\common\util.js
spawn()内で、chcpを呼び出している、205~215行目をコメントアウトします。これにより、コードページをデフォルトの65001(UTF-8)から変更しないようにします。
|
|
Code Page Identifiersによれば、文字コードは以下の通りです。
コード | 説明 | 備考 |
---|---|---|
850 | OEM Multilingual Latin 1; Western European (DOS) | Windows上で、chcpコマンドに失敗したときのデフォルト設定 |
932 | ANSI/OEM Japanese; Japanese (Shift-JIS) | 私のWindows10上でchcpコマンドを実行したときの値 |
65001 | Unicode (UTF-8) | デフォルトの設定 |
.vscode/c_cpp_properties.json の設定(Arduino UNOの場合)
最近のVScode extensionのArduinoでは、c_cpp_properties.jsonの設定がかなり改善されました。ほぼ修正なしで利用できると思います。
Arduino Unoを利用した例です。
VSCodeでディレクトリを開く
スケッチファイルではなく、スケッチファイルが存在するディレクトリを開きます。単にファイルを開いただけでは、編集はできますが、ファイルをコンパイルしようとしたとき、うまく動作しませんでした。なお、Arduino IDEとは異なり、ディレクトリ名とスケッチ名を異なるものにしてもうまく動作するようです。とはいえ、Arduino IDEで開いたときはエラーになると思うので、わざわざそういうことをする必要はないと思います。
何も設定しない状態で、簡単なプログラムを書いてみました。
|
|
このときは、VSCodeがArduinoのスケッチの情報を何も持っていないため、Serialやdelay()が未定義と報告されています。

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

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

すると、開いているディレクトリ配下に、「.vscode」ディレクトリが作成され、その下に arduino.jsonというファイルが作成されます。これは、Arduino関連の設定ファイルです。
IntelliSenseの設定を行う
Alt-Ctrl-I(Arduino: Rebuild IntelliSense Configuration)で、IntelliSense関連の設定ができると思うのですが、今の時点ではコマンドは起動できませんでした。おそらく、arduino.jsonファイルに、スケッチの情報がないからだと思います(あくまで動作からの想像です)。
以下のどちらかを行うと、IntelliSense関連の設定ファイルが作成されました。他にも方法はあるかもしれません。
- スケッチを一度コンパイルする
- arduino.jsonに、スケッチの設定を書きこみ、Alt-Ctrl-Iを押す
|
|
スケッチをコンパイルするには、右上のコンパイルアイコンを押します(画像をスクロールする必要があるかもしれません)。IntelliSenseが動作して、IntelliSense用の設定ファイル(c_cpp_properties.json)が作成されました。

この時点で、エラーはすべて解消されていました。

ユーザがインストールしたライブラリを利用したときも、自動で参照関係が解決されていました。
Arduinoにスケッチをアプロードする
スケッチをアップロードするには、シリアルポートを設定した後(ウインドウの右下)、アップロードボタン(ウインドウの右上)を押します。

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

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

なお、Ctrl+Shift+Pで、“Arduino: Send text to Serial Port"を選択すると、VSCodeから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。 |
arduino.disableIntelliSenseAutoGen | trueの場合、IntelliSenseの設定ファイル(.vscode/c_cpp_properties.json)を自動生成しない。 |
スケッチごとのオプション
スケッチごとの設定です。各ディレクトリ内の、.vscode/arduino.json ファイルに記述します。
オプション | 説明 |
---|---|
sketch | メインとなるArduinoのスケッチファイル名。 |
port | デバイスに接続しているシリアルポート名。 |
board | 現在選択しているArduinoのボード名。Arduino: Change Board Typeコマンドで設定できる。 |
output | コンパイル時の出力ディレクトリ。未設定の場合は、一時ファイルを毎回作成する。デフォルトは未設定。 |
debugger | デバッガの名称。 |
prebuild | スケッチファイルをビルドする前に実行する外部コマンド。 |
postbuild | スケッチファイルをビルドした後に実行する外部コマンド。 |
intelliSenseGen | IntelliSense用設定の自動生成のグローバル設定を上書きする。以下のオプションが利用可能。 “global”: グローバル設定を利用(デフォルト) “disable”: 不許可 “enable”: 許可 |
buildPreferences | ビルド時にArduinoに渡すフラグ。 |
outputを設定すると、オブジェクトファイルを再利用するので、コンパイルが早くなります。
参考リンク
https://github.com/microsoft/vscode-arduino
最終更新日
January 1, 2022