从一句描述到可运行的板子

我们来完成一个真实的项目:一台超声波测距仪——每秒测一次前方障碍物的距离,把读数打到串口上。走完这一篇,你手上会有一块正在跑你自己固件的板子。这个项目在「公开共享」里有一个完整的发布版本,本篇的每一步都围绕它展开。

一览

屏幕前的时间大约 30–60 分钟
要花的钱大约 10 元
需要的软件Chrome 或 Edge。不用装 IDE,不用装编译器
做完你会有一块跑着你自己固件的板子,和一份可以继续改的工程

手上已经有板子了?直接跳到 Step 1 开说,只要在描述里点名你的板子型号即可。

Step 0 | 先备齐这些

先把下面这些备齐,后面每一步都要用到。

必须有的

一块开发板本篇用 ESP32-S3-DevKitC-1。ESP32-C3 的开发板也可以,只是引脚编号要跟着改。不要买 STM32、树莓派 Pico 这类——它们编不出固件
一根能传数据的 USB 线最容易踩的一处。充电线插上去板子电源灯照亮,但电脑完全认不出它,而且没有任何报错。用一根你确定给手机传过文件的线
Chrome 或 Edge 浏览器Firefox 和 Safari 没有浏览器烧录的能力
一个传感器本篇用 HC-SR04 超声波测距模块。如果想先验证整条流程,这一项可以稍后采购
杜邦线和一块面包板HC-SR04 和开发板之间要接四根线(VCC、GND、TRIG、ECHO)。本篇照片里用的就是面包板加杜邦线

不需要的

不用装 Arduino IDE,不用装 ESP-IDF,不用配交叉编译环境,不用会写 C++。编译在云端做,烧录在浏览器里做。

Step 1 | 说出你想做什么

打开 WhispBuild,首页中间就是一个输入框。

把这段复制进去(如果你已经买了其他板子,把型号换掉):

用 ESP32-S3-DevKitC-1 开发板和 HC-SR04 超声波模块做一个测距仪。 HC-SR04 的 TRIG 接 GPIO2,ECHO 接 GPIO1,模块按它自己的供电要求接,GND 与开发板共地。 每秒测一次距离,通过串口打印,格式 Distance: xxx cm。 测不到的时候也打印一行,不要静默跳过。 先不要联网,USB 供电就行。

这句为什么管用:它点名了板子和模块(不用替你推测型号)、给了两个引脚(省一轮来回)、交代了供电和共地的方式、也说清了这一轮不做什么。想知道怎么写出这样的描述,看 如何准确描述你要的设备

发出去之后,它会先跟你聊,确认要不要建一个项目。创建项目要你亲自确认——名字可能已经替你填好了,核对一遍再点。

看到什么算成功:浏览器进入了项目页面,左边是对话,右边是一个空的 Main 面板,上面写着「在左侧对话里描述你要做的设备」。

Step 2 | 看它给的硬件方案

进了项目之后,把你的需求再说一遍(或者它已经带过来了),它会开始出硬件方案。这一轮通常要一两分钟。

方案出来之后,对话里会列出它选了哪些器件、每个脚接哪里、有哪些约束。注意其中那条提醒——它给的引脚是照资料推的,接线前你要对着实物核一遍

右边的 Main 面板会同步出现两块内容:模块清单(它替你选了什么,是一份列表)和引脚连接(按照这个接线,是一张表)。这两块是你之后接线的依据。怎么读它们 →

看下来觉得没问题,就回一句确认;不满意就直接说哪里不对,比如 换成我手上的 ESP32-C3ECHO 我打算加一个分压电阻,帮我在方案里写上

看到什么算成功:它在对话里给出了完整的器件清单和引脚安排,Main 面板同步出现了模块清单和引脚连接。顶栏的「硬件方案已确认」要等方案冻结之后才亮,冻结是怎么回事 →

Step 3 | 按清单采购

方案定了,按照模块清单去采购。

这些可以先做:

  • 让它先把固件写出来并编译通过。编译不需要板子在手,见 Step 5;板子到手后直接烧即可。
  • 把 Chrome 或 Edge 装好。
  • 浏览一遍按现象查故障那一页。不用记住,只要知道有这么一页、大概有哪些条目。板子到手后真卡住的时候,你会知道去哪找。
  • 读一遍 如何准确描述你要的设备这是投入产出比最高的半小时。

板子到手后,先做一件事:把板子上印的型号和你在方案里说的那个对一遍。同一个系列下的不同板子引脚可能完全不同;型号不符时,接线、烧录、串口都可能出问题,而报错不会指向型号。

Step 4 | 插上,让电脑认出它

不要接传感器。第一次只插板子和线,把最基础的链路验通。

  1. 用那根能传数据的线,把板子直接插到电脑上(不要经过集线器)。
  2. 板子上的电源灯应该亮起来。
  3. 确认电脑认出了它:Windows 打开设备管理器看「端口 (COM 和 LPT)」;macOS 在终端里敲 ls /dev/cu.*;Linux 敲 ls /dev/ttyUSB* /dev/ttyACM*
