
我在看关于时看到了CLI版本的信息,与是我在想Arduino IDE 是不是可以仅在cli运行呢?与是我就打算尝试一下cli版本的运行。
安装与下载
可以参考官方文档
https://docs.arduino.cc/arduino-cli/installation/
我是直接到github的release页面下载的,这样就可以跟我的IDE 图形化界面保持版本一致了。

下载后配置到Path环境变量后就可以运行了。
查看版本信息
bash
arduino-cli version
arduino-cli Version: 1.5.1 Commit: 01f3d4f2b Date: 2026-06-05T10:22:17Z
Arduino CLI 已经安装好后,你可以直接在终端中编译、烧录和监视 Arduino 项目,整个过程不需要打开 Arduino IDE。
需要注意:Arduino 程序通常运行在 ESP32 等开发板上,而不是直接在电脑上运行。
以你正在使用的 ESP32-C3 + Arch Linux 为例。
一、运行已有的 Arduino 项目
假设你的项目结构是:
hello_world/
└── hello_world.ino
hello_world.ino 内容:
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("Hello World!");
delay(1000);
}
1. 进入项目目录
cd hello_world
2. 查看已安装的开发板支持包
arduino-cli core list
如果没有安装 ESP32 开发板支持包,执行:
arduino-cli config add board_manager.additional_urls \
https://espressif.github.io/arduino-esp32/package_esp32_index.json
arduino-cli core update-index
arduino-cli core install esp32:esp32
因为我在图形化界面之中已经安装好这个了,所以不用在重复安装 了。
3. 编译项目
arduino-cli compile --fqbn esp32:esp32:esp32c3 .
这里:
compile:编译程序。--fqbn:指定开发板型号。esp32:esp32:esp32c3:ESP32-C3 Dev Module 的 FQBN。.:表示当前项目目录。
编译成功后,程序就可以烧录到开发板了。
4. 查看开发板连接的串口
arduino-cli board list
例如,你可能看到:
Port Protocol Type
/dev/ttyACM0 serial Serial Port (USB)
5. 烧录到 ESP32-C3
arduino-cli upload \
-p /dev/ttyACM0 \
--fqbn esp32:esp32:esp32c3 .
这里 -p 指定开发板连接的串口。
如果出现串口权限问题,可以检查:
ls -l /dev/ttyACM0
并根据设备所属用户组设置访问权限,不建议长期依赖 sudo 烧录。
6. 查看运行输出
上传成功后,打开串口监视器:
arduino-cli monitor \
-p /dev/ttyACM0 \
--config baudrate=115200
终端会不断显示:
Hello World!
Hello World!
Hello World!
...
这就表示你的 Arduino 程序已经在 ESP32 上运行了。
如果更习惯 tio,也可以使用:
tio -b 115200 /dev/ttyACM0
注意先关闭其他占用该串口的监视器。
二、推荐:把编译和烧录合并为一个命令
在项目目录下执行:
arduino-cli compile \
--fqbn esp32:esp32:esp32c3 \
--upload \
--port /dev/ttyACM0 \
.
这个命令会先编译程序,再上传到开发板。普通的 arduino-cli upload 则不会自动重新编译。
Arduino 文档
+1
三、进一步简化:配置 sketch.yaml
如果不想每次输入很长的参数,可以在项目根目录添加 sketch.yaml:
default_fqbn: esp32:esp32:esp32c3:CDCOnBoot=cdc
default_port: /dev/ttyACM0
default_port_config:
baudrate: 115200
之后就能这样操作:
# 编译
arduino-cli compile .
# 编译并上传
arduino-cli compile --upload .
# 查看串口输出
arduino-cli monitor
无法打印hello world的解决办法
sketch.yaml:
我最开始的配置是
default_fqbn: esp32:esp32:esp32s3
我检查了本机配置和 ESP32 核心源码,发现:
| 检查项 | 实际结果 |
|---|---|
| 项目当前板型 | esp32:esp32:esp32c3 |
| CLI 默认编译参数 | ARDUINO_USB_CDC_ON_BOOT=0 |
| IDE 历史编译记录 | 包含 CDCOnBoot=cdc,即启用 USB CDC |
| /dev/ttyACM0 设备 | Espressif 内置 USB JTAG/串口 |
在当前安装的 ESP32 核心中,Serial 会根据编译选项切换:
USB CDC 关闭 → Serial 指向 UART0,通过 UART 引脚输出
USB CDC 开启 → Serial 指向内置 USB 串口
所以,你的程序可能一直在正常执行 Serial.println("Hello world!"),只是 CLI 编译的固件把内容发到了 UART0,你却在监听 USB 串口。
上传成功与应用串口输出是两件事。 芯片的下载功能可以通过内置 USB 烧录,但应用中的 Serial 是否使用这个 USB 接口,取决于编译选项。Espressif 官方也要求 ESP32-C3 使用内置 USB 进行串口通信时启用 USB CDC On Boot。官方说明 (https://docs.espressif.com/projects/arduino-esp32/en/latest/tutorials/cdc_dfu_flash.html)
最终我修改成如下配置就可以了:
bash
default_fqbn: esp32:esp32:esp32c3:CDCOnBoot=cdc