概要
Ardiuno環境のテストで実機を使うと時間がかかるのと、GitHub Actionsで実行ができないので、ローカルで動くテスト用の環境を作ってみました。gccなどのツールはローカルのものを利用しますのでツール系は同梱していません。SDL2などと連携をして画像処理も可能です。
制作物

上記となります。
https://tanakamasayuki.github.io/lang-ship-arduino-core/package_lang-ship_index.json
ボードマネージャーなので、上記のURLをArduino IDEなどのボードマネージャーのURLに追加することで利用が可能です。
サポートしている機能
基本的なArduino API
setup()やloop()などはもちろん、millis / micros / delay / delayMicroseconds / yield / min / max / constrain / map / abs / random / randomSeed / bit* / lowByte / highByte / _BV / String(WString.h)などに対応しています。
Print / Stream / Serialクラス
基本的な入出力に対応しています。Serialはちょっと特殊でUPLOAD後にTCPで接続をすることで取得が可能です。これはWindowsは仮想シリアルポートに対応していないため、通常経路での接続ができないためです。
ファイルシステム
FSやFileの他にLittleFS / SPIFFS / FFat / SDなどの実ターゲットとPreferencesやEEPROMにもアクセスできるクラスがあります。
ネットワーク
IPAddressやUDPなどの基本的なクラスの他にESP32でのWiFiや、ClientやServerまで利用可能です。OpenSSLを利用してWiFiClientSecureでHTTPSへのアクセスなども可能ですが、証明書の管理などは実機で行う想定です。
ハードウェア I/O
基本的には呼び出しても副作用なく無視される作りになっています。その他にモニタリングが可能な作りになっているので、どんな書き込みをしたのかのテストなどが可能です。
ESP-IDF / ベンダー拡張
FreeRTOSのキューや排他制御などがstdで似た動きになるように作られています。タスクに関しては優先度などを無視して別スレッドで同時実行している動きとなります。
SDL2+M5GFX / LovyanGFX
SDL2を利用することで、M5GFXやLovyanGFXを利用した画像描画が可能です。実際の描画関数経由で描画をして、結果を画面キャプチャなどが可能になります。GitHub Actions上で画面キャプチャを収集することも可能です。
上記が利用例ですが、実プロジェクトとは別のリポジトリ上にGitHub Actionsを動かして、結果を画像で保存するようにできます。描画関数を分離して、自動画面キャプチャがあると複数画面サイズがあった場合などでも座標調整などが非常に楽にできるようになります。
まとめ
実際にはpytestなどと組み合わせて真価を発揮します。ロジックのみのユニットテストなどはhost-arduino-coreで普段は実行して、たまに実機で確認するなどの使い分けが可能です。

ぜひ上記のpytest-embedded-arduino-cliなどと組み合わせて利用してみてください。


コメント