arduino-cli自作クラスの他スケッチでの再利用(ライブラリ化?)

前提

arduino-clivscodeで利用している。下記ページ参照。 aka1022.hatenablog.com

ファイル構成は以下の前提

/myWorkSpace
    /.vscode
        arduino.json
        c_cpp_properties.json
    /ArduinoOutput
    /mySketch1
        mySketch1.ino
        myClass.cpp
        myClass.h
    /mySketch2
        mySketch2.ino

arduino.jsonのsketchにmySketch1\mySketch1.inoが設定され、そのスケッチ内でmyClassをコーディングした。 新しく、mySketch2を作成し、そこでもmyClassを使いたくなった。単純にヘッダファイルをインクルードするだけではリンクされないのでmyClassのソースとヘッダをライブラリとして認識させる必要がある。

下準備

ユーザーディレクトリを確認

arduino-cli config dump

のdirectoriesのuserがユーザーディレクトリとなる。このディレクトリのlibrariesディレクトリにクラスのソースファイルとヘッダファイルを置くとそれがライブラリとして認識される。今のファイル構成ではユーザーディレクトとしては/myWorkSpaceを充てる必要がある。 一致していない場合、

arduino-cli config set directories.user [myWorkSpaceのパス]

を実行する。

コーディング

順番が前後してしまったが、クラスのソースファイルとヘッダファイルについて。
1. ソースの拡張子は.cpp
2. ソースでArduino.hをインクルードする。
をしておけば、通常のcppの記法でソース、ヘッダを記述できる。 利用する側はmyClass.hをインクルードすればいい。 明示的には、

#include <myClass.h> 

すればOK。(次項目で移動するが、../libraries/myClass/myClass.hとしなくてもいい。)

ファイル構成

myWorkSpace直下にlibrariesフォルダを作成し、その直下にヘッダファイル名と同じmyClassフォルダを作成し、その直下にヘッダファイルとソースファイルを移動する。 明示すると、

/myWorkSpace
    ...
    /libraries
        /myClass
            myClass.cpp
            myClass.h
    /mySketch1
        mySketch1.ino
        myClass.cpp
        myClass.h
    ...

となる。git を利用している人はgit mvコマンドで移動させるのがよい。

まとめ

以上の手順で、新しいスケッチmySketch2でもmyClassを利用できるはず。

visual studio code でarduino-cli を使用する

visual studio codearduino-cli を使用する

仕事でvscodeの便利さを思い知り、arduinovscode上で開発できないかと思い調べてみると出来そうだった。 日本語ドキュメントが少なかったり、古かったりだったので、備忘録を兼ねてログを残しておく。(2023年3月現在)

注意

筆者はvscode初心者です。なんか色々やったら出来たという状況です。ここに書いてない事で必須な事があるかもしれません。バージョンアップで以下の方法が使えなくなる可能性もあります、あらかじめご了承ください。

目標

vscodearduino拡張機能を入れるのが本題になるが、調べてみると対応がLegacy Arduino IDEArduino CLIなるものだった。バージョン1.8.19以前のIDEがLegacy Arduino IDEになるらしく、これのリリースが2021/12/20である。その次のリリースは2.x.xとなっている。つまり、GUIIDEを使っている場合、古いバージョンしか対応してないらしい。

(筆者は久しぶりにarduinoを使おうと最近IDEをインストールしたため、2.0.3になっていた。)

レガシーもまだダウンロードできるのでそっちでもいいが、レガシーと名の付く通り、そのうちダウンロードできなくなる事と、CLIの方が拡張性が高そうな事を考慮してCLIを選択する。

そういうわけで、本目標はvscodearduino-cliを使う事になる。

ダウンロード/インストール

vscodeのダウンロードからインストールについてはごまんと記事があるので、そちらを参照してください。 CLI公式サイトによると、インストール方法がいろいろあるらしい。 インストールページのビルド済みバイナリをダウンロードしてくる方法が手っ取り早そう。 arduino-cli.exeが入った圧縮ファイルがダウンロードできるので、展開する。 この時点でarduino-cli.exeをコマンドプロンプトなりで実行することで、ファイルのビルド、アップロードはできるようになっている。 今後の利用のために、パスを通しておきましょう。 自分はC:\Program Files直下にダウンロードし展開したフォルダを置き、パスを通した。

core のインストール(2023/8/24追記)

arduinoといっても様々な種類があるが、全てに対応しているわけではなく、それぞれに適応するcoreというファイルのインストールが必要となる。 まず以下コマンドで利用可能なプラットフォームとライブラリのローカルキャッシュを更新する。

$ arduino-cli core update-index

PCにarduinoを接続し、必要なcoreを判別する。

$ arduino-cli board list

出力のCore欄が必要なcoreになる。 以下コマンドでcoreをインストールする。

$ arduino-cli core install [必要core]

以上でcoreのインストールができる。

拡張機能インストール

一応この時点でPowerShellターミナルからビルド、アップロードはできるが(そのうちバッチで運用するかも)、せっかくなので拡張機能を導入する。 導入するのは - vsciot-vscode.vscode-arduino - ms-vscode.cpptools, ms-vscode.cpptools-extension-pack (IntelliSense用、どっちかでもいいと思うけどどっちが何なのかわからん。cppファイル用の拡張機能をインストールしておけばいいと思う。)

作業フォルダ構成について

ソースコードの配置の仕方に注意点がある。 setup, loop関数があるファイルは同名のフォルダに格納する必要がある。 つまり、hoge.inoにsetup関数、loop関数を書いた場合、そのファイルは -/hoge/hoge.ino に置かなければならない。ファイル名とフォルダ名が違った場合、setup, loop関数のあるファイル(=mainファイル?)を見つけられず、ビルドエラーが出る。

VScode設定

vscodeの設定(ctrl+,)で必要なのは、Arduino: Use Arduino Cliをチェックするだけ(だと思う)。IDEの場合、arduino: Pathとかを設定する必要があるらしいが、環境変数PATHが通っていればいい。 また、VScode画面下の\を選択する。 先に\はクリックするとエディタ上に新しいタブが開き、ボードを選べるようになるので、使うものを選択する。 \選択前はクリックしても候補が表示されないので、先に\