Skip to content

设备屏幕 ​

本页当前使用说明按源码中的统一编辑工作区、屏幕配置校验、触摸运行时和最近记录服务核对。运行设备是否已部署这些功能须另查固件/Web版本;页末保留2026年9~10月历史部署与失败记录,其中IP、串口、候选版本和“当前”均只指当时窗口,不作为本次设备状态或验收结果。

显示与硬件 ​

设备屏幕面向ESP32-S3,类型56表示图形显示外设,后端支持SPI ST7789/ILI9341和受控RGB ST7701,触摸可选GT911。SPI/RGB驱动、尺寸、初始化序列和板级配置必须匹配;通用esp32s3-F16R8镜像不自动等于RGB专用板固件。RGB 480×480需PSRAM,缓冲与内部RAM准入按实际构建合同核验。

先在高级配置用当前密码开启开发模式,在功能配置启用screenPanel,再添加显示外设并核对共享I2C/引脚资源。保存、应用、需要重启与驱动初始化失败是不同状态;触摸初始化失败时可保留只读显示,但不能操作导航与控制,不启用依赖触摸唤醒的自动息屏。

微雪Rev4/CH32V003的背光、蜂鸣器及GT911复位由同一显示后端管理,不能再新建同地址的独立输出外设。运行JSON已迁至固件仓库docs/device-test-configs/com8-com9-esp32s3-touch/config/。板卡名称、F16R8容量或GT911型号相同都不能代替引脚/板本核验。

一个工作区编辑 ​

页面采用统一工作区,不再要求在独立“预览/配置”两个Tab之间切换。左侧管理页面、模板和组件,中间画布显示草稿,右侧切换页面/组件/全局属性;手机使用可关闭的属性抽屉。“更多”提供布局导入导出、天气和记录设置,统一写入入口是“保存并应用”。

从组件库拖入或单击添加组件;选中后调整标题、来源、坐标和大小。画布更新不等于配置已经写入设备,Web中的开关、电机、执行一次和重启控件均只预览,不产生真实输出。

最多8页、24张卡片。新增组件寻找空闲位置;越界、重叠和最小交互尺寸会校验,不能靠缩小按钮绕过触摸尺寸要求。模板重新排版是明确重排整页,普通拖动不会挪动其他组件。布局草稿按设备MAC和修订隔离,不能只凭相同IP恢复到另一台设备;未保存的天气Key不进入本地草稿。

页面主题和背景默认选择“继承全局”:全局属性的主题、背景改动会同步到所有继承页,显式设置独立主题/背景的页面只影响本页。全局主题改变后某一页没有变化时,先检查该页是否使用独立主题,将其恢复为“继承全局”后重新保存;全局修改先作用于编辑草稿,保存并应用后才交给设备。

数据与最近记录 ​

组件来源与边界
数值、状态、图标已有采集/解析结果;过期、离线、错误和未采集分别展示
仪表一个有效数值,合理最小/最大值
柱状图最多4个不重复、同单位的来源
折线图最近10条有效数值样本;真实断档与不可比较的跨启动时间不连线
时钟设备系统时间及其质量,不用电脑时间代替设备时间
天气共享心知天气实况缓存
控制已获许可且仍有效的规则/电机来源

刷新画布只读缓存,不额外采集I2C/Modbus。采集规则需先产生数据;显示卡片不能替代采集、驱动或CAN协议解析。缺失值不补0,旧值不能假装新鲜。

历史最多24个来源、每源10点,设置在/config/point_history.json,数据在/data/point_history.json;采样先存内存,日志落盘活跃时约2分钟起搭乘同一Flash写窗口合并提交,日志静默时最迟3分钟兜底落盘,突然掉电可能丢失该窗口内尚未落盘的采样。重启恢复点有历史标记,不充当实时读数。选择“全部已开启记录的数值来源”不自动开启每条规则的recordHistory。删除趋势卡片不删除共享历史。编译能力以目标capabilities为准,C3裁剪历史时不能只开启界面开关来恢复接口。

天气 ​

当前统一天气入口只支持心知天气实况、简体中文与摄氏度;旧多供应商、三日预报和任意字段映射不是当前编辑器功能。配置城市和自己的Key,自动更新15/30/60分钟、默认30分钟;所有天气卡共享配置与缓存。Key已设置时留空保留,显式勾选清除并停用才删除。

先保存天气修改,再使用“更新天气”;手动刷新至少间隔5分钟。离线、未校时、OTA忙、内存不足及服务失败分别显示等待/错误,保留最近有效数据并标明过期。蜂窝网络不支持这一天气HTTPS路径。

迁移多个旧来源时选择保留来源;其他来源仍被规则引用时拒绝保存,不把它们静默改到另一个城市。天气凭据不进入布局导出或公开样例。

实体系统操作 ​

控件行为
亮度支持连续亮度的设备用0~100滑块;0保留最低可见亮度,独立息屏才关闭背光
立即息屏下次触摸只唤醒,不执行被触到的控件
自动息屏全局或受支持的选择控件设定;无可用触摸时不自动睡眠
触摸提示音开关控制是否反馈,时长在显示外设配置;CH32板载蜂鸣器没有音量滑块
控制确认间隔受限选择控件,配置范围15~600秒
重启全局allowSystemRestart许可及卡片确认都满足后才调度;OTA/关键写入期拒绝

触摸提示音时长在“外设配置 → 对应显示外设”中设置,常用档位为 20、30、60、100、150 ms,默认 30 ms;这是显示外设自身的保存入口,时长不是音量。现有配置缺少 touchBuzzerDurationMs 字段时按 30 ms 加载,接口接受 20~150 的整数毫秒值;不支持蜂鸣器的显示设备会显示相应能力提示。

微雪该Rev4实例的backlightActiveHigh应为false,100%最亮、0%约保留10%亮度;该值不能泛化到其他板。亮度、触摸提示音、息屏时间和确认间隔的实体调整可进入受控合并保存队列,约2秒无新调整后按修订写入;失败/冲突需核对应用状态,不能承诺每次触摸立即落盘或重启后必然保留。

五页以内可用底栏导航,更多页面通过“更多”列表;左右滑动切页,拖动滑块由滑块消费。趋势图本身不执行输出。显示/触摸/提示音和重启均需真实设备分别验收。

规则与电机控制 ​

通用控制卡只选择allowPanelControl=true且启用、指纹仍匹配的规则。内容变更、来源删除、许可撤销或配置修订变化后重新绑定,不允许卡片直接填写任意URL、Topic、脚本或寄存器。数值控制受来源类型、有限值、范围和步长约束,显示单位不自动换算倍率。

电机组件是独立的受控来源,提供正转、反转、停止、速度及脉冲控件,仍须通过现有电机服务、行程参考和反馈准入。首次或确认闲置期后重新确认,停止免确认。出现TRAVEL_REFERENCE_REQUIRED先检查实际参考位置;不能使用通用FC06规则绕开保护。命令被受理、寄存器读回和电机实际动作分别判断,断线后不自动重放未知结果的运动命令。

远程开关应等待真实回读匹配;无回读只显示已发送/未确认。当前不提供浏览器直接执行任意屏幕卡片的通用HTTP动作接口。

保存、导入与API ​

“保存并应用”协调天气、历史和布局,只有变化项写入,但不是跨文件原子事务。部分成功需按提示处理剩余项,已成功项可能已经生效。修订冲突返回409,先保留草稿、重新读取并合并,不能覆盖别人的新版本。

方法路径内容
GET / POST/api/screen-panel/config读取/保存布局,POST包含expectedRevision及config
GET/api/screen-panel/choices按kind/q/page/pageSize选择来源
GET/api/screen-panel/state质量、值、结果与应用状态
GET/api/periph-exec/history?sourceRef=...单来源最近记录
GET / POST/api/periph-exec/history/config历史开关与sourceAllowlist

读取需要登录,配置写入还需开发模式。screen_panel.json导出包含touchUiMigration=2,专用导入按目标修订重新校验;旧布局先在编辑器检查再导出。历史仅迁移采集设置,不包含样本。布局文件受专用事务及备份保护,不能用通用文件写接口绕过。保存不等于应用,换显示设备可能要求重启。

资源及验收 ​

screenPanel关闭不会自动停止独立采样/远程来源,也不会缩小已烧录Flash。RGB framebuffer、条带、内部DMA/bounce、任务栈和网络峰值须分别统计,PSRAM余量不能代替内部DRAM预留。内存保护暂停后的恢复需确认驱动重新启动;恢复暂忙不意味着配置丢失。

本页源码审核不涉及设备操作。最终仍需匹配固件/Web、具体硬件及负载的显示/触摸、数据新鲜度、配置恢复、故障路径和24/72小时验收;历史短测或其他S3的通过不能代替。

历史开发、部署及失败记录(2026-09~2026-10,非当前使用说明)

以下原记录保留用于追溯,包括已弃用的旧编辑流程、旧天气功能与旧配置参数,均不得覆盖上面的当前功能说明。其中“当前”“最新”“正在”等措辞仅对应所标注日期,不代表本次仍在监测、已完成部署或通过验证。

开发中:配置备份往返(2026-10-03,未测试/发布) ​

屏幕编辑器导出增加touchUiMigration=2标记。设备配置页面可导入此版本的screen_panel.json,使用目标当前修订保存,服务端重新校验布局和引用;旧布局须在编辑器检查后重新导出。保存与应用分别确认,更换显示目标可能需重启;丢响应不会自动重发。点位历史只导入采集设置,不迁移历史样本。保存失败保全、修订耗尽及回读损坏回归已准备,尚待集中软件验证,不改变下方历史部署结论。

2026-10-02 软件修复验证 ​

16:20接续:下述GT911双地址与草稿刷新修复已合入主目录,GT911保留了另一项启动配置重试/控制器尺寸修改。合并后尚未重新测试;r15等待候选已取消,按最新要求待开发完成再集中测试。该状态不改变本页其它独立候选的部署证据。

14:35 新增准备区验证(尚未推广主源码,也未部署):GT911 在复位或探测前同时保留 0x5D/0x14,消耗共享管理器两槽;地址冲突/容量不足时不操作触摸 GPIO,运行期逐事务核对归属,退出及析构清理两份租约。完整真实后端/管理器与相关离线回归 82/82 通过。另修复编辑器 160ms 草稿去抖尚未结束就刷新会丢失最后编辑的问题,页面离开同步完成待保存内容;保留 MAC 隔离、原 revision/基线和 history 草稿,不保存现场配置。24 次 loopback 浏览器检查及两项源码/压缩版测试通过,原 r14 失败保留。两项仍等待冻结后推广、完整新候选和实物验收,不能据此更新下方部署结论。

GT911 的 I2C 读取现在只在完整样本校验后更新结果,短写、缺字节和异常读值按失败处理,异常排空次数有上限。RGB 背光/蜂鸣器控制取得共享总线地址归属,每次事务复核;初始化冲突或失去归属后的清理不会写其它合作客户的地址。控制写入失败不推进软件影子。

准备区及主源码各 70 项离线回归通过,覆盖完整 GT911、RGB 多配置、PCF 扩展 IO 和共享总线生命周期。对应新候选完整门禁、RGB 专用构建、设备触摸/背光/蜂鸣器及长期运行仍待验收,不能沿用下方历史部署结论。I2C 失败不保证硬件已回滚;现场输出仍需核验接线与安全条件。

当前部署与验收状态(2026-09-22) ​

