VSCode+ArduinoでAIコーディング

電子工作

会社ではいろいろと素敵なExcelファイルが配られまして、その処理のためVSCodeとC#でコンソールアプリを書いてたりします。で、VSCodeでのコーディング時のCopilot支援がヤバい。日本語で適当に書いたコメントを拾って、それっぽいコードを勝手に作ってくれるので作業時間が超短縮されます。このところ多忙を理由にマイコン工作から離れてたのですが、この感動&省力化をArduinoにも持ち込もうと環境を整備したのでメモ。Windows環境です。

Copilot設定済みのVSCodeがあれば、あと必要なのは3つだけです。

  • 「Arduino CLI」github
    こちらの公式サイトからWindows用のバイナリを入手して、zipファイルの場合は適当なフォルダに展開しておけばOKです。Arduino IDEは不要です。
  • VSCodeの拡張機能「Arduino Community Edition」VSマケプレ, github
    拡張機能の検索窓に「Arduino」と入れると色々出てきますが「Arduino Community Edition」をインストールしましょう。2024年に公開終了したMicrosoftの公式版Arduino拡張のFork版です。
  • VSCodeの拡張機能「C/C++」VSマケプレ, github
    Intelli Senceとかの言語サポートに必要です。

上の3つの準備ができたら、VSCodeの設定をいじります。

  • Arduino: Command Path → arduino-cli.exe を設定します。
  • Arduino: Path → arduino-cli.exeのあるフォルダを設定します。
  • Arduino: Use Arduino CLI → ✓をいれる

ここまでやってからVSCodeで.inoファイルがあるフォルダを開くと、自動的にArduinoプロジェクトとして認識されるはずです。空フォルダを開いてから.inoを新規作成しても認識されないので、その場合はフォルダを閉じて開き直してください。正しく認識されると右下に”Select Programmer”とか”Select Board Type”とかが表示されます。

で、何か書いてみるにあたりターゲットを決めないといけないということで、転がってたATTiny2313で試すことにしました。ブートローダーが無いんでArduinoではなくただの古代のAVRチップなんですが、未だに10個以上在庫あるんですよね…。もう捨てた方がいい気もします。取り敢えずこのためにもう1個、VSCodeの設定を変更します。

あとはBoard ManagerでATTinyCoreを入れて、Board Configで2313を選択。
 

新規作成した.inoファイルは空っぽなので、setupとloopを手書きで書く必要があります。void setupとvoid loopまでを書いてサジェストされたコードはこんな感じです。

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("Hello, World!");
delay(1000);
}

シリアル通信をお勧めしてきますが却下して、PD0に繋いだLEDを点滅させることにします。avr/io.hをincludeして、setup、loop内に書いたPD0についてのコメント(太字部分)だけから生成されたコードがこちら。

#include <avr/io.h>
void setup() {
// PD0を出力に設定
DDRD |= (1 << PD0);
}
void loop() {
// PD0を一定周期でトグル
PORTD ^= (1 << PD0);
delay(1000); // 1秒待機
}

問題ないコードになっているので書き込んでみます。書き込みにはUSBaspを使います。USBsapをPCに接続して Arduino: Upload Using Programmer を選ぶだけなんですが、問題が2つありました。

  • USBaspがPCで正しく認識されない
    ZadigでドライバとしてWinUSBを指定して解決。libusbだとArduino CLIがエラー吐いて駄目でした。
  • VSCodeがシリアルポートを指定しろというエラーを出す。
    → これはArduino拡張機能の昔からの不具合で、シリアルポートを使わない書き込み器でもポートの指定が必須です。適当なUSB-シリアルコンバータを繋いで、使いもしないポートを指定して解決。

問題を解消したら無事書き込みできましてLチカ成功です。

とても2025年も後半の写真とは思えませんが、自分ではロジック書いてないのにLチカできた記念ということで。

あとはVSCodeでのコーディングについて。.inoファイルがデフォルトだとC++と認識されずにコードに色がつかないことがあるようですが、その場合はChange Language ModeでC++を選べばOKです。C++にするとうちの環境ではこんな感じになりました。

気になるのはDDRDとかPORTDとか、AVRならではのキーワードに未定義の波線がついちゃうことですが、これはIntelli Senseがavr/io.hを解釈できないためです。具体的なチップ指定を.vscode/c_cpp_properties.jsonに追記してやると解決できます。ATTiny2313の場合は”__AVR_ATtiny2313__”を追記してやればOKです。こんな感じで。

これを反映させると波線が消えて、ホバーさせると説明も出るようになります。

ということでストレスなくコード書けそうな感じにはなったので、Copilot支援がマイコン開発にどれくらい効くのか、これからいろいろ試してみたいと思います。

コメント

タイトルとURLをコピーしました