1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

arduino-cli はじめました

1
Last updated at Posted at 2026-08-23

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

arduino-version.png

4. arduino-cli 初期化

arduino-cli の全体設定ファイルを初期化し、Arduino-IDEと同じライブラリフォルダを参照するように設定します。初回だけ実行

arduino-cli config init

directories:以下を追加しました。

~/Library/Arduino15/arduino-cli.yaml
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」の定義がある
自分のPCを覗いてみた
% 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 にインストールしたすべてのボード情報が表示されます。

🚫1129行も出力されたので注意
arduino-cli board listall

当たりをつけてgrepするのがよい

"ESP32-C3"なら
% 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
"M5Stack Tab5"なら
% 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ファイルがあるプロジェクトフォルダーをカレントディレクトリに変更しておく

Usage
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
  • ボーレート以外にも様々なオプションが指定できる(例えば、使用するパーティションスキームなど)。
    しかし、これらをコマンドラインの引数で長々指定するのは非効率

そこで、次のsketch.yamlを使用します。
sketch.yamlは、Arduino-IDE でも有効らしい

7. sketch.yaml

.inoファイルと同じフォルダに作成します。
例えば、次の様な内容。

sketch.yaml
default_fqbn: m5stack:esp32:m5stack_stickc_plus2
default_port: /dev/cu.usbserial-586B0035891

sketch.yamlを作成しておけば、コンパイルやアップロードのコマンドがシンプルになります。

"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をエディタで開いて、オプションを追加しました。

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 detailssketch.yamldefault_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だけで使えます。

sketch.yaml
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. リファレンス

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"
PCに接続しているボード
arduino-cli board list
ボード詳細
arduino-cli board details -b <FQBN>
コンパイル(&アップロード)
arduino-cli compile [--clean] -b <FQBN> [--upload -p <シリアルポート> [-c オプション]] . [-v]
sketch.yaml生成
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]
シリアルモニタ(10秒待機)
arduino-cli monitor --discovery-timeout 10s
シリアルモニタ(空き待ちループ)ループを終わらせる場合は Ctrl+C を2〜3回叩く
while true; do arduino-cli monitor --discovery-timeout 5s; sleep 0.5; done
キャッシュクリア
arduino-cli cache clean
"sketch.yaml"の例
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 を始める方の参考になれば幸いです。



以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?