设备屏幕目前只面向 ESP32-S3;页面布局、显示驱动及触摸配置仍保持通用,不按具体开发板建立独立产品版本。配置文件决定已支持功能是否默认启用,实际启动还需通过硬件和资源检查。不同芯片必须使用对应目标镜像。

COM8 r6应用与匹配canonical r3 Web已写入校验,用户确认画面“稳定了”;Web、面板API、预览及数据短测通过。SHT30改8秒且TTL不变后,180秒严格鲜度/一致性/传输均通过,但单机长测第2轮已有真实资源传输失败,后续恢复和等待时长均不能抵消。COM15另一任务的新field-r2已部署并通过短时检查,外围实物尚未全验收;C3最后已部署为r3,经典ESP32为r4且整体Web仍失败。主任务正在进行r8回归和C3/COM16目标构建,收益须部署实测。实体点击、滑动、亮度及四台长期稳定性均未完成:

2026-09-22 01:48:50(UTC+8)长测更新:第2轮/js/chunk-3-state.js?v=20260921-2341-93cd18cf报net::ERR_CONTENT_LENGTH_MISMATCH,并有一次HTTP探针超时后重试,登录13,447ms。第3轮12/12菜单且错误恢复为0,但探针7,176ms。artifacts/touch-soak-20260922-r6/fleet-stability-verdict.json为false,除0.167小时不足24小时之外,还有1次探针瞬时失败、1次资源请求失败、1条console error和探针p95超过5,000ms。该错误不属于旧页导航取消;恢复不抵消此前失败,前三轮无重启/503,原监测继续且根因待查。

设备当前地址最后校验通过的部署
COM15 普通 S3192.168.5.18field-r2 canonical,3,902,896 B,58个Web文件,写入/校验及短时身份/输入/9600/Web manifest检查通过;10个非Web文件中明确更新3份外设/执行/协议配置,外围实物未全验收
COM4 C3192.168.5.50canonical r3,3,314,672 B,51 个匹配 Web 文件,保留 9 个非 www 文件;新版 HTTP 9/9、桌面/手机菜单 14/14 通过
COM8 触控 S3192.168.5.52RGB r6,3,829,872 B,app1与canonical r3的58个Web文件已校验;保留38个非Web文件和app0,revision10;短时画面/Web/8秒采样通过,长测第2轮真实资源失败
COM16 ESP32192.168.5.51r4应用3,318,496 B已校验,保留r3 Web/文件系统;MQTT片段及后续mobile/features超时,整体失败;r8构建/部署复验待完成

COM15新证据为固件仓库artifacts/com15-field-release-20260922-r2/build.json、com15-field-deployment-20260922-r2.json、com15-field-verification-20260922-r2.json与com15-field-final-check-20260922.json,sourceStable=true、SHA256 298f4d0f039ee6b682455632c5ecc8b2bafff5f99eace7c17aa0c482772a4db7。首次field版本worker栈崩溃保留为历史;r2短时无崩溃,02:07:39地址仍.18。地址1/5/6超时、A1低输入与实物动作由该现场任务跟进,不能把部署成功扩大为全部外设通过,也不沿用旧r3全菜单证据代表新版本。

本轮 r6 的 artifacts/resume-20260922-COM8-r6-http.json 为 9/9、最长 1,371.5 ms;menus/report.json 为 24/24、零 HTTP/页面/请求错误,登录 10,005 ms、最慢菜单 5,759 ms;同前缀 panel-api.json 15 项、panel-browser/report.json 的预览/草稿添加/手机布局通过且未保存。live-data.json 确认 NTP、天气、SHT30 两通道及各 10 点历史,布局 revision 10。这些是短时实测,不能替代长期运行或全部实体操作。

同前缀 consistency.json 120 秒检查同组一致性通过、混代与请求错误均 0,各通道 13 个新点、最大间隔 11,679 ms,但各出现 2 次 stale,该窗口严格鲜度失败保留。sample-margin.json 已确认仅调整 collect_sht30 为 8 秒采样并保留 before/after:TTL 仍为 10,000 ms,动作、其他规则和电机采集间隔未改。采样频率增加 25%,给调度留下余量,不延长旧值有效期。公开模板同步该规则名称和周期,后续180秒复测见下段。

后续同前缀 consistency-8s.json 的 180 秒窗口完成:50 次响应、两通道各 24 个新点、最大间隔 8,868 ms,无 stale/混代/请求错误,严格鲜度、一致性和传输均通过。8s-serial.log 无复位/panic,worker 栈最低剩余 2,092 B,但有一次 log_flush 2,513 ms 超预算告警,保留并继续监测。

COM8单机长测于2026-09-22 01:33:49(UTC+8)启动,PID10344,目录artifacts/touch-soak-20260922-r6,启动和stdout/stderr在同名-prepared目录;每300秒/289轮、要求至少24小时。首轮12/12菜单与零错误只代表该轮,第2轮失败保留。02:08:50 verdict实测0.500小时,仍有探针瞬时失败、资源/console错误和p95超标,整体false。原监测继续,其他三台未纳入,旧时长不拼接,24/72小时均未通过。

完整 Host 回归见 artifacts/resume-20260922-r6-host-unit.log:681项、680通过、1项因Windows符号链接权限跳过,199.813秒、退出码0。仍区分本地测试、短时实机和长稳结果。

触控恢复证据为固件仓库 artifacts/resume-20260922-COM8-priority-serial.log、resume-20260922-COM8-priority-http.json 与 resume-20260922-COM8-preupgrade-history.json。HTTP 静态资源最长 1,678.7 ms、全部请求最长 2,595.8 ms;历史恢复 passed=true 仅代表这次受控重启,突然断电、持续鲜度、实体交互及 24/72 小时仍须分别验收。

新触控 r6 为 sourceStable=true、sdkRecompiled=false,BIN 3,829,872 B,SHA-256 31da1e3f048b37819108260ce180d23858b35a23798117601eb7ddc551599007。温湿度同组原子提交与面板一致快照修复的 30 项测试、Arduino String 兼容重测,以及网络响应 34 项测试通过;SDK、RGB 时序和 TTL 未改。它已完成写入校验,运行实测仍待收口,不把本地测试或写入成功当作现场功能验收通过。

前两次 r6 尝试分别在文件系统备份传输和下载连接失败,resume-20260922-COM8-r6-all-write.json、resume-20260922-COM8-r6-all-retry-write.json 保留为未开始写入的历史。随后 artifacts/resume-20260922-COM8-r6-manual-write.json 为 written=true、verified=true、writeStarted=true,完成应用与 Web 更新并保留 38 个非 Web 文件及整个 app0,app0 前后 MD5 相同。resume-20260922-COM8-r6-exit-download.log 记录确认设备身份后主动 watchdog 复位以退出下载模式;当前不再等待 BOOT,待新版本运行复测结果。

COM16 r4 的写入与文件系统保留校验见 resume-20260922-COM16-r4-write.json;菜单报告 resume-20260922-COM16-r4-menus/report.json 虽渲染 14 页,仍有 MQTT 片段资源约 8 秒请求超时,整体失败。内存保护期间 worker 曾恢复延期,但后续健康状态确认已恢复,不称为永久停采;下文 r3 的失败是保留的历史。

新版 COM15 顺序 HTTP 最长 4,006.5 ms,登录 5,430 ms;C3 顺序 HTTP 最长 813.6 ms,登录 4,716 ms。两台完整菜单均 14/14,HTTP/页面/请求错误均为 0,属于短测通过;仍不能宣称持续性能或长期稳定。COM16 顺序 HTTP 最长 1,480.6 ms,但完整浏览器在 desktop/device 遇低内存 503 及两个连接超时,登录 9,926 ms,仍未通过。COM8 异常见下段。不能用升级前短测、顺序请求成功或约 25 小时 uptime 替代完整浏览器与有效长测。地址由 DHCP 分配,访问失败先核对当前 STA 地址。

证据归档在固件仓库 artifacts/final-release-20260921-r3/builds.json;普通三机分别为 artifacts/resume-20260921-COM15-final-write.json、resume-20260921-COM4-final-write.json、resume-20260921-COM16-final-write.json,均为 written=true、verified=true,保留启动、分区表、NVS、OTA 选择与非 www 文件。运行证据为 resume-20260921-COM4-postfinal-http.json、resume-20260921-COM4-postfinal-menus/report.json 及对应 COM16 文件。

COM15 新版证据为 artifacts/resume-20260921-COM15-postfinal-http.json 和 resume-20260921-COM15-postfinal-menus/report.json。COM16 在 r3 历史窗口的无登录/无 JSON 静态资源阶段也复现内容长度不匹配,内部空闲降至约 7.3 KB 并触发严重保护;依赖补丁 34 项本地测试通过后已进入 r4 部署,但仍有资源超时,结果见本文开头。诊断见固件仓库 artifacts/COM16-postfinal-diagnosis-20260922.md。

RGB r3 应用仅更新 app1,写入与校验均通过,app0 和整个现场文件系统 MD5 保持一致,SDK 未变。部署后串口约两分钟内 SHT30 按约 10 秒采集,但两次 HTTP 新鲜度检查分别在 3 和 7 个样本后连接超时;随后主 CSS 仅收到 995 B 就在约 15.55 秒超时,串口复查仍出现多次 Power-on reset。固件仓库证据为 artifacts/resume-20260921-COM8-app-r3-write.json、resume-20260921-COM8-r3-http.json、resume-20260921-COM8-r3-recheck-serial.log、resume-20260921-COM8-power-reset-recheck.log。已请求现场核对 USB 拔插、供电和电机连接,复位原因未定,不能写成恢复或稳定。

COM8 后续约 120 秒轮询中温湿度各有 12 个新样本,最大间隔 10,460 ms,但湿度有一次 stale,resume-20260921-COM8-freshness-r3-recovery.json 仍为失败。受控重启前两通道各有 10 点,重启后恢复点请求超时,resume-20260921-COM8-prefinal-web-history.json 也失败;不能宣称历史恢复通过,也不能仅凭超时判定丢点。短时重新可访问不抵消早期复位/超时。COM8 的匹配新版 Web、实体显示/触摸/亮度/蜂鸣器以及最终持续采集和重启恢复仍待验证。

2026-09-22 较早被动串口约 25 秒内记录 11 次 Power-on reset,期间未主动发送重启请求;证据为 artifacts/resume-20260922-COM8-passive-serial.log。随后用户重新插拔数据线并确认画面正常,本文顶部记录短时恢复。失败证据继续保留;不能根据复位标签或拔插后的时间关联,直接断言供电、线缆或某个软件模块就是根因。

canonical r2 的 Web gzip 曾超过预算数 B,失败记录保留;请求治理代码再减少约 222 B 后 canonical r3 三目标构建通过,没有提高预算。下述完整本地回归对应此前冻结快照,后续修改仍需受影响检查及最终运行发布核验。

9 月 20 日普通 S3/C3 和触控 S3 两组长测均已停止,实测窗口约 2.583、1.781 小时,未完成 24 小时验收;自动跟进已暂停。C3 503、降载与请求失败,触控 S3 的原始 SSE 失败及温湿度间歇 stale 全部保留,COM16 未参与原长测,不可把三台结果写成四台。后续成功短测不能抵消这些失败记录;72 小时验收也未完成。

持续浏览时温湿度不更新的主因已定位:Web 每次请求续期 3.5 秒前台保护并暂停采集定时调度,约每 3 秒一次的状态轮询会不断续期保护。串口和 HTTP 交叠采样已验证这种停顿,不能把屏幕上的旧值当作实时数据,也不能仅归因于传感器缓存。

