Sublime Text 不能直接编译或上传 Arduino 代码,必须手动配置 arduino-cli 绝对路径、完整 FQBN、真实串口及 include 路径;Stino 插件已停更多年,依赖旧版 Arduino IDE 架构,无法解析 arduino-cli 2.x 的 JSON 配置,会导致解析失败、串口为空、配置覆盖等问题,必须禁用。

Sublime Text 本身不能编译或上传 Arduino 代码,所有“成功”都依赖你手动配对的 arduino-cli——配错路径、FQBN 写漏冒号、串口名用通配符,Build 就直接报错,不给你任何缓冲。
为什么 Stino 插件必须禁用
Stino 已停更多年,最后一次提交是 2021 年,它硬编码依赖 Arduino IDE 1.x 的 boards.txt 和 Java 启动器结构,完全无法解析 arduino-cli 2.x 的 JSON 配置和扁平化平台目录。常见表现包括:
-
AttributeError: 'NoneType' object has no attribute 'get'—— 因为它试图从空响应里取字段 -
Failed to parse boards.txt—— 新版 CLI 根本不生成这个文件 - 串口列表为空,或上传时提示
Serial was not declared in this scope—— 它偷偷覆盖了你本地的arduino-cli配置,导致核心库路径错乱 - Board Manager 卡死、
arduino-cli board listall结果被它干扰
如果你已经装过 Stino,请彻底删除 Packages/Stino 目录,并清空 ~/.arduino15/ 下可能被污染的 boards.local.json 或 staging 文件夹。
arduino-cli 必须独立安装且写死绝对路径
Arduino IDE 2.x 自带的 arduino-cli 不进系统 PATH,Sublime 启动时根本看不到它。靠 pip install arduino-cli 更不行——那是个社区旧分支,不支持 AVR 核心最新版(比如 arduino:avr@2.3.5)。
- macOS/Linux:下载官方二进制后,放到
/usr/local/bin/arduino-cli,运行arduino-cli version确认可执行 - Windows:解压到固定路径如
C:rduino-clirduino-cli.exe,不要放带空格或中文的目录 - Build System 中的
"cmd"字段必须写完整路径:"cmd": ["C:\arduino-cli\arduino-cli.exe", "compile", ...],不能只写"arduino-cli" - 给文件加执行权限(macOS/Linux):
chmod +x /usr/local/bin/arduino-cli
FQBN 和串口必须填真实值,不能模糊匹配
--fqbn 是强制参数,不是可选项;串口名也不能用 /dev/cu.usbmodem* 这类 shell 通配符——Build System 不走 shell 解析,它原样传给 arduino-cli,而 CLI 不支持 glob。
- 查真实 FQBN:
arduino-cli board listall | grep -i uno(macOS/Linux),输出类似arduino:avr:uno,就填这个全称 - 查真实串口:
- macOS:
ls /dev/cu.usbmodem*或arduino-cli board list - Windows:设备管理器里看 COM 号,如
COM3 - Linux:
ls /dev/ttyACM*或arduino-cli board list
- macOS:
- Build System 示例(macOS):
"cmd": ["arduino-cli", "compile", "-b", "arduino:avr:uno", "--upload", "-p", "/dev/cu.usbmodem14301", "$file_path"] -
$file_path必须指向 sketch 目录(即含xxx.ino和同名子文件夹的父目录),不是单个.ino文件
include 路径不配,跳转和补全就失效
Sublime 默认不认识 Arduino.h,也不懂 digitalWrite() 在哪定义。即使编译能过,Ctrl+Click 跳转会失败,函数补全也基本空白。
- 在项目根目录建
.sublime-project,加入以下内容(路径按你本地arduino-cli实际安装位置调整):{ "settings": { "index_files": true, "index_exclude_patterns": ["*.ino"], "folders": [ { "path": "." } ], "include_dirs": [ "/Users/you/.arduino15/packages/arduino/hardware/avr/2.3.5/cores/arduino", "/Users/you/.arduino15/packages/arduino/hardware/avr/2.3.5/variants/standard", "/Users/you/.arduino15/packages/arduino/tools/avr-gcc/12.2.0-atmel3.4.3-20240927/avr/include" ] } } - 路径里的版本号(如
2.3.5、12.2.0-atmel3.4.3-20240927)必须和arduino-cli board listall显示的实际平台版本一致 - 别指望 Sublime 自动识别
.ino→.cpp的转换逻辑——它不会帮你加#include "Arduino.h",你得自己写
最常被忽略的一点:FQBN 和 include 路径中的硬件平台版本必须严格一致。差一个 patch 版本,头文件位置就可能变,跳转就断。这不是 Sublime 的问题,是 Arduino 工具链本身的松散版本管理导致的。

















