sublime text 编译 arduino 代码必须依赖独立安装的 arduino-cli,需正确配置路径、fqbn(如 arduino:avr:uno)、串口及 sketch 命名规则,禁用已停更的 stino 插件。

Sublime Text 本身不能编译或上传 Arduino 代码,所有“编译成功”都是靠调用 arduino-cli 实现的——配置错一个路径、漏一个平台名、串口写错格式,Build failed 就立刻报给你看。
arduino-cli 必须独立安装,别依赖 Arduino IDE 自带的
Arduino IDE 2.x 自带的 arduino-cli 藏在深层目录(如 Contents/Resources/app/arduino-cli macOS),PATH 不自动加,版本难同步,Sublime 启动时根本找不到。独立安装才能保证命令直给、路径可控、更新及时。
- 去 GitHub releases 下对应系统的二进制:Windows 选
arduino-cli_*.exe,macOS 选arm64或amd64,Linux 选对应架构 - 解压后放到固定位置:
/usr/local/bin/arduino-cli(macOS/Linux)或C:\arduino-cli\arduino-cli.exe(Windows) - 终端运行
arduino-cli version确认可用;再跑arduino-cli core update-index和arduino-cli core install arduino:avr装好 AVR 核心 - Windows 用户注意:如果 Sublime 是通过 cmd/powershell 启动的,就只用这一份;但若你常用 Git Bash 或 WSL,得单独再装一份到对应环境 PATH 里,否则
Upload会卡在串口识别
Build System 里 -b 和 --fqbn 必须写全,不能简写
常见错误是写成 -b uno 或 --fqbn uno,这会直接触发 Error: board arduino:uno not found。AVR Uno 的完整 FQBN 是 arduino:avr:uno,缺一不可——冒号分隔的三段分别代表平台厂商、架构、板型。
- 查你手头板子的真实 FQBN:终端运行
arduino-cli board listall | grep -i uno(macOS/Linux)或arduino-cli board listall(Windows) - Build System 中必须显式写死路径,别依赖 PATH:
"shell_cmd": "/usr/local/bin/arduino-cli compile -b arduino:avr:uno ${file}" -
${file}指向当前打开的 .ino 文件,但arduino-cli实际编译的是整个 sketch 目录,所以确保项目根目录下**只有一个同名 .ino 主文件**(比如Blink.ino,且目录名也是Blink) - Windows 用户串口填
COM3这类,macOS 填/dev/cu.usbmodem14201(用ls /dev/cu.*查),Linux 填/dev/ttyACM0或/dev/ttyUSB0
别用 Stino 插件,它已停更且和 arduino-cli 冲突
Stino 基于 Arduino IDE 1.x 的旧 API,无法解析新版 arduino-cli 的 JSON 配置和平台索引结构。实际表现是:菜单能点开,但点 Build 就报 AttributeError: 'NoneType' object has no attribute 'get',或者 Failed to parse boards.txt,甚至悄悄覆盖你手动配好的 arduino-cli 配置,导致后续串口识别失败。
- 已安装的请彻底卸载:Preferences → Package Settings → Stino → Remove Package
- 不要试图“修复”它——没有维护者,GitHub 上最后提交是 2017 年
- 替代方案只有两个:纯
arduino-cli+ 自定义 Build System(轻量可控),或换 VSCode + 官方 Arduino 扩展(功能完整、有串口监视器) - 如果你坚持用 Sublime 当编辑器,就把它当纯文本工具用:写代码 → 终端里手动
arduino-cli compile→upload,比折腾插件省时间
最容易被忽略的是工作目录和主文件命名规则:arduino-cli 编译时会把 ${file_path} 当作 sketch root,而它要求该目录下存在一个与目录名完全相同的 .ino 文件。比如路径是 /Users/me/Blink/Blink.ino,那目录名必须叫 Blink,文件名也必须叫 Blink.ino——少一个字母,compile 就静默失败,不报错也不生成 .hex。