本轮修复在 PSRAM 可用、内部 8-bit 空闲至少 30 KiB(30,720 B)、最大连续块至少 8 KiB(8,192 B)且不处于严重内存压力时保留采集调度,并允许短时压力恢复后在持续浏览中重新采集。无 PSRAM 的 C3/经典 ESP32 仍保留前台让位;不能宣称所有设备浏览期间采集均不受影响。已有调度器/worker 内存保护继续有效,没有修改 SDK、RGB 时序或采集周期。另有缓存边界补充修复:规则请求本轮新样本,同轮温湿度复用,驱动最低间隔、真实采样时间与过期阈值不变。

前台让位、看门狗、内存恢复及采集间隔定向测试 14/14;完整 Native 2,371/2,371;本地 contracts、隔离 static/meta 均通过。静态链含 11 个 Web 能力构建、S3/C3 smoke、gzip 与发布一致性;S3 Web 约 315.0 KB,未提高既有 315.0 KB 预算。证据归档在固件仓库 artifacts/resume-20260921-web-sampling-tests.log、resume-20260921-native.log、resume-20260921-contracts.log、resume-20260921-static.log 和 resume-20260921-meta.log。这些不替代同版实机采集新鲜度、完整浏览器及长稳验收;下文 r7/r8/r19 与旧地址均为历史证据。

功能与硬件边界 ​

设备屏幕把固件已有的数据和操作显示在物理屏幕上。用户在 Web 中选择组件、绑定来源和调整位置;设备用内置绘图代码生成背景、图标、卡片和基础图表,无需制作整屏图片或编写 UI 脚本。内部功能键仍为 screenPanel,已有 API 和配置文件路径保持兼容。

设备屏幕仅面向 ESP32-S3,在该芯片范围内通过通用配置支持不同开发板。系统仍是一个固件产品,由配置按需启停能力。当前后端包含 SPI ST7789 / ILI9341,以及 ESP32-S3 esp_lcd RGB ST7701 测试后端,可选触摸为 I2C GT911;控制器、接线、尺寸及参数必须匹配。SPI 配置的短边不能超过 240、长边不能超过 320。RGB 的 st7701_type1 初始化档只接受 480×480,需要 PSRAM;其他控制器/初始化序列不能直接套用。微雪 ESP32-S3-Touch-LCD-4 Rev4 已完成代码接入;2026-09-22 的最近触摸应用为 RGB r6,部署与运行验收边界见本文顶部。此前 r19/r8 Web 及 RGB r3 的短时串口、天气、菜单和现场画面结果属于各自版本证据,不能作为 r6 硬件验收。其他触摸控制器、多块物理屏幕、图片上传、任意 SVG/HTML 和用户脚本式 UI 不属于当前实现。

ESP32-S3-F16R8 只表示芯片、Flash 和 PSRAM 资源规格,不代表任意 S3 屏板都能直接使用。新增 RGB 配置首先以微雪 ESP32-S3-Touch-LCD-4 Rev4 为实测目标,使用 CH32V003 0x24 管理复位/背光,并与触摸和 SHT30 共享 I2C。ESP32-4848S040 等同分辨率屏板仍须核对初始化序列、时序、引脚和控制电路,GT911 可复用不等于整板已兼容。

Rev4 参数已对照微雪产品说明、V4 资料入口、Arduino 说明和官方仓库,本轮源码基线提交为 aa604c132ef2442013ac93910c65789763329c05。在线产品页包含早期版本图表,Rev4 电气细节必须以 V4 原理图、当前官方仓库和实物丝印共同确认,不能混用旧 TCA9554 与 Rev4 CH32V003 接法。

框架版本也不能混写:微雪 Arduino 网页仍列 3.0.7,当前官方仓库的 Build Examples CI 使用 3.3.11,而 FastBee 当前候选固定为 Arduino-ESP32 3.3.8 / ESP-IDF 5.5.4。本轮只是参考官方引脚、初始化和缓存配置,没有把 FastBee 升级到 3.3.11;任何候选都要记录实际 core/IDF、官方提交及生效的 Flash/PSRAM 配置,不能跨版本沿用结论。

控制扩展的初始化参数分为复位、使能、背光、蜂鸣器和额外低电平掩码,所有掩码必须互不重叠。Rev4 蜂鸣器为 bit 6,目标配置使用 controlBuzzerMask=64;controlInactiveMask=0,系统使能仍为 bit 5。蜂鸣器由显示后端共享的 CH32V003 输出 shadow 控制,不能再创建一个独立外设直接写同一个 0x24 地址。通用默认值仍为 0,这不是其他板的通用取值。r17 部署文件已把设备配置从历史 0/64 调整为 64/0,并确认除此之外的 JSON 内容相等;r18 firmware-only 更新保留该配置。启动后有界短响和异常回低电平仍未验收。现场曾出现持续鸣响,字段、本地测试和写入校验都不能替代匹配配置后的实体复验。

触摸是可选能力。显示初始化成功但触摸初始化失败时,固件记录告警并保留只读显示;此时页面可以继续展示信息,但不能通过触摸操作导航、开关或场景。未配置触摸或触摸未就绪时不自动息屏,避免没有本地唤醒入口;配置的闲置息屏时间仅在触摸已就绪时生效。显示本身初始化失败仍会明确报告错误,不作为只读显示成功。

是否提供菜单和驱动取决于固件编译能力。esp32-F4R0 为保持既有功能并满足应用分区大小,当前不编译面板和远程资源,但仍编译最近记录;esp32c3-F4R0 的 4 MB 单应用槽更紧张,当前同时裁剪面板、面板 Web、最近记录和远程资源,保留实时采集、Modbus、外设执行及普通 Web。运行时关闭功能只能释放相关运行资源,不能缩小已经烧录的固件。

历史发布状态(2026-09-20) ​

本节仅保留 9 月 20 日的部署与失败证据,以下“当前”“最新”以当时窗口为准;现时状态以本文开头为准,旧 DHCP 地址不作为当前访问地址。

2026-09-20 最新状态:触摸固件最后成功写入版本为 r19,仍使用两块各 16 行、合计 30,720 B 的内部 bounce。构建 sourceStable=true、sdkRecompiled=false、networkDependenciesMatchCanonical=true;固件 3,819,712 B,SHA-256 5d7f322d7dda7628e8cb0f3f24c0e983b3fe5d7c122cfb6a75463e2dee855173。COM8 app1 已写入,随后匹配 r8 Web 保留式写入报告 written=true、verified=true;恢复 app0 和现场文件系统保护区均未写,写前/写后 MD5 不变,38 个非 www 文件及蜂鸣器 64/0 等现场配置均保留。

r19 的 120 秒串口短测显示设备当时连接 192.168.5.33,NTP 触发、SHT30 连续采集、RGBSCAN 扫描与帧计数一致,未记录 panic 或重启。随后 COM8 5/5 HTTP、桌面/手机 24/24 菜单、主样式 1,594 条规则和 revision 9 的天气/系统预览均通过;仅 collect_sht30 规则允许面板调用,真实规则指纹绑定测试 26/26。最终定向 Host 35/35、主样式合同 3/3 通过;这些机器证据不能替代实体显示、触摸、蜂鸣器或长稳验收。

升级前只读报告 screen-live-state-r16.json 与 screen-live-data-r17-before.json 对应 r16 固件,而不是当前运行证据。r19 已在冷启动 13,584 ms 后自动取得北京多云 26 °C,NTP、SHT30 温湿度和两条十点趋势均为 good,没有手动测试读取或重新设置 Key。测试凭据具体值不会写入文档、公开模板或日志;设备读取接口只返回掩码,后续复测继续确认状态和错误日志不回显密钥。

r17 的完整触控 Web 验收未通过:登录、根页和 CSS 传输先后失败;构建日志显示依赖补丁脚本误查默认 .pio/libdeps,遗漏实际 C:/p12/libdeps 中的 AsyncTCP/ESPAsyncWebServer。r18 修正目录解析并只重建应用,SDK、RGB 时序和显示参数不变;9/9 HTTP 200、完整 CSS 24,244 B、设备屏幕浏览器及桌面/手机各 12 个菜单全部通过,零 HTTP、页面与请求错误。r17 的 Web 故障已闭环,但这些短时结果不代表实体屏或长期稳定。

r19 首份组合实时数据脚本在启动约 17 秒、SHT30 尚未产生首个样本时失败;稍后的 ready 报告确认天气、NTP、SHT30 与两条十点历史均为 good,闭环该启动窗口。浏览器首轮根页出现 ERR_CONTENT_LENGTH_MISMATCH;后续 r8 Web 复测功能/菜单通过,历史截图缺主框架 CSS窗口仍保留,不能单凭早期截图或菜单通过宣称实体显示稳定。

历史 r15 使用 32 行、61,440 B;冷启动时内部空闲 25,524 B、最大块 7,668 B,Wi-Fi ESP_ERR_NO_MEM、SHT30 async_unavailable,用户看到快速上下抖动和重影,运行验收失败。r16 将缓冲减少 30,720 B;Wi-Fi 恢复后首个 30 秒窗口内部空闲 41,556 B、最大块 31,732 B,分别比 r15 增加 16,032 B 和 24,064 B。r15 证据继续作为历史保留;r16 的短时实体结论来自用户观察,机器短测本身不能证明视觉稳定,更不能代替完整负载或长期验收。

历史记录:r14 当时在 COM8 写入并回读一致,现场配置和 Web 文件系统未被部署流程替换;失败后仅将应用回退到 rgb-recovery-v1 并再次完整回读。回退后的短暂下载模式、黑屏和 USB 重枚举均保留为排障证据,但已被上方冷断电后的当前状态取代。证据为固件仓库 artifacts/COM8-r14-write-20260920.json、rgb-xip40-v12-revalidated-r14.json、touch-r14-single-session-runtime.log、artifacts/COM8-r14-app-rollback-20260920.json。

其他三机已部署 canonical r7。普通 S3 .22 与 C3 .34 的 r7 真实浏览器桌面/手机菜单各 14/14 通过,且无页面或 HTTP 错误;它们仍不等于长期稳定。COM16 .32 的完整菜单窗口出现低内存 503,属于资源风险窗口,不能写成流畅通过。两机首轮长稳监测仅 1 周期(0 小时):S3 无错误,C3 出现 2 次 503、4 次 HTTP/请求错误和 2 条 console error,自动判定未通过;24/72 小时仍待完成。

截至 2026-09-20,设备屏幕源码已冻结并完成主机端回归:Host 662 项中 661 通过、1 项因 Windows 符号链接权限跳过;Native C++ 2,371/2,371;设备屏幕离线浏览器专项 10/10;完整离线浏览器矩阵上一轮为 140/140;Web 质量门禁 314.9/315.0 KiB;保留现场文件的部署 helper 合同 57/57。canonical r7 的 S3、C3、ESP32 三目标已构建成功且 sourceStable=true。主机端回归和构建结果不代表触摸屏已通过实体验收;r17 的 Web 失败已由 r18 同设备复测闭环。

COM15 已正式写入 canonical r8 固件与匹配 Web;COM4、COM16 保持已校验的 canonical r7。COM15 .22 r8 与 COM4 .34 r7 的严格浏览器检查均为桌面/手机共 14 页、主样式 1,594 条规则可读、零失败和零写入。触摸 r19 已写入 app1,r8 Web 也已保留式写入并校验;.33 5/5 HTTP、24/24 菜单、天气/系统预览、revision 9 数据链和 26/26 规则绑定测试通过,但实体显示/触摸、实体天气、蜂鸣器和长期运行未通过验收。r16 的 NTP、十点趋势、天气绑定与用户短时显示稳定只保留为升级前历史;r12/r13 构建拒绝、r14 回退、r15 运行失败和 r17 Web 失败记录继续保留。

