按现象排查故障
按照你看到的现象找,不用先知道原因。这一页全部展开,用 Ctrl+F 搜你屏幕上那句话最快。
每一条最后都给一个「分辨测试」——一个能告诉你故障在哪一侧的动作。硬件问题最费时间的地方不是修,是分不清该修哪边。
板子插上了,端口列表里没有它
看起来是什么样
点「开始烧录」后浏览器弹出端口选择框,但里面是空的,或者只有你电脑上原有的蓝牙串口。没有任何报错——这正是它最难查的地方,屏幕上什么都没发生。
真正的原因(按出现频率排)
- 线只能充电,不能传数据。这是第一名,远超其他。充电线插上去板子的电源灯会亮,看起来一切正常,但电脑根本不知道它存在。
- USB 串口驱动没装。板子上那颗负责 USB 转串口的小芯片(常见的是 CH340、CP2102)需要驱动。Windows 和一部分 macOS 上要手动装。
- 插在了不供数据的口上。有些集线器、有些键盘上的 USB 口只供电。
- 板子本身没有 USB 转串口芯片。一部分模块(不是开发板)要外接一个 USB-TTL 才能烧。
怎么办
- 换一根线。换一根你确定能传数据的——比如平时给手机传文件用的那根。这一步能解决大半的情况。
- 换一个 USB 口,直接插电脑,不要经过集线器。
- 还是没有,去装驱动:先看板子上那颗小芯片的丝印字样(CH340 / CP2102 / CP2104),按型号搜索官方驱动。装完重新插一次线。
还不行的话,做这个测试
拔插对比法。打开系统的设备列表(Windows 是设备管理器,macOS 是终端里 ls /dev/cu.*,Linux 是 ls /dev/ttyUSB* /dev/ttyACM*),先不插板子看一遍,再插上看一遍。
- 多出来一条 → 电脑认出板子了,问题不在硬件,在浏览器那一侧。回去看 浏览器没弹出端口选择框。
- 一模一样,什么都没多 → 电脑根本没看见这块板子。这是线、驱动或板子的问题,跟 WhispBuild 无关。按上面三步再走一遍,重点是换线。
点了烧录,浏览器没弹出端口选择框
看起来是什么样
按钮点下去没反应,或者界面上写着 当前浏览器不支持串口烧录(请用 Chrome 或 Edge)。
真正的原因
浏览器里烧录靠的是 WebSerial,这是一个只有 Chromium 内核浏览器才有的能力。Firefox 和 Safari 没有,而且短期内不会有——这是浏览器厂商的决定,不是我们的限制。
怎么办
- 换成 Chrome、Edge 或其他 Chromium 内核的浏览器,重新打开这个页面。
- 不想换浏览器也行:点「下载」把固件下下来,用你惯用的工具(esptool、Arduino IDE、乐鑫官方的烧录工具)自己烧。怎么下载 →
还不行的话,做这个测试
在同一个浏览器里打开一个新标签页,按 F12 打开控制台,输入 'serial' in navigator 回车。
- 返回 true → 浏览器支持,问题在别处(通常是页面没走 HTTPS,或者有插件拦了)。
- 返回 false → 这个浏览器确实没有这个能力,只能换浏览器或走下载路线。
一点开始烧录就失败,或者卡在某个百分比不动
看起来是什么样
端口选好了,进度条走了一点就停,日志里出现 Failed to open serial port.、No serial data received. 或者 Failed to connect with the device。这三句是各自独立的报错,不会拼在一起出现;用 Ctrl+F 搜的时候按原样搜。
真正的原因
| 你看到的 | 真正的意思 |
|---|---|
Failed to open serial port. | 另一个程序正占着这个串口。这是浏览器打不开端口时的固定措辞,字面上像权限问题,实际上并非如此。最常见的三个占用者:开着串口监视器的 Arduino IDE、上一个还没关掉的浏览器标签页、别的串口工具。(本页自己的 Console 连着时「开始烧录」是灰的、点不动,所以走不到这一步。)如果你不是在浏览器里烧,而是用命令行的 esptool.py,同一件事在 Windows 上的措辞是 Access is denied. |
No serial data received.Failed to connect with the device | 板子没进烧录模式。这两句是烧录库分别抛出的,通常只出现其中一句。多数开发板会自动进烧录模式,少数需要你手动:按住 BOOT 键不放,插上线(或按一下 RESET),再松开 BOOT。 |
| 走到某个百分比就不动了 | 通常是线接触不良或供电不足。等是没用的——这不是网络传输,卡住就是卡住了。 |
先做这一件事:如果你刚才开着 Console,回去点「断开设备」。一个串口一次只能被一个程序占着,界面上也写着这句提示——请先断开本地 Console 后再烧录,避免同一串口被占用。
怎么办
- 断开 Console,关掉所有可能占着串口的程序(Arduino IDE、其他串口工具、另一个开着这个项目的标签页)。
- 重新点烧录。
- 还是
No serial data received.:按住 BOOT 键,同时按一下 RESET,先松 RESET 再松 BOOT,然后立刻重试烧录。 - 还是卡住:换一根线,换一个直连电脑的 USB 口。
还不行的话,做这个测试
换一台电脑(或者至少换一个操作系统账号,把所有串口程序都关干净)。
- 换台电脑能烧 → 板子和线都是好的,问题在你原来那台机器上(有程序占着串口,或者驱动有问题)。
- 换台电脑一样烧不进 → 是线或板子的问题。先换线,再考虑板子。
串口连上了,但打出来的全是乱码
看起来是什么样
Console 中持续有输出,但全是 ÿÿ��@� 这种看不懂的字符。有时候开头几行是正常的,后面变成乱码。
真正的原因
- 波特率不对。第一名。连接时选的速率和固件里设的不一致,读出来就是乱码。默认约定是
115200。 - 开头几行乱、后面正常:这不是故障。复位后最开始那几行由芯片自带的 ROM 打印,它用的速率不一定和固件里设的一致;固件接管之后就正常了,继续往下看即可。
- 全程乱码且波特率确认没错:通常是接地不良,或者用了不合适的 USB-TTL。
怎么办
- 断开 Console,重新点「连接设备」,波特率选
115200。 - 还是乱,试
9600。手上是 ESP8266 板子再试74880——那是 ESP8266 bootloader 的速率,ESP32 系列的 ROM 用的是115200。 - 都不行,在对话中输入:
串口输出是乱码,帮我确认固件里设的波特率是多少。
还不行的话,做这个测试
按一下板子上的 RESET 键,盯着 Console 最开始的那几行。
- 复位瞬间有几行是可读的英文(比如
rst:0x1、boot:0x8)→ 串口链路是通的,只是波特率没对上。继续试其他速率。 - 从头到尾一个可读字符都没有 → 不是波特率的事,是线路或接地问题。
烧完之后板子一直重启
看起来是什么样
Console 里每隔一两秒就重新打印一遍启动信息,中间夹着 Guru Meditation Error、abort() 或者 rst:0xc (SW_CPU_RESET)。
真正的原因
固件已开始运行,但在初始化的某一步崩了,然后看门狗把它重启,如此循环。最常见的是硬件对不上:代码按方案里的引脚去初始化传感器,而你实际接的脚不一样,或者根本没接。
怎么办
- 在 Console 里向上滚动,找到崩溃前的最后一行——那行通常会说它当时在初始化什么。
- 把从「复位」到「崩溃」这一整段日志复制下来。
- 粘到项目对话框里,加一句:
烧录后一直重启,这是串口日志,帮我看看卡在哪一步。 - 同时对照 引脚连接表核一遍你的实际接线。
还不行的话,做这个测试
将外接器件全部拔除,只留板子和 USB 线,再复位一次。
- 不再重启了 → 问题出在外接部分:接线、供电或者某个模块。一个一个接回去,接到哪个开始重启就是哪个。
- 还在重启 → 跟外设无关,是固件本身的问题。把日志贴回对话,它会改。
编译一直不通过
看起来是什么样
对话里出现编译失败的消息。具体是哪一类,看 Main 面板编译产物里的「失败环节」那一行——界面上是英文原文,后面还跟着一个处理动作(例如 · User action required)。失败分成七类,各归各的责任方,先看清是哪一类,再判断要不要你出手。
| 「失败环节」上的原文 | 该谁处理 | 你要做什么 |
|---|---|---|
Firmware project needs repair | 平台自己修 | 什么都不用做,等它重试。多数编译失败属于这一类 |
Hardware selection needs attention | 你 | 这套硬件挑不出构建目标。回对话里换一块受支持的板子,或者把型号补全 |
Build profile needs backend attention | 平台 | 报给我们 |
Compile workflow needs backend attention | 平台 | 报给我们 |
Compile service needs attention | 平台 | 稍后重试 |
Compile resource unavailable | 平台 | 稍后重试 |
Compile safety check blocked output | 需要人工确认 | 报给我们 |
还有几种结果根本不带「失败环节」这一行:它们写在同一个面板上面的「编译」那一行——排队超时、编译超时、系统错误、已取消。前三种直接重试,这是资源紧张,不是你的代码有问题;已取消 是这一轮被停掉了,多数是你自己点了输入框上的停止按钮,重新说一次即可。
怎么办
- 看清是哪一类。只有
Hardware selection needs attention需要你出手,其余都在平台侧。 - 是硬件那一类:回对话里说清楚你实际有什么板子、什么模块。
- 属于超时或已取消那一类:输入
重新编译。 - 连着几轮都是同一个错:复制它给出的失败信息,然后输入
连续三轮都是这个错,帮我换个思路。
还不行的话,做这个测试
在同一个项目中输入:先不管前面那些,只做一个最小的:让板载 LED 每秒闪一次。
- 最小版本能编译通过 → 工具链和板子配置都是好的,问题出在你要的那个具体功能上。一步一步加回去。
- 连闪灯都编译不过 → 是项目层面的问题(板子选型或依赖),这时候值得报给我们。
它说这个硬件「不支持」
看起来是什么样
顶栏的硬件支持标记显示不支持或信息不足,而不是「推荐」或「可尝试」。
真正的原因
目前平台的框架只有 esp-idf 和 arduino 两种。能编出固件的板子是:ESP32 系列(esp32 / s2 / s3 / c2 / c3 / c6 / h2)、ESP8266 开发板、Arduino Uno。它宁可提前说不支持,也不会假装能做然后在编译时炸掉。这是有意的。
「信息不足」是另一回事:它不是说不行,是说你给的信息还不够判断。这种情况补一句型号通常就过了。
怎么办
- 先看是「不支持」还是「信息不足」。属于信息不足,就把板子完整型号说出来(丝印上印的那一串)。
- 确实不支持:换一块 ESP32 系列的板子。ESP32-C3 和 ESP32-S3 是最稳的两条路。
- 手上只有这块、不想换:可以让它按最接近的芯片出方案,但要知道编译能过不等于能在你板子上跑。
还不行的话,做这个测试
新建一个项目,只说 用 ESP32-C3 闪个灯,看支持标记是不是变成「推荐」。
- 变了 → 说明限制来自你原来那块板子,不是平台整体有问题。
- 没变 → 报给我们,这不正常。
发出去半天没有回应
看起来是什么样
消息发出去了,界面上一直显示「正在处理」之类的状态,但很久没有新内容。
真正的原因
- 它确实正在执行。写代码 + 编译一轮通常要几分钟。这里故意不显示百分比进度条——因为那个数字会是编的。取而代之的是当前在做哪一步。
- 推送通道断了。结果出来你也看不到。顶栏那盏「实时连接」的灯不会因此变色——通道断开时它只在后台悄悄重连,所以判断不了。
- 这一轮的执行预算用完了。它会明说,并且可以继续。
怎么办
- 先看顶栏状态在不在变。在变就是正常的,等着。
- 直接刷新页面——刷新不会丢失内容,这一轮还在后台跑。刷新会重新拉一次结果,比盯着那盏灯管用。
- 刷新后仍然没有新内容,且已经超过三十分钟(单次编译的上限就是这个量级):输入
刚才那一轮好像断了,重新来一次。
还不行的话,做这个测试
刷新页面,看历史消息还在不在。
- 历史还在,只是最后一轮没结果 → 是那一轮的问题,重新描述一次即可。
- 页面打不开或者报错 → 是连接或服务的问题,等一会儿再试。
代码明明改了,烧进去还是老样子
看起来是什么样
源码面板里能看到改动,但烧到板子上行为没变。界面上可能写着:源码已修改,当前固件仍来自上次成功编译。
真正的原因
「源码改了」和「板子上跑的变了」是两件事,中间隔着两步:编译,和烧录。这是新手最容易陷入的一个概念误区。改源码只改了云端的工程,它必须重新编译成固件,你必须重新烧进去,板子上的行为才会变。
如果你熟悉软件开发
这里没有热重载,也没有 docker restart。链路是 源码 → 编译 → 固件文件 → 烧录 → 设备,四个环节各自有状态,任何一环没走,下游就是旧的。
界面上那句「源码与最近编译一致 / 源码已修改」就是在告诉你前两环对不对得上。烧录那一环没有任何指示器——板子上跑的是什么,平台不知道,只有你知道你最后一次烧的是哪一版。
怎么办
- 确认它已经重新编译过了——看编译状态那一行说的是「源码与最近编译一致」还是「源码已修改」。
- 还没编译,就在对话里输入
重新编译。 - 编译完成后重新烧一次。不重烧,板子上永远是老固件。
还不行的话,做这个测试
让它在启动日志里加一句带版本号或时间的话,比如 启动时打印 build 2026-09-07-a,重新编译并烧录,然后看 Console。
- 看到了新的那句 → 新固件确实进去了,行为没变是代码逻辑的问题,继续在对话里改。
- 没看到 → 烧录没真正生效。回 烧录失败 那一条。
Console 显示「当前浏览器不支持串口 console。」
看起来是什么样
切到 Console 面板,日志区里只有这一句提示,「连接设备」按钮是灰的、点不动。按钮一直在那里,只是被禁用了。
真正的原因
和烧录是同一个原因:WebSerial 只有 Chromium 内核的浏览器才有。
怎么办
换 Chrome 或 Edge。串口日志没有下载这条退路——它必须实时连着设备读,所以产品内没有其他办法。产品之外还有一条:用电脑上任何一个串口工具(比如 screen、PuTTY、Arduino IDE 的串口监视器)读,然后把日志复制到对话框里。
还不行的话,做这个测试
在同一个浏览器窗口里新开一个标签页,按 F12 打开控制台,输入 'serial' in navigator 回车。
- 返回 true → 这个浏览器是支持的,那句提示不该出现在它上面。多半是你测的窗口和出问题的窗口不是同一个——这个判断只在页面加载时做一次,确认是同一个浏览器后刷新页面重试。刷新后还是这样,报给我们。
- 返回 false → 这个浏览器确实没有这个能力。换 Chrome 或 Edge,或者用上面说的串口工具读日志。
日志太长——直接粘贴,超长的会自动转成附件
看起来是什么样
粘贴本身是可以的。粘完如果正文会超过上限,这段文字不会进输入框,而是变成输入框下方的一条 pasted-….log 文件条,同时给出提示:粘贴内容 12345 字,超过正文上限 8000 字,已转成附件 pasted-20260908-101530-a1b2.log(48.2 KB)。请在输入框写一句你想让我看什么。
真正的原因
项目对话单条正文最多 8000 字。没超过上限的粘贴照常进输入框,行为一点不变;超过的那一次才走转存。转出来的是一条普通附件,和你自己把文件拖进来没有区别。
怎么办
- 粘贴之后一定要写一句话说明你想让它看什么,比如
这是烧录后的串口输出,一直在重启,帮我看看卡在哪。只有附件、正文空着是发不出去的,界面会提示请说明你上传的是什么、想让我做什么。 - 日志已经存成文件的,直接把
.log拖进输入框,效果一样。 - 或者只贴关键的那一段:从「复位」到「崩溃」之间通常就够了。
还不行的话,做这个测试
把那段日志粘进输入框,然后看输入框下方有没有多出一条 pasted-….log。
- 多出来了 → 转存成功,缺的只是一句说明。写上一句再发。
- 没有,而且点发送时提示
正文 12345 字,超过上限 8000 字。日志请存成 .log 拖进来,或分几条发。→ 这段文字不是粘贴进来的(自动转存只在粘贴那一刻发生)。把日志存成.log文件拖进输入框。
还是没解决
把这三样一起发给我们,至少可以减少一轮往返:
- 你做了什么——你在对话里说的那句原话。
- 你看到了什么——报错的原文,或者截图。别转述,原文最有用。
- 启动日志——板子还能连上 Console 就带一段。