あづみのメモ帳

VSCodeでArduinoをいじってみた

(最終更新: )

追記: vscode-arduinoは廃止になったのでPlatformIOを使うとよい。ちょっと大げさだが、こっちのほうがいろいろ気が利いている。

諸事情でArduinoを触ってみることになったので環境構築をする。Arduino IDEを使うのが定番だと思われるが、余計なアプリをインストールしたくないし、そもそもArduino IDEのエディタが色のつくメモ帳くらいの機能しかなくて厳しすぎるので、使い慣れたVSCodeで書けるようにする。

公式ドキュメントを読む

Arduinoを初めて触るので公式ドキュメントをざっと読み通してだいたいの流れを把握する。やたら重いしiPhoneから見ると挙動が不安定。静的生成しろ。

拡張機能の導入

MicrosoftのArduino拡張機能をインストールする。

拡張機能の設定

拡張機能の設定を開き、Use Arduino Cliを有効にして、拡張機能に同梱のArduino CLIを使うようにする。PathとかCommand Pathは空欄にする。

Ctrl+Shift+Pでコマンドパレットを開き、>Arduino: Board Managerを実行する。1回目はcommand 'arduino.showBoardManager' not foundと出るが、これによって拡張機能が起動するのでもう一度叩けば設定画面が出る。使用するボードを含む項目をInstallする。今回はArduino NanoなのでArduino AVR Boardsを選んだ。

なお、PathとかCommand Pathとかにarduino_debug.exeだかなんだかを指定しろとしているページが多いが、最新のArduino IDE(2.x)にそんなものはない。これは古いIDEと連携するための設定であり、使わずに同梱のArduino CLIを使うことが推奨されている。

スケッチを書く

適当なフォルダを作ってVSCodeで開き、コマンドパレットで>Arduino: Initializeを実行する。ファイル名を聞かれるので(フォルダ名).inoとし、ボードを聞かれるので今回はArduino Nanoを選択する。これで(フォルダ名).inoファイルと.vscode/arduino.json, .vscode/c_cpp_properties.jsonが生成される。なお、.inoファイルの名前をフォルダ名と同じにしないと後者の生成でコケる。

使用するライブラリをインストールする。>Arduino: Library Managerで設定画面を開き、今回はServoInstallする。次に>Arduino: Rebuild IntelliSense Configurationを実行すると、c_cpp_properties.jsonのincludePathが更新される。なお、ライブラリの実体はArduino IDEを使った場合と同じくドキュメントフォルダに保存される。

あとはプログラムを書く。Arduino IDEとは違い補完が効くので快適に書ける。C/C++の環境はもともとあったのでないとどうなるのかは知らない。今回は以下のように単純にボタンを押している間連続回転サーボ(FS90R)を回すプログラムを書いた。

#include <Servo.h>

Servo myservo;

const int servoPin = 9;
const int button1Pin = 2;
const int button2Pin = 3;

int button1State = 0;
int button2State = 0;

void setup() {
    myservo.attach(servoPin);
    pinMode(button1Pin, INPUT_PULLUP);
    pinMode(button2Pin, INPUT_PULLUP);
}

void loop() {
    button1State = digitalRead(button1Pin);
    button2State = digitalRead(button2Pin);
    myservo.writeMicroseconds(1500 + 800 * button1State - 800 * button2State);
}

書き込む

今回はMaker Nanoとかいう互換品を使う。Windowsの場合は、USB接続してWindows Updateをかけるとドライバが降ってくる。macOSだと刺したらそのままいけた。

認識されたら>Arduino: Select Serial Portを実行して該当のポートを選ぶ。>Arduino: UploadでArduinoにプログラムが書き込まれる。

あとがき

C/C++はめんどくさそうだし慣れてないのでいやだなぁと思っていたが、単純なことをする範囲なら思ったよりすんなりできた。少なくともPythonよりはマシ。また、マイコンはいちいち書き込んだりなんだりでめんどくさそうだなと思っていたので、最初はラズパイでなんとかしようとしていたが、起動を待たなくていいしLANに繋げなくていいしなによりPythonを書かなくていいのでArduinoのほうがだんぜん良かった。