触摸候选始终基于 pioarduino 提供的官方 Arduino-ESP32 3.3.8 / ESP-IDF 5.5.4 SDK 开发。文档中的“SDK 重编”是让官方源码组件按目标 sdkconfig 编译期选项在隔离目录中重新生成,不是修改、升级或私有分叉 SDK,也不会覆盖 PlatformIO 的共享 SDK 安装。隔离 diagnostics __wrap_log_printf 条件补丁和 builder 适配只解决当前 PlatformIO/pioarduino 完整重编路径的兼容问题,不改变显示时序、显示/触摸驱动或板级硬件逻辑;共享包与隔离副本均有摘要和恢复检查。

部署前 41 请求与 2026-09-20 12:48 四机刷新只作为历史连通性证据。当前 .22 S3 r8 与 .34 C3 r7 的严格浏览器桌面/手机共 14 页及主样式检查均通过;.33 已完成 r8 Web 保留式写入,随后 5/5 HTTP、24/24 菜单、revision 9 天气/系统预览和 26/26 规则绑定测试通过。两次早期 COM8 r8 Web 写入连接失败、written=false 的窗口仍保留历史;用户报告实体黑屏恢复及卷边/漂移,不能声明实体显示/触摸通过。COM16 .32 的完整菜单窗口出现低内存 503;普通 S3/C3 首轮监测也因 C3 503/请求错误未通过,24/72 小时监控尚未完成。

配置流程 ​

2026-09-20 晚间配置复查:现场 revision 9 已把天气并入首页,并提供三档亮度、息屏、提示音、确认重启和 SHT30“采集一次”。后续连续只读采样发现温湿度间歇过期,两个新点曾相隔约 58 秒,超过规则的 10 秒周期;正在区分采集调度与屏幕快照更新,不能把此前单次数据正常理解为持续新鲜度验收通过。触控板修正菜单目录后的独立 24 小时 Web 监测已启动,首轮 12/12 菜单通过、零 503;实体显示、触摸、亮度及蜂鸣器仍须现场确认。

入口负责内容
外设配置添加显示设备,配置 SPI、背光、可选触摸及引脚/总线预检
外设执行、通信协议配置采集规则、允许面板调用的控制与天气/远程来源
设备屏幕将已有数据/控制放入页面,调整主题、模板、位置和尺寸

先在“功能配置”开启 screenPanel,保存并重启。默认关闭;开启开关不代表屏幕已经连接成功。页面分别报告配置是否保存、是否应用、是否需要重启及驱动错误。无屏时可以配置和预览,物理显示仍需实际硬件验收。

进入页面后直接显示“预览”和“配置”两个 Tab,不再用大标题、说明卡或重复工具栏占据首屏:

  1. 在“预览”中管理页面、打开组件库、查看设备画布并直接编辑;可添加数据、控制、时钟、天气、页面入口或系统组件,拖动、缩放、吸附并修改选中卡片属性。
  2. 预览与编辑使用同一画布;保存前显示草稿,已保存设备画面可展开对照。Web 预览中的开关、数值、蜂鸣器和重启控件不会执行真实操作。
  3. 在“配置”中选择显示设备、主题/背景、默认页面、亮度、自动息屏、系统操作许可和最近记录,并可前往外设配置、外设执行及天气/远程来源。
  4. 保存后查看“已保存 / 已应用 / 待重启 / 应用失败”;硬件参数变化需要重启时按提示处理。

使用 CH32V003 控制扩展时,显示设备独占整个控制地址;复位、使能、背光、蜂鸣器和需要保持不活动的输出必须在控制掩码中明确声明。方向/输出寄存器通过软件 shadow 维护,首次采样输入电平保留未声明位的锁存值,但未声明引脚仍设为输入,无法继承旧固件未知的输出方向。不能把同地址的其他输出交给另一外设同时控制。TCA9554 使用真实寄存器读改写,语义不同。Rev4 模板使用 controlBuzzerMask=64、controlInactiveMask=0、controlTouchIntMask=4;蜂鸣器、背光及触摸联动仍须在最终部署版本做实体复验。GT911 产品编号可读、全零配置校验和为零都不能作为触摸已就绪的证据。

默认模板可以快速生成环境监测、趋势、天气、控制和系统操作五页初始草稿,也可以单独添加页面。五页只是模板示例,不是固定界面或数量限制;用户可自行增删、改名、调整页面顺序及卡片布局。天气屏绑定天气来源;采集屏从现有 I2C、Modbus 或其他统一采集结果中选择数值;控制屏绑定远程开关、场景或允许面板调用的本地规则。模板和 Web 预览只编辑布局,不执行真实动作。

当前最多 8 页、共 24 张卡片。逻辑画布与物理分辨率分离;小屏幕仍要保证文本可读和按钮易点。设备支持触摸切页、滑动和按钮;无触摸设备不会启用需要触摸才能唤醒的自动休眠。

没有天气 API 凭据或尚未选择执行规则时,天气卡和控制卡允许保存为空绑定占位,显示待配置状态;它们不会显示伪造天气、把未知开关当作关闭,也不能执行动作。微雪 Rev4 公开模板现在为首页、趋势、场景与开关、系统操作四页,共 18 张卡片;首页合并天气、NTP 时间和温湿度,天气不再独占一屏。“采集一次”绑定允许面板调用的 SHT30 采集规则;开关与场景仍待绑定。现场 revision 9 保留既有电机页,为五页、24 张卡片,电机运动规则保持禁用。这些只是可编辑布局,用户可自由增删;公开模板不包含现场天气密钥。

该现场电机已确认地址 8、9600、8-N-1,用户提供的协议为 FC06 向寄存器 0/1/2 写 1 控制正转/反转/停止;FC03 以数量 1 分别读取速度 5、脉冲 7、计数 4、波特率编码 10。示例使用四个独立通用采集任务和四个单任务采集动作,避免自动合并扩大读取范围;通用 FC06 外设执行规则复用协议生成的 type=51 虚拟外设。显式填写已确认的寄存器表,不依赖隐式默认表,不走内置 motor 的连续区间 readStatus,不启用可能额外写脉冲的软限位。所有参数和动作都可按其他设备协议修改,不增加电机专用面板逻辑。

当前硬件断开,读取任务和采集规则默认禁用;正反停三条写规则默认禁用且不允许面板调用。没有真实采样时不创建速度/计数卡,也不显示假值。启用控制需用户选择规则并显式授权,经专用 API 保存绑定;正反转建议二次确认。默认没有地址/波特率修改规则,不试运转。示例帧中的地址 01 和 CRC 不可直接照抄,固件按实际地址 8 生成 RTU 帧。不再接入的 PM 任务、规则和来源已从公开模板删除。

系统操作与网络边界 ​

系统组件使用固件白名单,不接受 URL、任意寄存器、命令或脚本:

动作行为与限制
设置亮度卡片保存 1~100 的固定值;0 不作为亮度动作,灭屏使用独立息屏
立即息屏关闭背光;下一次触摸只唤醒,不同时执行被触到的卡片
蜂鸣器提示音只执行短响,异常路径自动关闭;后端没有蜂鸣器能力时不可用
重启设备同时要求全局许可和卡片确认;OTA/关键写入期间拒绝

微雪 Rev4 示例及现场 revision 9 提供 25%/70%/100% 三档亮度、立即息屏、提示音和确认重启;默认亮度 70%,自动息屏为 0 秒。该示例显式设置 allowSystemRestart=true 并保留卡片二次确认,固件通用默认仍为 false;无需重启入口时删除卡片并关闭全局许可。亮度按钮改变当前运行亮度,重启后的默认亮度仍在 Web“配置”中保存。触摸屏不提供物理屏配网或 Web 网络配置快捷入口,不在屏幕上输入、保存或回显密码,也不从屏幕任务直接同步重启网络。后续若增加本地配网,必须通过主循环队列处理网络对象切换,并单独验证失败回退和安全 AP。

主题有深色、浅色和高对比度;背景有纯色、轻渐变和网格,均由代码绘制。Web 预览与导入只编辑草稿,点击其中的开关、场景或重启卡片不会执行真实操作。

数据绑定与图表 ​

内容来源与限制
数值、状态、图标已有采集结果、Modbus 解析字段、远程状态和兼容设备指标
仪表单个有效数值,必须设置合理的最小/最大值
柱状图主来源加最多 3 个同单位数值来源;每项显示值、状态和采样时间
折线图某个采集点最近 10 条有效数值样本
天气心知或兼容自定义 API,显示天气图标、温度、城市和可用预报
时间、日期复用已同步的系统时间、NTP 和时区;未同步时显示未知
控制、场景明确允许面板调用的外设执行规则;支持开关、执行一次及受限数值控件

刷新界面只读缓存,不会因翻页或打开浏览器额外轮询 I2C/Modbus。I2C 传感器需要已有采集规则先产生数据。CAN 当前没有完整驱动/解析链路,不能仅添加卡片就读取 CAN;后续接入统一采集结果后可以复用面板。

未采集、过期、离线和错误分别展示。缺失值不显示为零,旧值不冒充实时值,未知开关不当作关闭。删除/禁用来源会使绑定失效;来源映射、单位等定义变化后不混合新旧图表序列。

新增柱状配置在组件设置中选择数据来源,再选择“对比来源 2~4”,不需要修改寄存器或复制采集任务。来源必须都是数值且单位相同;模板会给多项对比增加高度,画布模式需留出提示的最小尺寸。T+12s 表示本次开机后第 12 秒的采样,未校时也不会冒充日历时间。不同卡片即使共享主来源,也分别保留自己的比较项。

Web 时钟预览使用设备状态返回的时间及日期,遵循设备时区,不使用电脑时间替代。设备未校时显示“时间未同步”;读取失败时保留最后设备时间并标明“设备时间未更新”。上述多来源、主题标识和设备时钟一致性修正已完成本地测试,并进入 canonical r7 与触摸 r17/r18 构建部署。手机多来源柱状图的响应式规则已合并到 web-src/css/screen-panel.css;此前同规则在 360/390/桌面与三种主题组合的 9 个案例通过,原六个裁剪失败报告继续保留。最终 Host/Native、设备屏幕离线专项和完整离线浏览器矩阵均已覆盖该代码;仍不能用主机或浏览器结果冒充实屏验收。

最近十条记录 ​

历史功能独立于显示驱动,按需开启并选择允许记录的来源。最多 24 个数值来源,每个使用 10 条环形记录;开关、错误响应、空值及无效数值不会写入。重复展示同一次采样不会生成新点。

最近十点仍受编译能力约束。当前 esp32c3-F4R0 为满足 0x330000 应用槽默认设置 pointHistory=false,因此没有历史配置/查询接口,实时采集值仍可在外设和普通 Web 中使用;esp32-F4R0 与完整 S3 目标保持编译。最终以目标发布清单和 /api/system/capabilities 为准。

记录先进入 RAM,再合并写入 /data/point_history.json:日志落盘活跃时,脏数据满约 2 分钟后搭乘日志 flush 的同一 Flash 写窗口提交;日志静默时最迟 3 分钟兜底落盘,避免每次采样都写 Flash。设置保存在 /config/point_history.json。正常受控重启先请求保存;突然断电可能丢失最后一个落盘窗口(最长约 3 分钟)内尚未提交的采样,Web/API 读取的是内存缓存,不受落盘窗口影响。

