VSCode Arduino cli 开发ESP32

本文是《Arduino cli 写hello world》

https://blog.csdn.net/lxyoucan/article/details/168245931

的后续。

原本我使用的Arduino IDE 进行开发,总体开发体验还是不错的。对我来说不太习惯的地方如下:

  1. 文件管理,默认是以标签页面的形式。不是文件树的形式。 文件切换感觉比较麻烦。
  2. 在hyperland有点兼容性问题,鼠标点菜单经常点不上,菜单就自动消失了。
  3. 写代码时语法检查与智能提示不灵敏。

VSCode 安装插件

安装 clangd

配置 clangd 代码补全

这是 VSCode 开发 Arduino 项目时,比较容易遇到问题的地方。

因为 Arduino 的头文件往往存放在用户目录下,例如:

bash 复制代码
~/.arduino15/packages/esp32/hardware/esp32/

如果没有配置好代码补全工具,VSCode 可能会提示:

bash 复制代码
Arduino.h: file not found

即使 Arduino CLI 能正常编译。

我推荐安装 VSCode 的 clangd 扩展,并让 Arduino CLI 自动生成编译数据库。

先执行:

bash 复制代码
arduino-cli compile \
  --build-path ./build \
  --only-compilation-database \
  .

Arduino CLI 支持生成 compile_commands.json,其中记录了编译器参数、头文件搜索路径等信息。

这样就可以让代码补全正常了。

sketch.yaml

项目根目录中增加sketch.yaml

yaml 复制代码
default_fqbn: esp32:esp32:esp32c3:CDCOnBoot=cdc
default_port: /dev/ttyACM0
default_port_config:
  baudrate: 115200

之后就能这样操作:

bash 复制代码
# 编译
arduino-cli compile .

# 编译并上传
arduino-cli compile --upload .

# 查看串口输出
arduino-cli monitor

至此就可以开心的用VSCode做开发啦,真舒服。

配置 VSCode 快捷任务

这是比较关键的一步。

在项目中创建 .vscode/tasks.json:

.vscode/tasks.json

复制代码
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Arduino: 编译",
      "type": "shell",
      "command": "arduino-cli",
      "args": [
        "compile",
        "--build-path",
        "${workspaceFolder}/build",
        "${workspaceFolder}" 
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "problemMatcher": []
    },
    {
      "label": "Arduino: 烧录",
      "type": "shell",
      "command": "arduino-cli",
      "args": [
        "upload",
        "--input-dir",
        "${workspaceFolder}/build",
        "${workspaceFolder}"
      ],
      "dependsOn": ["Arduino: 编译"],
      "problemMatcher": []
    },
    {
      "label": "Arduino: 串口监视",
      "type": "shell",
      "command": "arduino-cli",
      "args": [
        "monitor",
        "-p",
        "/dev/ttyACM0",
        "--config",
        "baudrate=115200"
      ],
      "isBackground": true,
      "problemMatcher": []
    }
  ]
}

配置好之后,在 VSCode 中:

操作 使用方式
编译 Ctrl + Shift + B
烧录 Ctrl + Shift + P → Tasks: Run Task → Arduino: 烧录
串口监视 Tasks: Run Task → Arduino: 串口监视

烧录任务会先编译,再上传,不容易出现上传旧固件的问题。

需要注意,串口监视任务会持续占用串口。再次烧录前,可能需要先停止它。

如果你报错arduino-cli 命令找不到的话,

,可以将 arduino-cli 放到:

bash 复制代码
/usr/local/bin/arduino-cli
相关推荐
ZENERGY-众壹5 小时前
告警风暴怎么压?100MW 电站监控平台告警引擎架构复盘
数据库·架构·iot·电站监控
天空'之城4 天前
004基于语音识别的智能家居本地控制系统
毕业设计·esp32·智能家居·语音识别·离线控制
海雅达手持终端PDA7 天前
工业手持终端的“去手机化”演进:看海雅达如何以“同轴扫摄”终结工程妥协,重塑工业PDA新范式
android·物联网·智能手机·硬件工程·能源·制造·iot
电子科技圈7 天前
芯科科技2026年Tech Talks技术系列讲座再增添全新主题共探无线SoC架构演进与安全合规
科技·嵌入式硬件·mcu·物联网·安全·架构·iot
Y007 天前
KNX 照明系统原理与 基于 KNX.net 的开发示例:从组地址到开关灯
iot·knx
voipmaker8 天前
GB28181 对接踩坑实录:注册不上、目录不全、流卡顿,一次说清(附 2022 版变更清单)
物联网·音视频·实时音视频·信息与通信·iot·gb28181·国标gb28181
TDengine (老段)8 天前
TDengine IDMP 十大实用功能(3)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
weixin_404380639 天前
MQTT 上云验收:ESP32-S3 从局域网控灯到远程网页控制
物联网·mqtt·esp32
IT规划师9 天前
MQTT实战 - MQTT高频面试题 + 我的8年实战答案(十一)
物联网·mqtt·面试·.net core·iot·mqttnet