作品MOD.01 / 02

Tab5 Field Console

为 M5Stack Tab5 打造的 16 应用 ESP-IDF 与 LVGL 个人操作系统,共用一个 SD 卡内容引擎。

硬件2026已发布
Tab5 Field Console 主图照片

MOD.01 / 记录 02

为 Tab5 打造的一套 16 应用个人操作系统,而不是一组互不相干的演示程序。

Claude 完成的固件归档现已作为本项目的主要技术记录保存于此。它包含 720 × 1280 竖屏启动器、真正实现的 Chrono-Deck、服务五个 MATCH 模块的 SD 卡内容引擎,以及刻意隐藏的设备签名。依赖硬件的遥测功能仍在源代码中清楚标记为后续工作。

设备
M5Stack Tab5 · ESP32-P4
平台
ESP-IDF 5.4 + LVGL 9
代码
35 个文件 · 约 3,986 行

[ 01 / 系统结构 ]

05 项功能

Tab5 固件架构与界面系统的工作台构图
01

16 应用注册表

一份静态数据同时驱动启动器磁贴、详情页、状态与快捷启动栏。

02

启动与导航

轻触打开、长按查看详情、按组筛选、加入构建队列,并通过返回栈移动。

03

Chrono-Deck

已经完整实现的默认表盘,整合时间、系统状态与如实标注的遥测占位数据。

04

一个内容引擎

旅程、厨房、作品、工作室与生活从 SD 卡的独立 JSON 目录读取内容,无需重新刷写。

05

隐藏印记

四秒内轻触字标七次,才会出现不在注册表中的本地签名画面。

[ 02 / 构建状态 ]

如实记录

01

已经实现

启动器、磁贴与详情系统、导航、Chrono-Deck、SD 卡挂载及共用模块内容引擎均已写入源代码。

02

刻意保留

RTC 与 SNTP 回写、电池、温度、CPU 负载、实时天气、FFT 与清单保存仍标记为待办。

03

系统架构

35 个文件 · 约 3,986 行 · 16 个注册应用 · 5 个内容模块 · 双 OTA 分区布局。

Tab5、开发板与 ESP-IDF 固件工作台

注册表即唯一事实来源

启动器由数据驱动,而不是逐页硬编码。应用 11–15 刻意共用一个内容引擎;更新模块内容只需修改可移除 SD 卡上的 JSON,无需重编固件。

  1. 01安装 ESP-IDF 5.4 或更新版本并载入开发环境。
  2. 02运行 idf.py set-target esp32p4,然后运行 idf.py build。
  3. 03使用 idf.py -p COM7 flash monitor 刷写,并把 sdcard/matchos 复制到存储卡根目录。
typedef struct mos_app_s {
    uint8_t id;                  /* 1..16, shown on the tile */
    mos_group_t group;
    const char *name;
    const char *subtitle;
    const char *content_dir;     /* SD path for content apps */
    void (*open)(const struct mos_app_s *self);
} mos_app_t;

#define MOS_APP_COUNT 16
extern const mos_app_t MOS_APPS[MOS_APP_COUNT];

/* Apps 11..15 share app_matchos_open().
 * Their content_dir is the only difference: one JSON engine,
 * five MATCH//OS modules, no firmware rebuild for new content. */

未发现真实凭证 · 尚未在本站进行硬件编译验证

[ 04 / 隐藏印记 ]

7 TAPS · 4 SECONDS

不在注册表里。

字标在四秒内被轻触七次,才会打开这块没有磁贴、没有普通入口的本地画面。发现次数保存在设备 NVS;任何内容都不会传出设备。

#define MOS_EGG_TAPS_REQUIRED 7
#define MOS_EGG_WINDOW_US (4 * 1000 * 1000LL)

/* The private signature remains inside firmware .rodata. */
extern const char MOS_EGG_SIGIL[];

if (++s_taps >= MOS_EGG_TAPS_REQUIRED) {
    s_taps = 0;
    mos_egg_open();
}

签名已嵌入 · 仅限本机