重启恢复的点带有历史标记,不当作实时状态。未同步 NTP 时使用启动标识、序号和开机时间,不能冒充跨重启连续的绝对时间。此功能用于短趋势观察,不是长期数据库;历史数据文件不包含在普通配置导出中。

远程控制与天气 ​

先在“通信协议”的远程资源配置中定义 MQTT 开关/动作与回读,再在外设执行设置对应动作、启用面板调用并保存 allowPanelControl=true,最后绑定控制卡片。没有该显式许可的规则不会出现在可用控制来源中,卡片也不能绕过规则直接填写 Topic、URL 或报文。

开关发送后等待实际回读匹配才确认;断网拒绝新命令,断线不重放积压控制。无回读场景只报告已发送、结果未确认。规则内容改变后需重新保存面板绑定。

“执行一次”按钮复用外设执行列表中的规则,可用于一次采集、场景或其他允许的外设动作。用户先在外设执行中对该规则启用“允许面板调用”,再到设备屏幕选择控制组件及动作样式,绑定该规则;设备大屏和设备屏幕共享已有规则,不复制 URL、Topic 或报文。仅展示按钮、加载 Web 预览和切换页面都不会触发执行。权限撤销、规则禁用或内容变更后,旧绑定不能继续绕过检查执行。

通用 Modbus 固定值动作可在外设执行选择“写单个寄存器 (FC06)”,填写十进制 地址:数值,例如 5:255;编辑并保存后仍保留通用寄存器动作,不会自动转成电机正反转动作。单线圈/开关动作使用 通道偏移:状态,偏移叠加设备基地址,状态 0/1,实际功能码遵循该设备配置。旧子设备动作编辑方式仍保留。

数值控制使用 visualType=number。Web 编辑器可配置下限、上限、步长、初值、显示精度和单位;物理屏以减号、加号和“执行”按钮调整并提交,Web 预览只演示样式,不会执行。保存和执行时都会检查有限数值、精度、范围、步长对齐、规则仍启用、allowPanelControl=true 及绑定指纹,规则被修改后必须重新保存绑定。

数值控件不是任意寄存器/脚本入口。当前只接受输入类型一致且明确使用运行值的受控动作:闪烁/呼吸周期 50~60000 的整数、PWM 0~65535、DAC 0~255、Modbus FC06 0~65535、显示数字,以及配置了 commandTopic 的可写远程 number。FC06 的动作模板只能为空、$value 或固定 寄存器地址:$value;FC05、步进电机动作、RAW 报文、命令脚本和任意字符串模板不会暴露为数值控件。显示精度和单位只影响交互/显示,不自动换算倍率;需要工程量换算时应在规则或远端协议中明确定义。

天气以图标和卡片可视化展示,支持心知实况及最多三天预报,也可配置其他 HTTP(S) API 地址与字段/代码映射。缺少权限或字段时仅展示实际数据。详见天气与远程资源。

可选重启按钮 ​

重启卡片同时要求面板允许系统重启和卡片确认选项;触摸后二次确认才调度。历史保存失败时取消此次普通面板重启并显示原因,用户再次明确确认后才可选择不保存历史继续重启。浏览器预览不会重启设备。

面板入口已拒绝 OTA 正在进行时的重启请求,通过本地主机测试并进入 canonical r7 与触摸 r17/r18 构建部署;实际操作仍待验证,不把这一入口检查视为所有并发重启时序已经验收。

配置与 API ​

方法路径用途
GET / POST/api/screen-panel/config读取/保存配置;POST 含 expectedRevision、config
GET/api/screen-panel/choices来源/控制分页查询,支持 kind、q、page、pageSize
GET/api/screen-panel/state卡片值、质量、操作结果与应用状态
GET/api/periph-exec/history?sourceRef=...单个来源的最近十条及持久化状态
GET / POST/api/periph-exec/history/config历史开关和 sourceAllowlist

读取需要登录,写配置还需要开发者模式。版本冲突返回 409,应重新加载并处理草稿;不能覆盖其他窗口的新配置。/config/screen_panel.json 使用版本化封装及上一代备份,通用文件写接口不能绕过专用校验。

编译能力由 /api/system/capabilities 的 screenPanel、screenUi、pointHistory、remoteResources 给出。关闭运行时面板不会移除固件代码,也不会停掉独立配置的采集和远程来源;减少 Flash 需关闭编译宏并重建匹配的 Web 资源。触摸动作由设备本地运行时调度,当前没有供浏览器直接执行卡片的通用 HTTP 动作接口。

资源与目标能力 ​

内存严重不足时,设备可以暂停可选显示以保护基础服务。恢复时真正重新启动屏幕运行时,只有启动成功才清除 memorySuspended 和健康状态中的暂停标志;启动失败保留待恢复状态,后续健康检查重试。短暂恢复窗口内,同一显示设备的修改、禁用和删除可能返回 SCREEN_MEMORY_RESTORE_IN_PROGRESS,稍后重试即可,不能把此状态误判为配置丢失。该修正已通过本地主机回归,COM8 恢复版日志也确认 SEVERE 暂停后运行时实际恢复;画面恢复与稳定性仍需现场确认。

COM8 历史驱动同步固件曾在稳定启动窗口确认 GT911 固件 0x1060、配置 0x4F、报告/配置尺寸 480×480、地址 0x5D 与校验有效,持续轮询没有读失败、确认失败或无效帧。RGB cache 安全候选 8bdeba… 后续也曾写入 COM8 并回读校验,整个现场文件系统(含 Web 与配置)前后 MD5 一致;构建/部署通过不等于实体晃动已修复。该阶段纯 PnP 观察没有打开串口,COM8/COM9 仍频繁重枚举;ROM 输出为 rst:0x15 (USB_UART_CHIP_RESET)。一次 HTTP 状态窗口的 uptime 从 277,809 ms 连续增至 319,425 ms,证明那次 USB 枚举变化不等于应用持续重启;但随后专项检查完成 11 个请求后连接超时并掉线。以上仅为历史排障窗口,后续 IRAM 候选失败、回退和按需重启候选进展另见末节,不能沿用历史在线状态。实体点击、左右滑动和用户可见页面切换也未形成有效闭环。

RGB 固件写入后的常规 RTS hard_reset 没有让该设备退出下载模式,当时 COM8 静默且 .33 超时。无需实体按键,使用 esptool --chip esp32s3 --port COM8 --before no-reset --after watchdog-reset read-mac 核对 MAC E8:3D:C1:F7:65:44 后退出下载模式,随后重新枚举为 COM9。该命令是本次设备状态的恢复记录,不能据此泛化所有 USB 重枚举均为应用复位,也不能只凭端口号变化判定应用启动成功。

功能配置中的规划估算为约 80 KiB Flash、69,632 B(约 68 KiB)RAM。启动预算先要求至少 20 KiB 内部 8-bit DRAM,这只是任务栈和后端等内部内存门槛,不是总 RAM 用量。约 48 KiB 的 snapshot/stripe 缓冲优先使用 PSRAM;无 PSRAM 时必须在内部内存获得完整连续分配,失败则面板不启动并报告内存错误。因此 F16R8 是首选完整目标,无 PSRAM 目标即使编译成功也必须单独验证运行余量。

上述估算为 SPI/通用面板原预算,不能作为 RGB 后端总用量。480×480 RGB565 单帧需 460,800 字节 PSRAM;16 行绘制 stripe 另需 15,360 字节,优先分配到 PSRAM,snapshot、任务栈和 LCD/DMA 对象另计。旧的约 1 KiB 填充行缓冲已移除。通用默认最多请求两块各 4 行的内部 bounce,并可在条件或余量不足时回退;历史恢复候选曾实际回退为 0。当前 r19 受控构建使用两块各 16 行、合计 30,720 B,并设置 48 KiB 总空闲和 20 KiB 最大连续块准入;天气调度修正没有改变 SDK 或显示参数,不能把历史 bounce=0 写成当前值。

本地官方仓库快照 aa604c132ef2442013ac93910c65789763329c05 的 Arduino_GFX 示例为 480×480;OPI PSRAM 默认 PCLK 12 MHz,H 时序 10/8/50、V 时序 10/8/20。示例请求一张 PSRAM framebuffer 和两块各 40 行的内部缓冲,共 76,800 B。FastBee r14 因实际启动内存不足回退;r15 的 32 行、61,440 B 仍挤压 Wi-Fi/采集内存且实体失败;r16 的 16 行、30,720 B 曾恢复联网和采集并由用户短时观察稳定。r18 保持 16 行和相同显示参数,但 r16 的实体观察不能迁移为当前候选结论。RGB 后端使用 esp_lcd,没有引入完整 LVGL/GFX;灭背光仍保持 RGB 刷新,不等于省电睡眠。

目标screenPanelscreenUipointHistoryremoteResources当前结论
esp32s3-F16R8已编译已编译已编译已编译COM15 的 canonical r7 已写入并通过 r7 浏览器;触屏 r18 app1 已写入并校验,串口/HTTP/API 和桌面/手机完整浏览器通过。天气重试、实屏与长稳待验,不能沿用 COM15 或 r16 的结果
esp32c3-F4R0关闭关闭关闭关闭canonical r7 为 3,314,576 / 3,342,336 B,剩余 27,760 B;COM4 已正式写入并通过匹配 r7 浏览器,实时采集、Modbus、外设执行和普通 Web 保留,长稳待验
esp32-F4R0关闭关闭开启关闭canonical r7 为 3,318,208 / 3,342,336 B,剩余 24,128 B;COM16 已正式写入并校验,但最新复查仍无 STA IP,恢复联网和 24/72 小时 soak 待验证
esp32c6-F4R0待核对待核对待核对待核对保留此前本地裁剪构建结果,设备已移除,本轮不继续重建或部署

“已编译”只表示存在于 BIN;S3 已另行核对设备能力接口,但不等于显示与触摸硬件验收。不能只根据源码宏、芯片名称或 Web 文件存在就宣称设备支持。容量检查以实际 BIN 大小为准,不能只看编译输出中的 Flash 百分比。

验证边界 ​

基础固件、Web、实体显示和本地采集的验收不依赖天气账号。没有第三方天气密钥或远程设备时继续完成基础检查,天气与第三方控制独立待验收,不用固定样例或模拟回执冒充实际数据。

目标专属 Web 归档 ​

固件和 Web 必须使用同一目标能力 profile。一次发布审计发现 ESP32、C3、S3 的旧 www 目录错误地复用了同一份 S3 Web:无 PSRAM 的 ESP32/C3 因而拿到普通态请求并发 2/2,其目标值应为 1/1。文件系统写入和回读校验只能证明归档被完整写入,不能证明归档选择正确。

归档工具和发布门禁现已修正。本地校验确认 ESP32 F4R0 为 1/1、C3 F4R0 为 1/1、S3 F16R8 为 2/2,三棵 Web 文件树不同,manifest、解压脚本与 PlatformIO profile 一致,旧错误包会被门禁拒绝。首轮 C3/ESP32 专属 Web 保留配置部署后,COM4 曾为 12/14,COM16 曾出现低内存 503/401;这些是历史未通过结果。晚间最新匹配 Web 已在 COM4/COM16 取得 14/14,见末节当前状态。

2026-09-19 早期触摸与 Web 修正版历史 ​

本节记录旧发布包及排障过程,不代表晚间最新固件;当前实测结论以末节“当前部署状态”为准。

