Arduino cli 写hello world

我在看关于时看到了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 则不会自动重新编译。

image

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
相关推荐
国科安芯4 小时前
83 倍:ASC0108S 在推挽和开漏之间,差的不是速度,是回程
单片机·嵌入式硬件·架构·电平转换·抗辐射
国科安芯8 小时前
从遥控到自治:ASP4644S2B支撑星载电源健康管理与容错配电
网络·单片机·嵌入式硬件·安全·dcdc·低轨卫星·商业航天
rhythm-ring8 小时前
《汽车热管理系统:电子水泵单线PWM双向诊断机制》
单片机·嵌入式硬件·汽车
Dev_XH11 小时前
【成品设计】基于物联网的车间安全生产监控系统设计
stm32·单片机·嵌入式硬件·物联网
xiebs_13 小时前
【无标题】111
单片机
元器件BOM超人13 小时前
GD32E230C8T6 兆易创新Cortex-M23超值型MCU解析:规格参数、替代选型与常见问题
单片机·嵌入式硬件
StarsGreen14 小时前
Android 启动流程详解
android·linux·单片机·嵌入式硬件
en.en..14 小时前
AFE:模拟前端,模拟世界通往 MCU 的信号桥梁
单片机·嵌入式硬件
小鳄鱼电气15 小时前
感应电机直接转矩控制传动(AC4 200 HP)仿真说明书
单片机·嵌入式硬件
Dev_XH1 天前
【成品设计】基于单片机的家用智能浇花系统的设计与实现
stm32·单片机·嵌入式硬件·物联网