はじめに
Arduinoの標準IDEはよくできているが、コード補完が効かなかったり、参照ライブラリ元へ飛べなかったりと少し残念である。 そこで、エディタをVS Codeに切り替えることで、コード補完、参照ライブラリへのジャンプ、その他VS Code拡張の恩恵を預かれるようにする。
準備
以下をインストールする
- Arduino IDE
- VS Code
Visual Studio Code Extension for Arduinoのインストールと設定
VS Codeの拡張機能Visual Studio Code Extension for Arduinoをインストール。 マイクロソフトご謹製の拡張。とてもできが良い。
Arduinoのパスを設定
File → 基本設定 → 設定で”Arduino”と検索。
以下を設定
- Arduino Command Path
- arduino_debug.exe
- Arduino Path
- C:/Program Files (x86)/Arduino(各自の環境に合わせる)
ここまでできたらVS Codeを再起動する。
拡張の使い方
Ctrl + Shift + pでコマンドパレットを開き、”Arduino”と入力するとすべてのコマンド一覧が表示される。
コード補完の有効化
さきほどパスを設定したときと同様に設定を開き、”C_Cpp.intelliSenseEngine”を検索。
C_Cpp:intelli Sense Engineの設定を”Tag Parser”に変更する。
デフォルトだと厳密に#includeしたものしかコード補完の対象にならない。 Tag Parserにすると(.inoに明記していなくても使えている)Arduino.hなども補完の対象になるようだ。
setting.jsonにインクルードパスを記載
c_cpp_properties.jsonにインクルード情報が記載されているが、これを編集するのは間違い! スケッチのコンパイルごとにc_cpp_properties.jsonは自動生成されて変更したことが初期化されてしまう。
そこでインクルードパスはsetting.jsonに記載する。
VS CodeはC_Cpp.default.browse.pathというキーでインクルードパスを拾ってくるようなので、以下のように記載。
setting.jsonはプロジェクトを開いたフォルダ内の.vscodeフォルダに作成されている。
"C_Cpp.default.browse.path": [ //インクルードライブラリのパス設定 "C:\\Users\\username\\Documents\\Arduino\\libraries", //usernameは適宜変更すること "C:\\Program Files (x86)\\Arduino\\tools", "C:\\Program Files (x86)\\Arduino\\libraries", "C:\\Program Files (x86)\\Arduino\\hardware", "C:\\Users\\username\\OneDrive\\Documents\\Arduino\\libraries"//自分の環境はOeDrive配下なので、適宜変更すること ],
これでコード補完が効くようになった!
文字化け対策
Windows環境だと、Arduino IDEの出力する日本語が文字化けするので対策を行う。
以下ファイルを修正する。
C:/Users/USERNAME/.vscode/extensions/vsciot-vscode.vscode-arduino-0.4.0/out/src/ommon/util.js
コードページをデフォルトの65001(UTF-8)から変更しないように、chcpを呼び出している、205~215行目をコメントアウト。
function spawn(command, args = [], options = {}, output) { return new Promise((resolve, reject) => { options.cwd = options.cwd || path.resolve(path.join(__dirname, "..")); const child = child_process.spawn(command, args, options); let codepage = "65001"; /* if (os.platform() === "win32") { try { const chcp = child_process.execSync("chcp.com"); codepage = chcp.toString().split(":").pop().trim(); } catch (error) { outputChannel_1.arduinoChannel.warning(`Defaulting to code page 850 because chcp.com failed.\ \rEnsure your path includes %SystemRoot%\\system32\r${error.message}`); codepage = "850"; } } */ if (output) { if (output.channel || output.stdout) { child.stdout.on("data", (data) => { const decoded = decodeData(data, codepage); if (output.stdout) { output.stdout(decoded); } if (output.channel) { output.channel.append(decoded); } }); } if (output.channel || output.stderr) { child.stderr.on("data", (data) => { const decoded = decodeData(data, codepage); if (output.stderr) { output.stderr(decoded); } if (output.channel) { output.channel.append(decoded); } }); } } child.on("error", (error) => reject({ error })); child.on("exit", (code) => { if (code === 0) { resolve({ code }); } else { reject({ code }); } }); }); }
Arduinoへの書込み設定
ウインドウ下部のバーから簡単に設定できる。
- スケッチ
- ボード
- シリアルウインドウを開く/閉じる
- COMポート選択
種類の違う複数のボードに書込みたいときには、標準のIDEよりかんたんに設定できる!
おわりに
VS CodeでArduinoは想像以上に快適だった。とくに複数のArduinoに書き込むときに、ポートやボードの選択がとても簡単でとてもいい。