早期发布包 screen-panel-release-20260919-touch-web 完成三目标固件编译及四台设备写入校验:COM8/COM15 为 S3 f8fc82244087b35c11c9bd96c47f3b93ffeaea31d5de702f35425bff9bbed101,COM4 为 C3 4594bf5fde55185f5663f703c773e4212813c1430cd9aff2fb0bdca8116488c5,COM16 为 ESP32 6c9d2d90ce761630846ef2c3d329b86f2024b1d42f89ca5a8fbf8fbf12b09227。四份部署报告均为 written=true、verified=true,固件哈希与发布包一致,并保留 Web 目录外的现场文件;但 COM4/COM16 当时分别写入了错误复用的 S3 Web,不能称为“匹配 Web 已部署”。对应 BIN 为 3,851,664 / 3,342,048 / 3,315,408 字节,分区剩余 3,488,368 / 288 / 26,928 字节;C3 仅余 288 字节,不应再随意增加生产代码。以上都是该阶段整份固件占用,不是面板功能增量或后续固件表。

这版包含 TaskManager、Modbus、状态 JSON、WebGuard、GT911 同步/配置回读、显示内存恢复及外设类型目录流式响应修正。本地 Python 共 567 项,566 通过、1 项因 Windows 符号链接权限跳过、0 失败;刷写校验不替代完整 Web、低内存恢复或实体屏验收,发布名称不代表稳定性已通过。

2026-09-19 按 MAC 重新核对后的地址为 COM8 192.168.5.33、COM15 192.168.5.22、COM4 192.168.5.34、COM16 192.168.5.32。旧地址 .84、.26、.23、.54 已变化。COM8 .33 曾重新取得 HTTP 200,MAC 为 E8:3D:C1:F7:65:44;USB 串口重枚举不等于应用持续重启,但该阶段后续 11 请求检查后网络掉线,当轮访问稳定性未通过。健康请求成功不代表完整 Web、实体触摸或流畅性通过。

旧归档实测:COM15、COM4 的桌面/手机均为 14/14 页面、API 完整性 7/7,零 HTTP、JavaScript、请求和配置写入错误;登录分别为 7.111 秒和 5.407 秒。两台顺序检查均为 13/13 HTTP 200、健康状态 NORMAL,资源平均/最大分别为 534.4/1,526.5 ms 和 408.7/1,120.9 ms。COM15 使用正确 S3 Web,结论对该测试窗口有效;COM4 使用错误 S3 Web,只保留为历史实物证据。首轮目标 C3 Web 部署后,顺序 13/13、三次 CSS 均完整 24,092 B、API 6/6 和手机 7/7,但桌面外设/执行页有错误占位,完整浏览器为 12/14。COM16 首轮目标 ESP32 Web 检查出现一次低内存 503,后续功能/MQTT 状态 401,并停在桌面 6/7。两台此后的匹配 Web 均已取得 14/14,旧失败结果不再列为待部署项。

COM8 历史稳定启动日志已确认 GT911 产品 39313100、固件 0x1060、配置 0x4F、报告/配置尺寸 480×480、地址 0x5D 和校验有效;触摸轮询无读失败、确认失败或无效帧,RGB PCLK 为 6 MHz。面板 API 专项通过,但完整浏览器测试超时。该阶段 120 秒纯 PnP 观察全程未打开串口,COM9 最长连续枚举约 4.97 秒、COM8 约 2.87 秒,分别发生 36/23 次状态转换;动态日志明确读到 ESP-ROM:esp32s3-20210327 与 USB_UART_CHIP_RESET。这说明 USB 变化不是当轮串口诊断脚本打开端口造成,但系统 uptime 连续增长又证明应用没有随之持续重启。USB 枚举根因仍待确认;必须在同一应用运行窗口取得坐标事件与用户可见页面切换的一致证据,才能判定点击和滑动通过。

以下是上一恢复版的历史实测,保留用于比较,不计为最终修正版通过:

设备历史恢复版实测
COM15 / S3恢复版桌面/手机 14/14 菜单、7 次结构检查通过,零 JavaScript/HTTP/请求错误;类型 37 项、MQTT 字段完整,DRAM 30 KB、最大块 20 KB。登录 16.368 秒、个别页面 8.227 秒,功能通过但流畅性未通过;未接实体屏
COM8 / 带屏 S3第一轮 CSS 截断、登录中止;第二轮 18/18 菜单、7 次结构检查通过,零请求错误,登录 11.859 秒、手机外设页 13.933 秒。第二轮不能覆盖冷加载失败,也不能证明实体屏交互通过
COM4 / C3恢复版 0cd169… 刷写通过,浏览器 14 次中 8 次通过、10 次低内存/WebGuard 503。后续固件配合错误 S3 Web 的 14/14 页面和 13/13 顺序请求只作历史实物证据;当时尚未完成 C3 专属 Web 复测,晚间已完成。OLED 软件动作此前 SUCCESS,DHT11 GPIO10 未取得真实读数
COM16 / ESP32恢复版 b3fb99… 刷写通过;串行 5 请求成功,完整浏览器发生 TaskManager 内存分配 panic,随后会话丢失产生 401。后续固件修正该 panic 与类型目录,但初次测试使用错误 S3 Web;当时尚未完成 ESP32 专属 Web 复测,晚间已完成

COM8 早期曾出现零配置并拒绝启用触摸,也曾出现黑屏再亮、点击/滑动无反应;这些保留为历史故障。该阶段固件曾在稳定启动窗口恢复控制器配置与轮询,应用和 API 在当次观察中连续运行,但 USB 串口枚举不稳定;显示稳定性、触摸方向/导航、背光和休眠唤醒仍须在同一应用运行窗口内结合实体反馈和触摸事件验收,不能只凭历史驱动初始化成功判定通过。

COM8 曾读到 SHT30 22.2 ℃ / 69.9 %RH,温度和湿度各有最近 10 点;此前受控重启恢复检查也确认最新点的值、序号、启动标识和历史标记正确。持续采样不保证能观察到 dirty=false 的间隙,以受控提交和重启后数据为准。突然断电及长期 Flash 磨损未覆盖。PM2.5/PM10 曾报告 MODBUS_READ_FAILED 且没有历史点;用户确认 PM 未接,随后将现场子设备改为地址 8、9600 的 Modbus 步进电机控制器。公开模板已删除旧 PM 映射,不再作为默认页面、历史来源或待修复故障。

COM8 后续工作任务栈最低实测为 1,456 字节,其他样本 1,468~2,400 字节,旧 60 字节故障不再列为当前问题。现场 RGB 曾测试 6、12、16 MHz,公开模板保留 Arduino OPI 参考 12 MHz,重新导入会覆盖现场值。H 10/8/50、V 10/8/20 时,6/12/16 MHz 对应理论刷新率约 21.14/42.27/56.37 Hz。用户先反馈 16 MHz 下左右闪烁更严重,随后确认 83c3985b… 固件在 12 MHz 下仍左右晃动;因此低刷新率不是已经确证的唯一根因,提高 PCLK 也不是已验收修复。后续 c64fb53d… 候选没有完成正常启动,不能进入实体显示验收,也不能套用旧时序或驱动运行态作为稳定性结论。现场另禁用 mDNS 以节省内部 RAM,这不是所有设备默认要求。

该阶段本地验证包括 Native 2364/2364、早期发布 Python 567 项中 566 通过/1 跳过/0 失败、历史生产服务 8 测试/13 场景、contracts 和分批 Web 专项。RGB cache 安全候选部署后,COM15 又取得桌面/手机 14/14、API 7/7 且零 HTTP/页面/请求错误,说明同阶段 S3 Web 未回归。它们对应各自证据层级,实体功能仍须以同一固件的设备结果验收。通用首次未选屏配置为空页面,需用户选屏后通过模板/布局产生可见内容。

前期遗留项中,COM4 专属 Web 部署和 14/14 菜单复测已由 r7 记录闭环;COM16 r7 仍被 Wi-Fi 关联阻断。COM8 r17 的完整 Web 失败已由 r18 的短时 HTTP/API 和桌面/手机完整浏览器复测闭环;r19 已闭环天气启动重试的数据链,但当前设备恢复、完整样式、实体显示/触摸与长期运行仍未收口。r16 的短时显示观察、心知天气 API 和卡片绑定只作为升级前基线;仍需在最终候选验证组合负载、实体天气画面、点击/滑动/导航、布局跨重启、真实远程控制及 24/72 小时长期稳定性。PM 子设备未连接且用户已排除本轮测试;COM8 传感器为 SHT30,不是 DHT。COM11/C6 已移除,不继续重建或部署。

此前 26b1de… / a5f035… 的 COM15 全菜单通过、COM4 类型响应截断、COM16 MQTT 501 和 COM8 栈 60 字节等均为历史阶段。当前部署状态以下一节晚间记录为准,浏览器历史结果只能作比较;不能把旧成功覆盖当前待验收项目,也不能把已修复的旧故障继续列为当前未完成。

历史:2026-09-20 诊断与部署状态 ​

rgb-recovery-v1 是已完成 OTA 回执和 postflight 的历史恢复候选,SHA256 80b95195e2efb953e7eacf10b887f542e06ea25dd0a9b48b0ffc458a1707954b,BIN 3,865,088 B、sourceStable=true。它曾被下一段 rgb-active-cache-v1 替换;r14 失败后又回退到该版本。r15 OTA 前的冷断电基线中,五页 revision=6、温湿度 good 和三个 HTTP 200 只证明恢复版短时运行,用户仍确认画面自动从右向左移动并卷边。r16 部署已确认该恢复 app0 保持不变,当前活动槽为 app1。

COM8/COM9 曾部署活动快照缓存候选 29871bd27567369936526d9edb456f102dbddfeb451641809320cd218f04940c,BIN 3,858,672 B、sourceStable=true。OTA 大小/MD5 回执及 postflight 通过,reason 3,五页/24 卡 revision=6、温湿度各十点保留、内存 NORMAL。首分钟快照平均/最大 2,293/19,486 μs、绘制平均/最大 74,533/135,849 μs,布局构建一次、栈余量 2,100 B;第二分钟快照平均 2,029 μs、绘制平均 70,906 μs。用户仍反馈自动向左滑动、横纵卷边、趋势点击无反应,但左右手势能切页,因此显示和点击验收失败。该候选属于历史阶段,随后曾被回退后的 rgb-recovery-v1 取代。

此候选的首个日志检查报告 rgb-active-cache-v1-logging-runtime.json 虽写 Unexpected reboot,实际上检查器会把系统状态五秒缓存中的相等 uptime 当作失败,四请求仅约三秒且均 200,串口没有对应额外重启证据。原报告未保存 before/after,不能声称该轮精确旧值。保留原报告并改为相等时等待 5.1 秒,rgb-active-cache-v1-logging-runtime-cache-aware.json 复测通过,样本为 165031 → 165031 → 172674,真实 fileLogging=true、日志文件存在、内存 NORMAL。该工具误判不等于硬件重启,也不覆盖更早超时或看门狗历史。部署证据见固件仓库 artifacts/rgb-active-cache-v1-build.json、rgb-active-cache-v1-ota.json、rgb-active-cache-v1-postflight.json、rgb-active-cache-v1-usb.log。

同版浏览器面板专项通过预览和草稿追加第六页,保存仍五页,零写入、零页面错误,见 rgb-active-cache-v1-panel-browser/report.json;它不覆盖实体卷边或趋势点击失败。三台最新全菜单报告中 COM15 和 COM4 的 14/14 菜单及整项均通过;COM16 虽打开全部 14 个菜单,首次会话接口仍返回低内存 503,整项失败,见 active-cache-fleet-COM16-menus/report.json。随后四台当前地址的只读延迟基线均完成 13/13 HTTP 200,最大请求约为 COM15 1.03 秒、COM9 1.01 秒、COM4 1.08 秒、COM16 1.62 秒;这只是短时顺序读取,不把先前浏览器失败改写为通过,也不等于最终版本已部署或长期稳定。

此前运行的工作任务诊断为 eb4c6a49ee619407c32c6b5e6845f56228617408a71d4905306f0e0762b358a2,BIN 3,855,280 B。构建成功、sourceStable=true,OTA 为 HTTP 200、written=true、verified=true,大小与 MD5 一致。它保留 FastBee 其他后台任务,按 90 秒一段比较 A:初始画面后暂停快照/绘制,B:只恢复快照,C:恢复快照/绘制;A/B/C 暂停触摸,270 秒后恢复原页标题与触摸。串口已记录四段 0 / 90,010 / 180,005 / 270,013 ms 的切换。

用户按时段反馈 A 画面固定,但右侧内容卷到左端;B 仅恢复快照仍逐渐从右向左滑动并卷边;C 顶部内容卷到底部且仍横向卷边。旧诊断只改了页面标题字段,而渲染器当时不显示标题,所以屏幕实际没有 A/B/C 标签;阶段由串口计时确认,不能写成用户依据可见阶段标签判定,NORMAL 实体状态也未单独反馈。A 不是正常显示,三阶段均未通过;具体反馈和限制见 artifacts/rgb-worker-isolation-v1-observation.json。诊断后 10 个 HTTP 请求通过、正常 reason 3、五页/24 卡 revision=6 和温湿度各 10 点保留、内存 NORMAL,不能覆盖实体失败。

NORMAL 只是诊断固件内部恢复普通运行,不会切回原固件;每次重启或重建屏幕运行时会重跑 A/B/C。标题仅在内存中临时覆盖,布局没有因阶段标题写盘。源码后来新增显式 A/B/C 横幅并通过本地像素变化及恢复测试;代码已随当前正常固件部署,但 FASTBEE_SCREEN_WORKER_ISOLATION 保持关闭,因此不会显示横幅或重跑三阶段。历史诊断不能作为当前实体验收。证据为固件仓库 artifacts/rgb-worker-isolation-v1-build.json、rgb-worker-isolation-v1-ota.json、rgb-worker-isolation-v1-usb.log、rgb-worker-isolation-v1-postflight.json;各时段画面来自本轮用户反馈。

此前文件日志隔离实验中,关闭实际 fileLogging / logViewer 并重启,用户仅反馈晃动略有改善,同时底部内容跑到顶部。布局没有改变,该实验未修复问题。恢复报告的 false 字段是修改前状态,不是最终值;后续启动日志和功能标志确认重新启用,rgb-worker-isolation-v1-logging-runtime-retry.json 又通过实际 /api/logs/info 读回 enabled=true、fileLogging=true、日志文件存在,内存 NORMAL。首次 rgb-worker-isolation-v1-logging-runtime.json 在状态请求 200 后超时、passed=false,独立保留,不能被重试成功覆盖。其他证据为 artifacts/panel-log-isolation-v1-check.json、panel-log-isolation-v1-observation.json、panel-log-isolation-v1-restore.json。

活动页面快照与绘制优化已包含在本节开头的缓存候选,包含减少快照/比较工作量,以及跳过不与当前条带相交的直线、圆和符合高度条件的卡片。本地字库栅格 1 项、生命周期 9 项、隔离策略 2 项及新像素对照 6 项通过;新测试使用真实生产渲染器/U8g2,将整帧、1/7/16/31 行条带及未裁剪基准逐像素比较,覆盖组件、卡高、旋转、越界、末行和确认框。这些证明主机渲染结果保持一致,实体卷边仍未解决。

以下为 9 月 19 日正常固件及独立显示对照历史。23:20 的 COM8 固件为 7ae21b566a7e95903cafd4a033c78f378306c50670501d30b42365662e7c8b75。它在前一候选上仅增加 OTA 已排队响应保护,显示策略保持 RGB 按需重启、12 MHz、单个 PSRAM framebuffer 与 bounce=0。新路由使用同一哈希再次完成 OTA,HTTP 200,大小 3,853,856 B、MD5 e51c21ea2395fc71a98a123b0f348e68 与上传文件一致,耗时 44.434 秒,报告 written=true、verified=true。确认的是 OTA 回执与启动,没有进行完整 Flash 回读或全文件系统 MD5 比较。

后续用户明确反馈该固件仍左右晃动,当前实体显示验收未通过;关闭每帧无条件 DMA 重启没有解决问题。23:54~23:58 已完成相同 SDK、12 MHz、初始化与引脚下的独立静态显示诊断:direct PSRAM 和 40 行双内部 SRAM 缓冲各运行 90 秒,用户对两阶段均反馈“完全稳定”。测试自动返回原固件后,五页 revision 6、温湿度各 10 点和 Web 恢复已核对,用户随即反馈“还是左右晃动”。因此重点转向完整固件中的屏幕计算与后台存储负载,具体触发源仍须分组验证,不能仅凭该对照认定某一个任务或硬件损坏。

独立诊断运行时不启动 FastBee 快照、网络、采集与文件写入;它的 40 行双缓冲需要 76,800 B 内部内存,不能直接照搬到内部余量约 26~32 KiB 的完整固件。该结果也不证明缓冲方式在 Flash 写入、网络负载或长期运行下安全。诊断、恢复与用户观察分别记录于固件仓库 artifacts/rgb-isolation-v1-*.json 和串口日志,当前不标记为显示修复完成。

升级后检查 passed=true,10 次 HTTP 请求均为 200,诊断为正常 Software restart (ESP.restart)、reason 3 和 OTA firmware upload completed,没有额外应用启动循环;五页/24 卡 revision=6 内容与升级前相同,SHT30 温湿度各有 10 点、内存 NORMAL。面板浏览器预览和未保存草稿追加页测试通过,零配置写入、零页面错误。证据为固件仓库 artifacts/rgb-demand-uploadfix-com8-ota-confirmed.json、rgb-demand-uploadfix-com8-postflight-confirmed.json、rgb-demand-uploadfix-com8-panel-browser/report.json。用户随后明确该固件仍晃动,点击/滑动也未形成同版实体闭环;不据此宣称修复或 24/72 小时长期运行通过。

随后 120 秒串口观察未见 Boot、panic、额外 reboot 或 SEVERE/CRITICAL,SHT30 连续采集成功;内部空闲样本 31,924 B、最大块 18,420 B,该启动周期最低堆 15,228 B。GT911 轮询从 7,398 增至 11,126,readFail=1 未增长,按下/抬起均为 0,因此没有该候选的实体触摸验证结果。面板预览时内存 NORMAL、内部空闲 27,480 B、最大块 18,420 B;最后顺序 HTTP 5/5 为 200,最长 1,043.2 ms。证据为固件仓库 artifacts/rgb-demand-uploadfix-com9-final-runtime.log、rgb-demand-uploadfix-com8-http-final.json,仅代表这一短时窗口。

当前 NTP 不是正常同步状态:该日志记录连续 10 次同步失败并进入 30 分钟冷却。时钟卡应显示未同步,历史点使用启动标识、序号和开机时间,不冒充绝对时间;须恢复真实时间同步后再验收时钟显示。早期 NTP 成功记录只保留为历史,不覆盖本次失败。

首次尝试的 rgb-demand-uploadfix-com8-ota.json 为连接中断后取消,未出现 OTA 成功事件;随后 paced 上传收到旧路由覆盖的 HTTP 400,但串口实际 OTA 完成。首次 paced 升级后出现一次 reason 7 Other Watchdog reset,rgb-demand-uploadfix-com8-postflight.json 为 passed=false;这些失败记录保留,原因仍需排查。第二次同哈希 OTA 的正常 reason 3 与成功检查不能覆盖该失败,也不代表以后不会重现。网络 OTA 会更新 OTA 分区选择;后续串口部署必须重新核对活动分区,不能假定 app0 后直接写 0x10000。

以下保留 23:03~23:07 前一 d2994581… 候选的历史结果:串口记录 ota_success、OTA 计划重启及随后完整初始化,运行接口 sketchSize=3853856 与上传候选相同,诊断 lastRestartContext 为 OTA firmware upload completed。部署后检查 passed=true,10 次 HTTP 请求均为 200、uptime 增长、内存 NORMAL;当时五页 revision=5 配置与升级前完全相同,SHT30 为 22.7 ℃ / 70.2 %RH、温湿度各 10 点。证据为固件仓库 artifacts/rgb-demand-netfix-com8-postflight.json 与 rgb-demand-netfix-com9-runtime.log,不替代当前固件或实体屏幕验收。

23:05~23:07 同一固件的桌面/手机真实浏览器菜单 18/18、6 项 API 完整性通过,HTTP、页面脚本和请求错误均为 0;登录全流程 5,999 ms,页面 1,128~2,646 ms,后者包含 1 秒等待和截图。面板 API 19 请求通过,覆盖鉴权、参数校验、同布局保存及冲突 409;同布局保存将版本从 5 增至 6,配置内容没有改变。当前五页配置为 revision=6。证据为固件仓库 artifacts/rgb-demand-netfix-com8-all-menus/report.json 与 rgb-demand-netfix-com8-api.json,仍属于短时 Web/API 结果。

该次 HTTP 上传回执没有收到,原 rgb-demand-netfix-com8-ota.json 仍保留 written=false、verified=false;部署后报告使用串口成功事件、重启、正常启动及运行映像大小交叉确认,明确 httpMd5ReceiptVerified=false。该轮没有 HTTP MD5 回执或完整 Flash 回读证据,也不沿用旧文件系统 MD5 作为该次 OTA 校验。回执缺失定位到客户端 multipart 结束边界和服务端完成响应处理;后续已修正并通过本节开头的 7ae21b… 同哈希 OTA 验证,但旧失败报告不能改写为通过,实屏稳定性仍独立待验。

升级前,用户明确晃动间隔不固定,有时快、有时慢。临时换成“显示稳定性测试”静态首页后仍观察到晃动;测试后原五页、24 卡已恢复为 revision=5,没有遗留测试首页。该结果不能把 0.5 秒快照轮询、时钟/运行时长文本或动态卡片重绘认定为已证实根因,也不能排除仍在运行的后台采集、快照及总线负载。

本轮首个候选 b40e18c5d19a4969e12a99f2510dc277ba13d5af514c79a1740dc1a4858dfb7b 仅改变 RGB 驱动的重启策略:在 S3 F16R8 环境启用 FASTBEE_RGB_RESTART_ON_DEMAND=1,关闭每次 VSYNC 强制重启 GDMA,保持 12 MHz、单个 PSRAM framebuffer、bounce=0、原 IRQ/cache 配置、GDMA/HAL 放置及原链接脚本;后续 d2994581… 继承此显示修改。匹配版本 SDK 的注释指出,迟到的 VSYNC 重启可能自身造成单帧错位;这是本次要检验的假设。真正 EDMA 缺数仍可能形成持续错位,必须配合实屏及 Web/Flash 负载验证,不能把策略变更视为根因已经确定。