ESP32-S3-DevKitC-1 接着 USB-C 线,电源灯亮着,面包板上是 HC-SR04
照片是全部接好之后的样子:USB-C 插在板子上,面包板上的 HC-SR04 也已经接好。这一步只需要插板子和线,模块接不接都不影响电脑认出它。要看的只有一处:板上的红色电源灯亮着

看到什么算成功:系统的端口列表里多出来一条,名字里带 USBCH340CP210usbserial 之类的字样。

什么都没多出来?先别怀疑板子坏了。先换一根线——充电线是这一步最常见的原因。还是不行,去 板子插上了,端口列表里没有它,那里有一个能分辨故障在哪一侧的测试。

Step 5 | 让它写固件并编译

回到对话,输入:

开始写固件吧。

接下来它会写代码、编译。这一轮要几分钟。界面上不会有百分比进度条——那个数字会是编的。取而代之的是它现在在做哪一步:分析需求、准备工具、生成固件并编译。

编译成功后,它会在对话里说清楚做了什么、构建配置是什么。顶栏右边的下载 / 烧录 / 打包发布三个按钮也是这时候才亮起来——没编译出固件之前它们是灰的。

看到什么算成功:对话里的进度标记走到 📦 编译通过,顶栏的「烧录」按钮从灰变成可点。

编译失败不是死路——它会读编译器报错、改代码,再编一轮。要是连着几轮都不过,看 编译一直不通过,那里有一张表告诉你哪几类需要你介入、哪几类不需要。

Step 6 | 烧进去

⚠️ 先做一件事:如果你开着 Console,去点「断开设备」。一个串口一次只能被一个程序占着。本页 Console 连着的时候「烧录」是灰的、点不动;被 Arduino IDE 或另一个标签页占着的时候按钮还亮着,但烧录会失败,而且报错完全看不出是这个原因。

  1. 确认板子插着。
  2. 点顶栏的 烧录
  3. 弹出的窗口里,等它把固件下载到浏览器(会显示 Firmware ready 和字节数),然后点 开始烧录
  4. 浏览器会弹出一个端口选择框——这是 Chrome 自己的窗口,不是我们的界面。选中你的板子,点「连接」。
  5. 等进度条走完。

看到什么算成功:进度条走到 100%,进度旁边的状态变成「烧录完成」;日志最后一行是一句英文 Flash completed with … for ….(中英文界面都是英文)。板子上的灯通常会闪一下——那是它在重启。

端口选择框是空的?那说明电脑根本没认出这块板子,问题不在烧录这一步,在 Step 4。去 板子插上了,端口列表里没有它

烧录会覆盖板子上原来的程序,不会弄坏板子。

Step 7 | 查看设备输出

固件已开始运行,但你还看不见它在干什么。接上串口就能看见。

  1. 切到 Console 面板。
  2. 点「连接设备」,波特率选 115200——默认约定就是这个,选错了读出来就是乱码;遇到乱码就点「断开设备」,重新连一次并把波特率选成 115200,仍然乱码看 串口连上了,但打出来的全是乱码
  3. 浏览器又会弹一次端口选择框,选同一个端口。
  4. 按一下板子上的 RST 键(复位键,丝印写的就是 RST),让它从头启动一次。

看到什么算成功:每秒输出一行 Distance: 45 cm。把手掌放到模块前面再移开,数字会跟着变。

调不通的时候,把日志回传给它

这是整个平台最有用的一个循环:Console 里选中日志 → 复制 → 粘到对话框 → 说明你希望它关注什么。它会依据日志修改代码、重新编译,你再烧一次。

这是烧录后的串口日志,距离读数一直是 0 或者超时。帮我看看是哪里的问题。 [把复制的日志粘在这里]

界面导览

到这里你已经用过整个界面了。回过头给你一张地图:左边永远是对话,所有事情都从那里发起;右边是四个可切换的面板,各回答一个问题

Main「它替我定了什么?」模块清单、引脚连接、固件已实现的功能、编译产物。详解 →
资料「我给了它什么?」原理图、datasheet 这类长期工程资料。详解 →
源码「它写了什么?」完整的工程目录树。看不看得懂都行,不看也能做完整个流程。详解 →
Console「板子在说什么?」实时串口日志。日志只留在你浏览器本地,不会上传。详解页里那张 Console 截图取自这个项目的联网版本,所以多出 Wi-Fi 和 IP 那几行;本篇第一轮不联网,读数那几行是一样的。详解 →

顶栏右边那三个按钮——下载拿固件文件,烧录直接烧进板子,打包发布把整个工程分享出去。它们要等编译出固件之后才会亮。它们左边还有一个高级,目前是灰的、不可点。

如果你熟悉软件开发

这一整套的心智模型是:对话 → 工程变更 → 编译 → 固件产物 → 烧录 → 设备。前四环在云端、有状态、可查;最后一环在你的桌子上,平台完全看不见

所以「编译通过」只证明代码层面 OK,不证明它在你板子上能跑——引脚接错、模块型号不符、供电不足,编译器一个都发现不了。真正的验收永远是 Console 里那几行输出。

接下来

你已经完整走通了整条流程。往下可以: