资料中的启动顺序是:挂载 SPIFFS 并加载配置,初始化 UART 协议层,读取时间,初始化语言与 LCD/LVGL,启动背光,进入 lv_timer_handler() 主循环。这个顺序把“设备能显示”与“设备能通信”拆开,调试时可以先缩小故障面。ESP-IDF 的 ESP32-C3 入门文档也把配置、构建、烧录和监视作为连续工作流;项目实际版本和组件锁定仍以仓库文件为准。
启动顺序为什么要固定
| 阶段 | 资料中对应模块 | 现场检查 |
|---|---|---|
| 配置 | Config/config.c |
SPIFFS 挂载、JSON 是否能读回、历史计数是否一致 |
| 通信 | L010Board |
UART 初始化、目标引脚切换、帧超时与重试 |
| 时间 | GetTimeNow、RTC API |
时间是否可读,日志时间是否连续 |
| 显示 | LCD_Init、ST7789、LVGL |
SPI 面板、刷新回调、字体资源 |
| 交互 | ui_init、key_init、BLE |
页面状态、按键事件、GATT 服务 |
main.c 的启动入口先准备配置和硬件,再进入 UI。主板和酒精模组通过 L010Board 层通信,UI 层不直接拼接 UART 帧;BLE 则在主页初始化时提供 JSON 命令。LVGL 负责对象、事件和刷新调度,显示驱动仍由 ST7789 面板层完成。相关接口可分别对照 Espressif 的 ESP32-C3 Programming Guide、ESP-IDF LCD API 和 LVGL 8.3 文档。
出现问题时的排查顺序
“页面正常但读数不变”时,先看模组目标切换、帧接收超时和 l010_get_alcohol_adc 的返回,再看 UI 显示。若启动后历史数量异常,检查 SPIFFS 挂载、JSON 解析和 /spiffs/history.log 的追加记录;清空历史和读取历史都要同时核对配置中的计数。若 BLE 能连接但命令无响应,再按 Ble_Init、服务注册、命令分发和错误返回逐层记录。
校准接口与显示流程分开,避免把一次校准写入误认为实时测量结果。调试日志应保留固件版本、阶段、错误码和复现步骤,而不是只截一张最终界面图。
本文不推断传感器精度,实际读数仍需按传感器批次、环境和校准记录解释。项目中的组件版本、引脚和协议字段以本地源码与锁定文件为准。
评论区