该候选本地构建成功,BIN 3,853,744 B,sourceStable=true;10 项定向测试(含 8 组真实 Xtensa C 编译/符号/宏组合)与 ELF/link map 审查通过。22:48 OTA 已核对设备身份、begin 成功,但上传报 fetch failed,随后取消成功,报告 written=false、verified=false;该轮上传和校验没有完成,不能记为候选已部署或实屏解决,也不能单凭失败标记认定备用分区没有发生任何写入。该轮最后确认可正常启动的固件仍为 83c3985b…,实体显示验收未通过。证据位于固件仓库 artifacts/panel-jitter-original-layout.json、panel-jitter-static-applied.json、panel-jitter-layout-restored.json、rgb-demand-candidate-build.json、rgb-demand-candidate-build.log、rgb-demand-candidate-release/firmware.map、rgb-demand-com8-ota.json;OTA 前布局另存为 rgb-demand-com8-layout-before.json。

首轮 OTA 中断日志在 ota_start 后出现 No HTTP requests for 4294967s 并回收连接。源码检查定位到维护循环使用旧时钟值减去异步更新的新请求时间戳,发生无符号下溢,误回收活跃 HTTP/OTA 连接。修正改为先读取请求时间戳、再取当前时钟,并在回收前复核;这项网络修正不等于实体晃动根因已确定。合并修正的 rgb-demand-netfix 候选 d2994581bb2bf62d012ed004ad5b807a5026f4140523f08e3d368e080715ee08 于 22:57 本地构建成功,BIN 3,853,856 B、sourceStable=true;其后 OTA 正常启动的证据保留在本节,该阶段未完成实体显示验收。构建证据为固件仓库 artifacts/rgb-demand-com9-runtime.log、rgb-demand-netfix-build.json 和 rgb-demand-netfix-build.log。

22:52 其他三台追加只读检查各为 5/5 HTTP 200、健康状态 NORMAL:COM15 .22 最大 1,149 ms,COM4 .34 最大 1,018.7 ms,COM16 .32 最大 1,751.6 ms。对应 artifacts/rgb-demand-peer-COM15-latency.json、rgb-demand-peer-COM4-latency.json、rgb-demand-peer-COM16-latency.json。短时读取通过不排除请求之间的瞬态压力,也不等于长期稳定性通过。

以下为 22:11~22:20 的 IRAM 实验与回退历史。COM8 的 RGB IRAM 候选 c64fb53d3ccc6e688978e4f6226394ad4bc7b8667e83240abd439dab98edf8c5 完成 firmware-only 写入和回读校验,但反复出现启动日志中的 Power-on reset,未到显示初始化阶段,.33 /api/health 超时。首次回退因串口消失而未写入,随后 22:20 重试回退 83c3985b… 成功,written=true、verified=true。复位原因标签本身不能确定供电或其他硬件根因。

回退保持整个文件系统 MD5 不变,watchdog-reset 后 .33 只读 HTTP 5/5 通过,最长 1,283 ms;55 秒串口观察未见 panic/重启日志,SHT30 为 22.7 ℃ / 70.6~70.7 %RH。GT911 轮询 2,459 次,按下/抬起各 1 次,读失败/确认失败/无效帧均为 0。浏览器面板预览通过,保存页数为 5,未保存草稿追加页面测试通过,无配置写入或页面错误;内存 NORMAL,内部空闲 28,196 B、最大块 16,372 B。这些确认该阶段启动、Web 与采集恢复,不代表实体晃动或触摸导航通过;随后的静态页实体失败结果已记在本节开头。

IRAM 候选的编译、IRAM/DRAM 链接与反汇编审查通过,只是部署前证据,不代表启动或闪烁修复通过。该次串口更新及回退的整个现场文件系统前后 MD5 均为 f3e9da3a4248464a6f64d70b8247549c,Web、配置及启动/分区/NVS/OTA/PHY 区域未被当次固件更新替换;这不适用于之后正常更新 OTA 选择的网络升级。COM15 保持 83c3985b4dec2a5b31df309a752dd18a265d2f6dc6151fdce44619f728cb685f 和匹配 S3 Web;其余三台既有通过窗口不受本次 COM8 候选影响。

RGB ISR 替换实验现已在源码中通过 FASTBEE_RGB_ISR_IRAM_OVERRIDE 默认 0 隔离,wrapper/hook 必须显式设为 1 才启用,8 项本地隔离测试通过。原 c64fb53d… 候选归档保留不变,设备通过上述实际回退恢复到 83c3985b…,不能将源码隔离与设备部署混为一谈。其余三台追加只读 HTTP 检查均为 5/5,COM15 .22、COM4 .34、COM16 .32 最大请求耗时分别约 1.07、0.89、1.43 秒,不能扩展为长期稳定性结论。

历史设备与地址(非当前访问地址)2026-09-20 部署与实测
COM15 / S3,192.168.5.22canonical r8 与匹配 Web 已正式写入并校验;严格浏览器桌面/手机共 14 页、主样式 1,594 条规则可读,零失败和零写入;长稳按独立验收记录
COM8 触摸 S3,192.168.5.33r19 app1 与匹配 r8 Web 已写入并校验;5/5 HTTP、24/24 菜单、revision 9 天气/系统预览、NTP/SHT30/天气/十点历史和 26/26 规则绑定通过。用户仍报告黑屏恢复及卷边/漂移,实体显示/触摸/蜂鸣器、组合负载和长稳待验
COM4 / C3,192.168.5.34canonical r7 与匹配 Web 已正式写入并校验;严格浏览器桌面/手机共 14 页、主样式 1,594 条规则可读,零失败和零写入;长稳待验
COM16 / ESP32,192.168.5.32(诊断窗口)canonical r7 与匹配 Web 已正式写入并校验;完整菜单窗口可渲染但出现低内存 503,不能列为流畅通过,需资源诊断和长稳复测

COM8 的地址 8、9600、8-N-1 协议、四个单寄存器读取任务、采集规则及正反停固定寄存器规则已通过正式 API 保存。所有电机采集/控制规则仍禁用,控制规则未授权面板调用,没有发送运动或参数修改命令;硬件断开时使用待采集占位,不显示假数据。公开 Rev4 模板已删除旧 PM 规则和任务,PM 不再作为默认页面或本轮验收项。心知天气 API 和卡片绑定已经通过只读联调,实体天气视觉、自定义第二种 JSON、异常路径及远程开关/场景仍需独立验收。

.22 与 .34 的当前严格浏览器证据为 r8-COM15-web-styles/report.json、r7-COM4-web-styles/report.json;COM16 当前诊断为 r7-COM16-network-recheck-90s.json。COM8 当前证据包括 r18 的完整短时 Web 通过,以及 r19 构建/部署、天气数据通过、首轮浏览器内容长度不匹配、功能复测样式缺失、两次 r8 Web 写入连接失败和硬复位后仍无串口数据;这些结果须同时保留。此前 r17-before-*、active-cache-fleet-*、panel-cache-preflight-* 与 rgb-isolation-preflight-* 保留为历史。任何短时状态都不证明请求间无瞬态压力或长期稳定。COM11 C6 已移除,本轮不列入四台。

COM8 的独立显示、文件日志及 A/B/C 分组记录属于 r16 之前的故障定位历史;r16 用户曾短时观察稳定,但不能迁移为 r18/r19 实体结论。r18 已闭环 r17 的短时 Web 失败,r19 修复天气冷启动但首轮浏览器又暴露间歇内容长度不匹配;仍须验证点击/滑动和 Web/采集/历史写入/配置保存/Flash 活动负载,保留首次升级后一次看门狗复位与 USB 观察,并完成 24/72 小时稳定性。历史 16 MHz 调试值不是当前配置,约 0.5 秒也不是已测定的固定故障周期。

COM16 串口持续观察 180 秒未见 panic 或重启,末次内部空闲 25,208 B、最大块 13,300 B。期间发生一次 SEVERE 内存保护并暂停外设执行 workers/timers;随后恢复完成,HTTP 健康状态为 NORMAL、degraded=false、periphExecPaused=false、periphExecWorkerSuspended=false。因此本轮验证了页面访问及一次保护恢复,没有证明并发负载下从不降级。

对应证据归档在固件仓库 artifacts:panel-general-com15-deploy.json、panel-general-com15-menus/report.json、panel-general-com8-deployment.json、panel-general-com8-api.json、panel-general-com4-web-deploy-20260919.json、panel-general-com4-web-menus-cancellation-20260919/report.json、panel-general-com4-web-latency-20260919.json、panel-general-com16-summary.json。候选失败历史另见 rgb-iram-candidate-build.json、rgb-iram-link-audit.md、rgb-iram-com8-deployment.json、rgb-iram-com9-runtime.log、rgb-iram-com8-http-retry.json、rgb-iram-com8-rollback.json;最新成功回退与复测见 rgb-iram-com8-rollback-retry.json、rgb-iram-rollback-http.json、rgb-iram-rollback-runtime.log、rgb-iram-rollback-panel-browser/report.json。这些是部署及短时证据,不代表 24/72 小时长期稳定性;实体显示/触摸、真实第三方服务和异常掉电恢复仍需分别验收。

计划尚未闭环的项目 ​

截至 2026-09-22,当前不能将整个扩展计划标为完成。触控优先:COM8 的 r6 应用与匹配新版 Web 已部署,需完成同版 HTTP/菜单、温湿度一致性/严格鲜度、重启十点恢复及显示负载复验。COM16 r4 仍有资源超时,后续继续处理;COM15/C3 新版 Web 短测通过仍不能替代长稳。四台独立 24 小时均未完成,72 小时也未完成。实体显示/触摸和真实业务仍需要下面的闭环证据,历史版本短时成功不替代最终版本验收。

  • 实体交互:方向/边缘、亮度/休眠、唤醒首触、1,000 次滑动无误动作;重启确认、取消、去重、落盘失败和 OTA 忙反馈。
  • 通用数值输入已完成代码、定向与最终回归,并进入 canonical r7 与触摸 r17/r18/r19 构建部署;仍需实屏操作验收,并用至少两种寄存器表证明纯配置复用。当前不支持自动倍率换算、任意 RAW/脚本或步进电机现场参数输入。
  • 真实服务:r19 冷启动 13.584 秒后,心知天气自动恢复为 ready,北京多云 26 °C,NTP、SHT30 和两条十点历史均为 good;没有重新注入或手动测试凭据。还须目视验收实体天气图标/文字/排版,并验证另一种 JSON、异常/限流/离线路径及日志不回显。至少一个远程开关和一个场景仍须完成触摸/回读闭环;离线和未同步降级仍待验。PM 不验收,断开的电机不试运行。
  • 通用配置与绑定:两种逻辑尺寸/方向、桌面和 360/390px 窄屏、换模板保留绑定、拖拽/撤销、重新登录、导入导出及冲突草稿;数值/状态/单位和十点边界在最终版本复核。
  • 存储与兼容:突然断电、持续写入恢复,关闭面板仍保留采集/执行,旧外设/U8g2/设备大屏兼容;当前 COM4 DHT11 真实读数也未闭环。
  • 发布与资源:同基线开关前后 bin/map/Web、内部 RAM/PSRAM/连续块/栈/队列及纯色/渐变成本;COM16 已恢复 Wi-Fi 并取得新地址,但完整浏览器仍有低内存 503,须完成最终正常固件的四台完整 Web/OTA/内存回归、至少 24 小时混合负载及发布前 72 小时验证。

逐项 GP-01~GP-19 审计保存在固件仓库 artifacts/panel-plan-acceptance-audit-20260920.md。CAN 驱动、额外控制器、任意脚本式 UI、完整图表编辑器、长期数据库及旧专板计划的 RTC/SD/电池不属于当前通用面板核心验收。

蜂信物联 | fastbee.cn