概要
Arduino CLIの1系が公開されて、実用的なバージョンになった雰囲気がしたので試してみました。ESP32だとPlatformIOが最新バージョンに対応しないなど、Arduino IDE環境を使い続けることを考えるとArduino CLIもかなり便利に利用することができました。
入手方法
上記から入手することができます。
winget install ArduinoSA.CLI
WinGetを利用してインストールを行うことも可能です。
- “C:\Program Files\arduino-ide\resources\app\lib\backend\resources\arduino-cli.exe”
ただし、Arduino IDEをインストールしている場合には上記に入っています。WinGetに頑張って登録したのに。。。
実行方法
mkdir \work\arduino
cd \work\arduino
copy "C:\Program Files\arduino-ide\resources\app\lib\backend\resources\arduino-cli.exe" .
arduino-cli version
とりあえず一時フォルダを作成して、Arduino IDEの中に入っているArduino CLIをコピーして使ってみます。上記でバージョンが表示されるはずです。
初期化
arduino-cli update
arduino-cli upgrade
arduino-cli config init
とりあえず全体的に環境を更新します。上記でボードマネージャとライブラリマネージャを更新して、Arduino IDEの設定ファイルを作成しています。この手順は必須ではありません。
プロジェクト作成
arduino-cli sketch new MyFirstSketch
cd MyFirstSketch
copy "C:\Program Files\arduino-ide\resources\app\lib\backend\resources\arduino-cli.exe" .
新しいスケッチを作ってみます。
#include <esp_arduino_version.h>
#include <M5Unified.h>
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.print(ESP_ARDUINO_VERSION_MAJOR);
Serial.print(".");
Serial.print(ESP_ARDUINO_VERSION_MINOR);
Serial.print(".");
Serial.print(ESP_ARDUINO_VERSION_PATCH);
Serial.println();
delay(1000);
}
とりあえず上記に編集をして実行してみます。
実行
シリアルポートの確認
C:\Work\arduino\MyFirstSketch>arduino-cli board list
シリアルポート Protocol タイプ Board Name FQBN Core
COM3 serial Serial Port (USB) Unknown
arduino-cliへのpathを通していないので上位フォルダにあるものを呼びだしています。上記のコマンドで接続しているボードの一覧が表示されます。M5Stack ATOMを接続していたのでボード名は不明でCOM3に接続されているのがわかります。
SET ARDUINO_COM=COM3
とりあえずシリアルポート番号を環境変数に入れておきます。
ボードのFQBN確認
C:\Work\arduino\MyFirstSketch>arduino-cli board listall m5atom
Board Name FQBN
M5Atom esp32:esp32:m5stack_atom
M5Atom m5stack:esp32:m5stack_atom
M5AtomS3 esp32:esp32:m5stack_atoms3
M5AtomS3 m5stack:esp32:m5stack_atoms3
M5AtomS3R m5stack:esp32:m5stack_atoms3r
ESP32純正環境と、M5Stack環境の2つをいれている状態でm5atomを含むボードのリストを取得しました。M5Atomが2つあり、公式とM5環境のFQBNが上記からわかりました。
SET ARDUINO_FQBN=m5stack:esp32:m5stack_atom
今回はM5Unifiedを利用しているのでM5環境版のM5Atomを利用します。環境変数にFQBNを保存しておきます。
ビルド
arduino-cli compile --fqbn %ARDUINO_FQBN% -v
ビルドします。-vオプションを付けているので詳細ログが表示されます。
転送
arduino-cli upload -v -p %ARDUINO_COM%
シリアルポートを指定して転送します。ビルドと転送は同時に行うことも可能です。
シリアルモニタ
arduino-cli monitor -p %ARDUINO_COM% --config baudrate=115200
コマンドラインからシリアルモニタを開くこともできます。これは別のアプリを使ったほうが便利かもしれません。
プロジェクトファイルを使ってみる
Arduino IDEでボードマネージャとライブラリを管理して、Arduino CLIをビルドだけをするのであれば複雑な設定は必要ありません。ただし、それだけだと他のエディタでソースコードを編集をして、Arduino IDEでビルドするのとあまり変わりません。
プロジェクトファイルを利用するとPlatformIOのようにバージョンを指定してのビルドが可能になります。ただしArduino IDEとはまったく別環境でのビルドになりますので注意してください。
スケッチを作成する
arduino-cli sketch new M5UnifiedTest
とりあえず新しいスケッチを作成します。
#include <esp_arduino_version.h>
#include <M5Unified.h>
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.print(ESP_ARDUINO_VERSION_MAJOR);
Serial.print(".");
Serial.print(ESP_ARDUINO_VERSION_MINOR);
Serial.print(".");
Serial.print(ESP_ARDUINO_VERSION_PATCH);
Serial.println();
delay(1000);
}
とりあえずArduinoのバージョン番号を表示するだけのスケッチです。
プロジェクトファイルを作成する
profiles:
p_1:
fqbn: esp32:esp32:m5stack_atom
platforms:
- platform: esp32:esp32 (3.0.5)
platform_index_url: https://espressif.github.io/arduino-esp32/package_esp32_index.json
libraries:
- M5Unified (0.1.17)
- M5GFX (0.1.17)
p_2:
fqbn: m5stack:esp32:m5stack_atom
platforms:
- platform: m5stack:esp32 (2.1.2)
platform_index_url: https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
libraries:
- M5Unified (0.1.17)
- M5GFX (0.1.17)
default_profile: m5atom
スケッチと同じ場所に「sketch.yaml」を置くことでプロジェクトの設定が可能です。上記は2つのプロファイルを設定しており、p_1がESP32公式環境、p_2がM5Stack環境になります。プラットフォームのURLと、バージョン番号も指定可能です。
arduino-cli compile -m p_1 --dump-profile
上記のようにmオプションでプロファイルを指定してビルドすることが可能です。利用したプロファイルを表示するオプションも追加しています。これでバージョン番号を指定してのビルドが可能です。特にボードマネージャは複数バージョンを同時ビルドする方法が公式ツールだとなかったので、プロジェクトごとにバージョンが違う場合には面倒でした。
私はボードマネージャーのURLをバージョンごとに用意することで、過去バージョンを同時に利用できるようにしていましたが、Arduino CLIのプロジェクトファイルを利用することでライブラリまで含めてバージョン指定が可能になりました。
Arduino CLIの自動ビルド環境構築
@ECHO OFF
IF EXIST "arduino-cli.exe" (
ECHO arduino-cli find.
) ELSE (
ECHO download arduino-cli
curl -L https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Windows_64bit.zip -o arduino-cli_latest_Windows_64bit.zip
tar -xf arduino-cli_latest_Windows_64bit.zip
DEL arduino-cli_latest_Windows_64bit.zip
)
ECHO(
ECHO 対象ボードの選択
ECHO 1 : M5Stack Core2
ECHO 2 : M5Stack Core2 for AWS
SET /P arduino_n=上記より接続しているボードの番号を入力してください:
ECHO(
ECHO シリアルポートの選択
arduino-cli board list
SET /P arduino_com=上記の一覧より接続しているCOMの番号をCOM3のように入力してください:
ECHO(
ECHO ビルド開始
arduino-cli compile -m p_%arduino_n% --dump-profile
ECHO ビルド終了
ECHO 転送開始
arduino-cli upload -m p_%arduino_n% -p %arduino_com%
ECHO 転送終了
pause
さらに上記のようなバッチファイルを作ってみました。プロジェクトフォルダの中にbuild.batなどの名前で入れておき、実行することでArduino開発環境が入っていない環境でもarduino-cli.exeをダウンロードしてビルド環境が構築可能です。
途中でボードの選択とシリアルポートの設定をして、ビルドオプションなどに反映させています。
たとえば、上記のようなサンドボックス環境でもビルドができることを確認しました。ただサンドボックスだとシリアルポートが使えないので転送は失敗します。
普通のWindows環境の場合には上記のようにビルドが可能です。
最後に転送されます。ただし、ボードによってはUSBシリアルのドライバーなどをWindows Updateからインストールしないと認識しないなどはあると思います。
ボードの設定を変更する
転送速度やCPU速度、エラーレベルなどをこのままだと指定することができません。
C:\Work\arduino\MyFirstSketch>arduino-cli.exe board details -b m5stack:esp32:m5stack_atom
Board name: M5Atom
FQBN: m5stack:esp32:m5stack_atom
Board version: 2.1.2
Package name: m5stack
Package maintainer: M5Stack official
Package URL: https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
Package website: https://github.com/m5stack
Package online help: https://forum.m5stack.com/
Platform name: M5Stack
Platform category: M5Stack
Platform architecture: esp32
Platform URL: https://static-cdn.m5stack.com/resource/arduino/m5stack-2.1.2.zip
Platform file name: esp32-2.1.2.zip
Platform size (bytes): 245721798
Platform checksum: SHA-256:e56c999148d4ed6761e92d7691442886c1c79669972713a81f6d6074ab2519d9
Required tool: arduino:dfu-util 0.11.0-arduino5
Required tool: m5stack:esptool_py 4.5.1
Required tool: m5stack:mklittlefs 3.0.0-gnu12-dc7f933
Required tool: m5stack:mkspiffs 0.2.3
Required tool: m5stack:openocd-esp32 v0.12.0-esp32-20230419
Required tool: m5stack:riscv32-esp-elf-gcc esp-2021r2-patch5-8.4.0
Required tool: m5stack:riscv32-esp-elf-gdb 11.2_20220823
Required tool: m5stack:xtensa-esp-elf-gdb 11.2_20220823
Required tool: m5stack:xtensa-esp32-elf-gcc esp-2021r2-patch5-8.4.0
Required tool: m5stack:xtensa-esp32s2-elf-gcc esp-2021r2-patch5-8.4.0
Required tool: m5stack:xtensa-esp32s3-elf-gcc esp-2021r2-patch5-8.4.0
Option: Upload Speed UploadSpeed
1500000 ✔ UploadSpeed=1500000
750000 UploadSpeed=750000
500000 UploadSpeed=500000
250000 UploadSpeed=250000
115200 UploadSpeed=115200
Option: CPU Frequency CPUFreq
240MHz (WiFi/BT) ✔ CPUFreq=240
160MHz (WiFi/BT) CPUFreq=160
80MHz (WiFi/BT) CPUFreq=80
40MHz (40MHz XTAL) CPUFreq=40
26MHz (26MHz XTAL) CPUFreq=26
20MHz (40MHz XTAL) CPUFreq=20
13MHz (26MHz XTAL) CPUFreq=13
10MHz (40MHz XTAL) CPUFreq=10
Option: Flash Frequency FlashFreq
80MHz ✔ FlashFreq=80
40MHz FlashFreq=40
Option: Flash Mode FlashMode
QIO ✔ FlashMode=qio
DIO FlashMode=dio
QOUT FlashMode=qout
DOUT FlashMode=dout
Option: Flash Size FlashSize
4MB (32Mb) ✔ FlashSize=4M
Option: Partition Scheme PartitionScheme
Huge APP (3MB No OTA/1MB SPIFFS) ✔ PartitionScheme=huge_app
Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS) PartitionScheme=default
Default 4MB with ffat (1.2MB APP/1.5MB FATFS) PartitionScheme=defaultffat
8M with spiffs (3MB APP/1.5MB SPIFFS) PartitionScheme=default_8MB
Minimal (1.3MB APP/700KB SPIFFS) PartitionScheme=minimal
No OTA (2MB APP/2MB SPIFFS) PartitionScheme=no_ota
No OTA (1MB APP/3MB SPIFFS) PartitionScheme=noota_3g
No OTA (2MB APP/2MB FATFS) PartitionScheme=noota_ffat
No OTA (1MB APP/3MB FATFS) PartitionScheme=noota_3gffat
Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) PartitionScheme=min_spiffs
16M Flash (2MB APP/12.5MB FATFS) PartitionScheme=fatflash
RainMaker PartitionScheme=rainmaker
Custom PartitionScheme=custom
Option: Core Debug Level DebugLevel
None ✔ DebugLevel=none
Error DebugLevel=error
Warn DebugLevel=warn
Info DebugLevel=info
Debug DebugLevel=debug
Verbose DebugLevel=verbose
Option: Arduino Runs On LoopCore
Core 1 ✔ LoopCore=1
Core 0 LoopCore=0
Option: Events Run On EventsCore
Core 1 ✔ EventsCore=1
Core 0 EventsCore=0
Option: Erase All Flash Before Sketch Upload EraseFlash
Disabled ✔ EraseFlash=none
Enabled EraseFlash=all
Programmers: ID Name
esptool Esptool
上記のようにboard detailsにbオプションを利用してFQBNを指定することで、選択可能なオプションを確認することができます。
C:\Work\arduino\MyFirstSketch>arduino-cli.exe board details -b m5stack:esp32:m5stack_atom:CPUFreq=80,DebugLevel=verbose
(略)
Option: CPU Frequency CPUFreq
240MHz (WiFi/BT) CPUFreq=240
160MHz (WiFi/BT) CPUFreq=160
80MHz (WiFi/BT) ✔ CPUFreq=80
40MHz (40MHz XTAL) CPUFreq=40
26MHz (26MHz XTAL) CPUFreq=26
20MHz (40MHz XTAL) CPUFreq=20
13MHz (26MHz XTAL) CPUFreq=13
10MHz (40MHz XTAL) CPUFreq=10
上記のように「m5stack:esp32:m5stack_atom:CPUFreq=80,DebugLevel=verbose」とFQBNに:を追加してカンマ区切りでオプションを指定することが可能です。
これはドキュメントをよく見れば書いてあるのですが、なかなかわかりにくい指定方法だと思います。
まとめ
Arduino CLIは思ったより使いやすかったです。とくに開発環境の自動構築ツールとしても優秀でした。プロジェクトファイルが使いこなせればかなり便利なのですが、PlatformIOと比べるとクセが強いので注意が必要です。
コメント