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
相关推荐
深圳老胡3 小时前
C语言实现C++面向对象程序设计示例
笔记·stm32·单片机·代码规范
2501_922639583 小时前
率能半导体 SS6226双通道直流电机驱动芯片:7.2V/1.4A双路,覆盖玩具、小家电、直流有刷电机三大应用场景
单片机·嵌入式硬件·硬件工程
LCG米3 小时前
STM32时钟树配置实测:HSE起振失败回退HSI、PLL分频倍频计算与Flash等待周期陷阱
stm32·单片机·嵌入式硬件·嵌入式
Lxx_Zw4 小时前
PID 用顺了,然后呢:增强手术与前馈
c语言·stm32·单片机·嵌入式硬件
张怀民3165 小时前
PFC_CCM_NCP1654详讲
单片机·嵌入式硬件·硬件工程·pfc
youcans_6 小时前
【STM32C5教程】(9)DAC 模拟量信号输出实验
stm32·单片机·嵌入式硬件·stm32c5·cubemx2
智购科技自动售货机工厂6 小时前
省电40%的底层逻辑:冷热双温售货机基于SaaS的智能温控算法~YH
单片机·嵌入式硬件·百度·架构·emacs
深圳老胡7 小时前
STM32C5 系列 MCU 的 FreeRTOS 软件架构搭建指南:外设配置与应用实践
笔记·stm32·单片机·代码规范
霖霖7147 小时前
【ESP32笔记】I2S的音频录制与播放
笔记·单片机·mcu·音视频