arduino-cli は知っていましたが、これまで使ったことがありませんでした
Arduino-IDE を使用しているなら arduino-cli を内包しているため、追加インストール不要で ターミナルからコンパイルや書き込みができます。
今回、使い方を調べながら 初めて使いました。
macOSベースで記載しましたが、内容は WindowsやDebian他でも “基本”は同じです。
1. arduino-cli のパスを見つける
find /Applications/Arduino\ IDE.app/Contents/ -name "arduino-cli"
2. PATH環境変数に追加
export PATH="$PATH:/Applications/Arduino IDE.app/Contents/Resources/app/lib/backend/resources"
~/.zshrcに追加して、source ~/.zshrcで反映
3. バージョンの確認
% arduino-cli version
arduino-cli Version: 1.5.1 Commit: 01f3d4f2b Date: 2026-06-05T10:21:41Z
Arduino-IDE 2.3.10 に内包の arduino-cli は 1.5.1
4. arduino-cli 初期化
arduino-cli の全体設定ファイルを初期化し、Arduino-IDEと同じライブラリフォルダを参照するように設定します。初回だけ実行
arduino-cli config init
directories:以下を追加しました。
board_manager:
additional_urls: []
directories:
data: /Users/nak435/Library/Arduino15
downloads: /Users/nak435/Library/Arduino15/staging
user: /Users/nak435/Developer/Arduino
data, downloadsは、Arduino-IDEと同じ。
userには、独自のスケッチフォルダのルートを指定しました。
インストール済みライブラリが このパス配下の/Libraryに在り、これを arduino-cli でも有効にするため。
しかし、本当に必要だったのかは疑問(このパスと関係のないパスの.inoもコンパイルできた)。
arduino-cli config dumpコマンドで現在の設定内容を確認できます。
(initする前に確認し忘れました)
arduino-cli.yamlを消して、config dumpコマンドの結果は、次の内容でした(何も「無し」(ww))。
% arduino-cli config dump
{}
5. FQBN(ボード)とは
FQBN (Fully Qualified Board Name)とは、Arduinoが各マイコンボードを一意に識別するための「正式なボード識別名」。arduino-cli でボードを指定する重要な要素です。
Tips
-
FQBNの構造は3階層 package : architecture : board
階層 ① ② ③ 内容 パッケージ アーキテクチャ ボードID 例 esp32 esp32 esp32p4 -
第1階層:パッケージ名(Package)
ボードの製造元や開発ベンダーを表す- arduino : Arduino公式ボード
- esp32 : Espressif社(ESP32シリーズ)
- m5stack : M5Stack社
- rp2040 : Raspberry Pi(Picoなど)
-
第2階層:アーキテクチャ名(Architecture)
マイコンのCPUのアーキテクチャやシリーズ名を表す- avr : 初代UnoやNano、Leonardoなど(8bit AVRマイコン)
- samd : Uno R3の次世代機やZeroなど(ARM Cortex-M0+)
- esp32 : ESP32シリーズ全般
-
第3階層:ボードID(Board ID)
そのパッケージ・アーキテクチャに属する具体的なボードの型番- uno : Arduino Uno
- leonardo : Arduino Leonardo
- esp32p4 : ESP32-P4開発ボード
-
4つ目の階層にボードオプションがありますが、割愛します
-
-
macOS内での「フォルダ構成」と一致する
この3階層はMacの中に格納されているボード情報のフォルダ階層と完全に対応している。
パス~/Library/Arduino15/packages/の中を覗くと、次のような構造になっている
~/Library/Arduino15/packages/
├── esp32/ <-- ① パッケージ名
│ └── hardware/
│ └── esp32/ <-- ② アーキテクチャ名
│ └── 3.x.x/
│ └── boards.txt <-- ③ ここに「esp32p4」などの定義がある
└── arduino/ <-- ① パッケージ名
└── hardware/
└── avr/ <-- ② アーキテクチャ名
└── 1.x.x/
└── boards.txt <-- ③ ここに「uno」や「leonardo」の定義がある
% ls ~/Library/Arduino15/packages | sort
adafruit/
arduino/
attiny/
builtin/
CH55xDuino/
esp32/
esp8266/
m5stack/
rp2040/
STMicroelectronics/
UIAP/
% find ~/Library/Arduino15/packages -name boards.txt | sort | cut -c42-
adafruit/hardware/nrf52/1.7.0/boards.txt
arduino/hardware/avr/1.8.8/boards.txt
arduino/hardware/esp32/2.0.18-arduino.5/boards.txt
arduino/hardware/mbed_rp2040/4.6.0/boards.txt
arduino/hardware/nrf52/1.0.2/boards.txt
arduino/hardware/renesas_uno/1.6.0/boards.txt
arduino/hardware/samd/1.8.14/boards.txt
attiny/hardware/avr/1.0.2/boards.txt
CH55xDuino/hardware/mcs51/0.0.26/boards.txt
esp32/hardware/esp32/3.3.11/boards.txt
esp8266/hardware/esp8266/3.1.2/boards.txt
m5stack/hardware/esp32/3.3.8/boards.txt
rp2040/hardware/rp2040/6.0.0/boards.txt
STMicroelectronics/hardware/stm32/3.0.0/boards.txt
STMicroelectronics/tools/STM32Tools/2.5.0/boards.txt
UIAP/hardware/ch32v/1.0.42/boards.txt
5.1. インストール済みボードのFQBN
Arduino-IDE にインストールしたすべてのボード情報が表示されます。
arduino-cli board listall
当たりをつけてgrepするのがよい
% arduino-cli board listall | grep -i "ESP32-\?C3" | sort
Adafruit QT Py ESP32-C3 esp32:esp32:adafruit_qtpy_esp32c3
AirM2M_CORE_ESP32C3 esp32:esp32:AirM2M_CORE_ESP32C3
DFRobot Beetle ESP32-C3 esp32:esp32:dfrobot_beetle_esp32c3
ESP32C3 Dev Module esp32:esp32:esp32c3
Geekble Mini ESP32-C3 esp32:esp32:Geekble_ESP32C3
Nologo ESP32C3 Super Mini esp32:esp32:nologo_esp32c3_super_mini
OLIMEX ESP32-C3-DevKit-Lipo esp32:esp32:esp32c3-devkitlipo
Pandabyte xC3m - ESP32C3 esp32:esp32:pandabyte_xc3m
SparkFun Pro Micro - ESP32C3 esp32:esp32:sparkfun_pro_micro_esp32c3
TTGO T-OI PLUS RISC-V ESP32-C3 esp32:esp32:ttgo-t-oi-plus
uPesy ESP32C3 Basic esp32:esp32:upesy_esp32c3_basic
uPesy ESP32C3 Mini esp32:esp32:upesy_esp32c3_mini
Waveshare ESP32-C3-Zero esp32:esp32:waveshare_esp32_c3_zero
WeAct Studio ESP32C3 esp32:esp32:weact_studio_esp32c3
XIAO_ESP32C3 esp32:esp32:XIAO_ESP32C3
% arduino-cli board listall | grep tab5 | tr -s ' ' '\t'
M5Tab5 m5stack:esp32:m5stack_tab5
M5Tab5 espressif:esp32:m5stack_tab5
M5Tab5 esp32:esp32:m5stack_tab5
ややこしい(後述のボード詳細を見ると判別できる)
m5stack:esp32:m5stack_tab5 : M5Stack製 定義ボード
espressif:esp32:m5stack_tab5 : Arduino製 定義ボード
esp32:esp32:m5stack_tab5 : Espressif製 定義ボード
5.2. PCに接続しているボードのFQBN
シリアルポートの確認には利用できるようですが、ESP32だと正確なFQBNは表示されません。
% arduino-cli board list
シリアルポート Protocol タイプ Board Name FQBN Core
/dev/cu.Bluetooth-Incoming-Port serial Serial Port Unknown
/dev/cu.debug-console serial Serial Port Unknown
/dev/cu.usbmodem1201 serial Serial Port (USB) ESP32 Family Device esp32:esp32:esp32_family esp32:esp32
/dev/cu.usbmodemHIDEF1 serial Serial Port (USB) Arduino Leonardo arduino:avr:leonardo arduino:avr
5.3. ボード(FQBN)の詳細
arduino-cli board details -b <FQBN>
指定したボード(FQBN)の詳細や(Arduino-IDEの「ツール」メニューで指定するような)様々なオプションが表示されます。デフォルトに「✔」チェックマークが付く
% arduino-cli board details -b esp32:esp32:m5stack_tab5
Downloads % arduino-cli board details -b esp32:esp32:m5stack_tab5
Board name: M5Tab5
FQBN: esp32:esp32:m5stack_tab5
Board version: 3.3.11
Package name: esp32
Package maintainer: Espressif Systems
Package URL: https://espressif.github.io/arduino-esp32/package_esp32_index.json
Package website: https://github.com/espressif/arduino-esp32
Package online help: https://esp32.com
Platform name: esp32
Platform category: ESP32
Platform architecture: esp32
Platform URL: https://github.com/espressif/arduino-esp32/releases/download/3.3.11/esp32-core-3.3.11.zip
Platform file name: esp32-core-3.3.11.zip
Platform size (bytes): 46900611
Platform checksum: SHA-256:a18203f2429f5551ec929b80e8129e439df7a3a009b536b305f00b4a1f1bbb62
Required tool: arduino:dfu-util 0.11.0-arduino5
Required tool: esp32:esp-rv32 2601
Required tool: esp32:esp-x32 2601
Required tool: esp32:esp32-libs 3.3.11
Required tool: esp32:esp32c3-libs 3.3.11
Required tool: esp32:esp32c5-libs 3.3.11
Required tool: esp32:esp32c6-libs 3.3.11
Required tool: esp32:esp32h2-libs 3.3.11
Required tool: esp32:esp32p4-libs 3.3.11
Required tool: esp32:esp32p4_es-libs 3.3.11
Required tool: esp32:esp32s2-libs 3.3.11
Required tool: esp32:esp32s3-libs 3.3.11
Required tool: esp32:esptool_py 5.3.1
Required tool: esp32:mklittlefs 4.0.2-db0513a
Required tool: esp32:mkspiffs 0.2.3
Required tool: esp32:openocd-esp32 v0.12.0-esp32-20260424
Required tool: esp32:riscv32-esp-elf-gdb 17.1_20260402
Required tool: esp32:xtensa-esp-elf-gdb 17.1_20260402
Option: Upload Speed UploadSpeed
921600 ✔ UploadSpeed=921600
115200 UploadSpeed=115200
230400 UploadSpeed=230400
460800 UploadSpeed=460800
Option: USB Mode USBMode
Hardware CDC and JTAG ✔ USBMode=hwcdc
USB-OTG (TinyUSB) USBMode=default
Option: USB CDC On Boot CDCOnBoot
Enabled ✔ CDCOnBoot=cdc
Disabled CDCOnBoot=default
Option: USB Firmware MSC On Boot MSCOnBoot
Disabled ✔ MSCOnBoot=default
Enabled (Requires USB-OTG Mode) MSCOnBoot=msc
Option: USB DFU On Boot DFUOnBoot
Disabled ✔ DFUOnBoot=default
Enabled (Requires USB-OTG Mode) DFUOnBoot=dfu
Option: Upload Mode UploadMode
UART0 / Hardware CDC ✔ UploadMode=default
USB-OTG CDC (TinyUSB) UploadMode=cdc
Option: CPU Frequency CPUFreq
360MHz ✔ CPUFreq=360
40MHz CPUFreq=40
Option: Flash Frequency FlashFreq
80MHz ✔ FlashFreq=80
40MHz FlashFreq=40
Option: Flash Mode FlashMode
QIO ✔ FlashMode=qio
DIO FlashMode=dio
Option: Flash Size FlashSize
16MB (128Mb) ✔ FlashSize=16M
Option: Partition Scheme PartitionScheme
Default (2 x 6.5 MB app, 3.6 MB SPIFFS) ✔ PartitionScheme=default
8M with spiffs (3MB APP/1.5MB SPIFFS) PartitionScheme=default_8MB
Minimal (1.3MB APP/700KB SPIFFS) PartitionScheme=minimal
No FS 4MB (2MB APP x2) PartitionScheme=no_fs
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
Huge APP (3MB No OTA/1MB SPIFFS) PartitionScheme=huge_app
Minimal SPIFFS (1.9MB APP with OTA/128KB SPIFFS) PartitionScheme=min_spiffs
16M Flash (2MB APP/12.5MB FATFS) PartitionScheme=fatflash
16M Flash (3MB APP/9.9MB FATFS) PartitionScheme=app3M_fat9M_16MB
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: PSRAM PSRAM
Enabled ✔ PSRAM=enabled
Disabled PSRAM=disabled
Option: Erase All Flash Before Sketch Upload EraseFlash
Disabled ✔ EraseFlash=none
Enabled EraseFlash=all
Option: JTAG Adapter JTAGAdapter
Disabled ✔ JTAGAdapter=default
Integrated USB JTAG JTAGAdapter=builtin
FTDI Adapter JTAGAdapter=external
ESP USB Bridge JTAGAdapter=bridge
Option: Chip Variant ChipVariant
Before v3.00 ✔ ChipVariant=prev3
v3.00 or newer ChipVariant=postv3
Programmers: ID Name
esptool Esptool
6. コンパイル&アップロード コマンド
コマンドの基本
cd path/to/your/projectFolder
.inoファイルがあるプロジェクトフォルダーをカレントディレクトリに変更しておく
arduino-cli compile [--clean] -b <FQBN> [--upload -p <シリアルポート> [-c オプション]] . [-v]
ターゲットにするボード(FQBN)を指定する。
- キャッシュクリア後フルビルドする場合:
--cleanを指定する - コンパイルにアップロードも行う場合:
--upload -p <シリアルポート>を指定する - 「より詳細な情報を表示(コンパイル / 書き込み)」する場合:
-vを指定する - 書き込み時のボーレートを指定する場合(ボードによりパラメタが異なる)
- arduino Uno 等:
-c programmer.speed=115200 - esp32等:
-c upload.speed=1500000
- arduino Uno 等:
- ボーレート以外にも様々なオプションが指定できる(例えば、使用するパーティションスキームなど)。
しかし、これらをコマンドラインの引数で長々指定するのは非効率
そこで、次のsketch.yamlを使用します。
( sketch.yamlは、Arduino-IDE でも有効らしい )
7. sketch.yaml
.inoファイルと同じフォルダに作成します。
例えば、次の様な内容。
default_fqbn: m5stack:esp32:m5stack_stickc_plus2
default_port: /dev/cu.usbserial-586B0035891
sketch.yamlを作成しておけば、コンパイルやアップロードのコマンドがシンプルになります。
# コンパイル
arduino-cli compile .
# 書き込み
arduino-cli upload .
sketch.yaml の詳細仕様は、公式の Arduino CLI Sketch specification に規定されています。
しかし、これを簡単に作成するコマンドオプションがあります。
7.1 sketch.yaml自動生成
# .ino ファイルがあるプロジェクトフォルダをカレントディレクトリにする
cd path/to/your/projectFolder
arduino-cli board attach -b <FQBN> -p <シリアルポート> .
ボードとシリアルポートだけ指定してsketch.yamlを自動生成させた後に、テキストエディタでオプション等を追加・変更するのが便利です。
% cd Developer/Arduino/ESP32/m5stickc-plus2/m5stackc-plus2_clock
m5stackc-plus2_clock % ls
m5stackc-plus2_clock.ino
m5stackc-plus2_clock % arduino-cli board attach -b m5stack:esp32:m5stack_stickc_plus2 -p /dev/cu.usbserial-586B0035891 .
Default port set to: /dev/cu.usbserial-586B0035891
Default FQBN set to: m5stack:esp32:m5stack_stickc_plus2
Default programmer set to:
m5stackc-plus2_clock % ls
m5stackc-plus2_clock.ino sketch.yaml
m5stackc-plus2_clock % cat sketch.yaml
default_fqbn: m5stack:esp32:m5stack_stickc_plus2
default_port: /dev/cu.usbserial-586B0035891
生成されたsketch.yamlをエディタで開いて、オプションを追加しました。
default_fqbn: m5stack:esp32:m5stack_stickc_plus2
default_port: /dev/cu.usbserial-586B0035891
# オプション追加
default_board_options: PartitionScheme=default_8MB,UploadSpeed=1500000
オプションに指定できる内容は、前述したarduino-cli board details -b <FQBN>で確認できます。
デフォルトに「 ✔ 」チェックマークが付いていることを利用して 、
次のコマンドでm5stack:esp32:m5stack_stickc_plus2のオプションのデフォルトを確認してみます。
% arduino-cli board details -b m5stack:esp32:m5stack_stickc_plus2 | grep "✔" | awk -F'✔' '{print $2}' | sed 's/ //g'
UploadSpeed=1500000
CPUFreq=240
FlashFreq=80
FlashMode=qio
FlashSize=8M
PartitionScheme=default_8MB
DebugLevel=none
PSRAM=enabled
LoopCore=1
EventsCore=1
EraseFlash=none
注)arduino-cli board detailsはsketch.yamlにdefault_fqbnを記述していても、-b <FQBN>を省略できませんでした。
7.2. sketch.yamlがあるときのコンパイル&アップロード コマンド
# コンパイル
arduino-cli compile .
# 書き込み
arduino-cli upload .
前述したコマンドを実行します。
m5stackc-plus2_clock % arduino-cli compile .
最大3342336バイトのフラッシュメモリのうち、スケッチが1133975バイト(33%)を使っています。
最大327680バイトのRAMのうち、グローバル変数が51204バイト(15%)を使っていて、ローカル変数で276476バイト使うことができます。
m5stackc-plus2_clock % arduino-cli upload . -v
"/Users/nak435/Library/Arduino15/packages/m5stack/tools/esptool_py/5.2.0/esptool" --chip esp32 --port "/dev/cu.usbserial-586B0035891" --baud 1500000 --before default-reset --after hard-reset write-flash -z --flash-mode keep --flash-freq keep --flash-size keep 0x1000 "/Users/nak435/Library/Caches/arduino/sketches/38FA0C19D7427988136EB69E40AA9A00/m5stackc-plus2_clock.ino.bootloader.bin" 0x8000 "/Users/nak435/Library/Caches/arduino/sketches/38FA0C19D7427988136EB69E40AA9A00/m5stackc-plus2_clock.ino.partitions.bin" 0xe000 "/Users/nak435/Library/Arduino15/packages/m5stack/hardware/esp32/3.3.8/tools/partitions/boot_app0.bin" 0x10000 "/Users/nak435/Library/Caches/arduino/sketches/38FA0C19D7427988136EB69E40AA9A00/m5stackc-plus2_clock.ino.bin"
esptool v5.2.0
Connected to ESP32 on /dev/cu.usbserial-586B0035891:
Chip type: ESP32-PICO-V3-02 (revision v3.1)
Features: Wi-Fi, BT, Dual Core + LP Core, 240MHz, Embedded Flash, Embedded PSRAM, Vref calibration in eFuse, Coding Scheme None
Crystal frequency: 40MHz
MAC: 10:06:1c:27:c4:18
Stub flasher running.r...
Changing baud rate to 1500000...
Changed.
Configuring flash size...
Flash will be erased from 0x00001000 to 0x00007fff...
Compressed 25024 bytes to 16018...
Wrote 25024 bytes (16018 compressed) at 0x00001000 in 0.5 seconds (404.8 kbit/s)..
Hash of data verified....
Flash will be erased from 0x00008000 to 0x00008fff...
Wrote 3072 bytes (146 compressed) at 0x00008000 in 0.1 seconds (462.6 kbit/s).
Hash of data verified....============================] 100.0% 146/146 bytes...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (622.9 kbit/s).
Hash of data verified....============================] 100.0% 47/47 bytes...
Flash will be erased from 0x00010000 to 0x00124fff...
Compressed 1134128 bytes to 706515...
Writing at 0x0001d1a2 [ ] 2.3% 16384/706515 bytes
Writing at 0x00026df4 [> ] 4.6% 32768/706515 bytes
: : (中略)
Writing at 0x0011e1f0 [============================> ] 97.4% 688128/706515 byte
Writing at 0x00124019 [============================> ] 99.7% 704512/706515 byte
Wrote 1134128 bytes (706515 compressed) at 0x00010000 in 10.9 seconds (832.0 kbit/s).
Hash of data verified....
Hard resetting via RTS pin...
New upload port: /dev/cu.usbserial-586B0035891 (serial)
Arduino-IDEの ⌘Uでアップロードすると、コードに変更がない場合も コンパイルフェーズが走っていましたが、コマンドでuploadすると コンパイルが走りません(イライラが解消される)。
逆に、一度もコンパイルしていない状況では、当然ですがuploadできません。
m5stackc-plus2_clock % arduino-cli upload .
Compiled sketch not found in /Users/nak435/Library/Caches/arduino/sketches/38FA0C19D7427988136EB69E40AA9A00
コンパイルエラーが出なくなるまでは、compile時に『詳細を表示』する`-v`オプションを指定するとよいでしょう(ライブラリのバージョンやパスが確認できます)。
Used library Version Path
M5StickCPlus2 1.0.1 /Users/nak435/Developer/Arduino/libraries/M5StickCPlus2
M5Unified 0.2.20 /Users/nak435/Developer/Arduino/libraries/M5Unified
M5GFX 0.2.27 /Users/nak435/Developer/Arduino/libraries/M5GFX
WiFi 3.3.8 /Users/nak435/Library/Arduino15/packages/m5stack/hardware/esp32/3.3.8/libraries/WiFi
Networking 3.3.8 /Users/nak435/Library/Arduino15/packages/m5stack/hardware/esp32/3.3.8/libraries/Network
Used platform Version Path
m5stack:esp32 3.3.8 /Users/nak435/Library/Arduino15/packages/m5stack/hardware/esp32/3.3.8
なお、sketch.yamlに記述しているパラメタを、arduino-cliコマンドの引数で指定すると、コマンド引数の指定値が優先されます。
8. arduino-cli その他のコマンド
知っていると便利そうなコマンドたち
8.1. Arduino-IDEの「シリアルモニタ」相当
arduino-cli monitor [-p <シリアルポート>] -c baudrate=<ボーレート> [--discovery-timeout <待ち時間>] [--timestamp]
sketch.yamlにシリアルポートが記述されていれば、引数[-p <シリアルポート>]を省略できます。
m5stackc-plus2_clock % arduino-cli monitor -c baudrate=115200
Monitor port settings:
baudrate=115200
bits=8
dtr=off
parity=none
rts=off
stop_bits=1
Connecting to /dev/cu.usbserial-586B0035891. Press CTRL-C to exit.
sketch.yamlにシリアルモニターのボーレートも記述しておくと、arduino-cli monitorだけで使えます。
default_fqbn: m5stack:esp32:m5stack_stickc_plus2
default_port: /dev/cu.usbserial-586B0035891
default_board_options: PartitionScheme=default_8MB,UploadSpeed=1500000
# シリアルモニターのボーレート。2行に分けて、2行目は半角スペース2個でインデント
default_port_config:
baudrate: 115200
arduino-cli monitor
--timestampオプションを指定すると、シリアル表示の先頭にタイムスタンプが付加されます。
% arduino-cli monitor -p /dev/cu.usbmodem1201 --timestamp
Monitor port settings:
baudrate=9600
bits=8
dtr=on
parity=none
rts=on
stop_bits=1
Connecting to /dev/cu.usbmodem1201. Press CTRL-C to exit.
[2026-08-22 15:58:26] 128
[2026-08-22 15:58:27] 718
[2026-08-22 15:58:28] 768
^C
マイコンボード側がシリアルをオープンする前に(USBを挿す前に)、シリアルモニターを起動すると『未起動(シリアルポート無し)』でエラーになりますが、--discovery-timeout <待ち時間>オプションを指定すると、指定時間だけ待機してくれる便利な機能があります。
# 10秒待機の場合は `10s`と指定
arduino-cli monitor --discovery-timeout 10s
ただし、他プログラムが既にオープンしているシリアルポートを『空くまで待機』する使い方はできませんでした。Serial port busyとしてすぐにエラーで終わります。残念。
しかし、シェルでループさせることで”擬似的に”『空くまで待機』させることはできるかもしれません。
# ループを終わらせる場合は、Ctrl+Cを2〜3回叩く
while true; do arduino-cli monitor --discovery-timeout 5s; sleep 0.5; done
8.2. Arduino IDEの「コンパイル済みのバイナリのエクスポート」相当
Arduino IDEの「コンパイル済みのバイナリのエクスポート」に相当する arduino-cli のオプションは、--export-binaries(または -e) です。
m5stackc-plus2_clock % tree .
.
├── m5stackc-plus2_clock.ino
└── sketch.yaml
1 directory, 2 files
# バイナリのエクスポート
m5stackc-plus2_clock % arduino-cli compile . -e
最大3342336バイトのフラッシュメモリのうち、スケッチが1133975バイト(33%)を使っています。
最大327680バイトのRAMのうち、グローバル変数が51204バイト(15%)を使っていて、ローカル変数で276476バイト使うことができます。
m5stackc-plus2_clock % tree .
.
├── build
│ └── m5stack.esp32.m5stack_stickc_plus2
│ ├── boot_app0.bin
│ ├── build.options.json
│ ├── flash_args
│ ├── m5stackc-plus2_clock.ino.bin
│ ├── m5stackc-plus2_clock.ino.bootloader.bin
│ ├── m5stackc-plus2_clock.ino.elf
│ ├── m5stackc-plus2_clock.ino.map
│ ├── m5stackc-plus2_clock.ino.merged.bin #⭐️
│ ├── m5stackc-plus2_clock.ino.partitions.bin
│ ├── partitions.csv
│ └── sdkconfig
├── m5stackc-plus2_clock.ino
└── sketch.yaml
3 directories, 13 files
m5stackc-plus2_clock %
⭐️印の.ino.merged.binがブートローダやパーティションテーブルらと一つのファイルにマージされたバイナリで、esptool write-flash 0x0 で直接書き込めるファイルです。OTAに渡すなら.ino.binファイル。
buildフォルダ配下に ボード(FQBN)毎のサブフォルダが作成され、そこにバイナリファイルが生成されます。よって、複数のボード向けにコンパイルコマンドを連続実行してもファイルが上書きされることはありません。cli ならではの使い方です。
8.3. キャッシュクリア
ボードやライブラリのインストール、アップデートを行う際に、インターネットから一時的にダウンロードされた .tar.bz2 や .zip などが格納されている領域をクリアするコマンド。
arduino-cli cache clean
一度インストールが完了していれば消しても問題なく、環境の動作にも影響しません(次に新しいボードなどを入れるとまた生成される)。
他にも、基本的に、Arduino-IDEで操作できることは、arduino-cli でも実行できる様です。興味があれば公式サイトをみてください。
なお、環境はArduino-IDEと同居のため、例えば「ライブラリ管理」系のコマンド(インストールやアップデート)は、Arduino-IDE側で実施した方がよいと思いました。
9. リファレンス
-
スタートアップガイド:Getting started with Arduino CLI
-
公式コマンドリファレンス(最新版):Arduino CLI Commands Reference(Latest)
-
開発者向けドキュメント(GitHub Pages):Arduino CLI - GitHub Pages
10. arduino-cli スニペット
arduino-cli version
arduino-cli config init
arduino-cli config dump
arduino-cli board listall
arduino-cli board listall | grep -i "XXX"
arduino-cli board list
arduino-cli board details -b <FQBN>
arduino-cli compile [--clean] -b <FQBN> [--upload -p <シリアルポート> [-c オプション]] . [-v]
arduino-cli board attach -b <FQBN> -p <シリアルポート> .
# cat sketch.yaml
arduino-cli board details -b <FQBN>
arduino-cli board details -b <FQBN> | grep "✔" | awk -F'✔' '{print $2}' | sed 's/ //g'
arduino-cli compile . -v
arduino-cli compile --clean .
arduino-cli upload . -v
arduino-cli compile . -e
arduino-cli monitor [-p <シリアルポート>] [-c <ボーレート>] [--discovery-timeout <待ち時間>] [--timestamp]
arduino-cli monitor --discovery-timeout 10s
while true; do arduino-cli monitor --discovery-timeout 5s; sleep 0.5; done
arduino-cli cache clean
default_fqbn: m5stack:esp32:m5stack_stickc_plus2
default_port: /dev/cu.usbserial-586B0035891
default_board_options: PartitionScheme=default_8MB,UploadSpeed=1500000
default_port_config:
baudrate: 115200
⭐️2026.8.31追加
arduino-cli compile --upload . && arduino-cli monitor -c 115200 --timestamp
esptool --chip auto --port `yamlport` read-mac
read-mac(もしくは flash-id, chip-id)後にマイコンがリセットされることを利用
esptool --chip auto --port `yamlport` read-mac && arduino-cli monitor -c 115200 --timestamp
11. おわりに
今後は、cliの方をメインで使っていくような予感がします。
この記事が、これから arduino-cli を始める方の参考になれば幸いです。
以上