发帖板块:案例与作品 | 话题:#TRAE AI Passport二创
亲爱的 TRAE 友们:
收到 AI Passport 那天,我把官方玩法过了一遍——扫二维码、翻菜单,确实好玩。但盯着这块 ESP32-C3、240×320 彩屏、三按键的小板子,我冒出一个念头:它方方正正,往兜里一揣,不正好像个口袋吗?
于是我把它刷成了金句口袋。
一、我做了个什么
一句话:我把 AI Passport 改造成了一台完全离线的金句阅读器—— 开机即读、三键操作、能翻句能收藏,里面装着 520 条精选金句。
它最特别的地方在于:这次我不是往里「装一个玩法」,而是把它当成一个正经的小硬件产品来做——专属 Flash 分区、专用二进制文案包格式、A/B 双半区原子更新、NVS 收藏持久化、1348 字符的定制字体子集,外加一套能在 PC 上直接跑的单元测试。于是这块胸牌摇身一变,成了通勤地铁上单手揣兜、随手翻两眼的今日份嘴替。
断网也能用,是它和大多数玩法最大的不同:全部内容都在本地,不需要配网,开机第一秒就是你上次读到的那一句。
做它的起因也很简单:微信收藏夹里躺着几百条金句,收藏之后再没打开过第二次。收藏夹是仓鼠洞,不是口袋——口袋,是你真的会伸手进去掏的东西。
二、它能怎么玩
五个动作,三键搞定:
-
开机直达:上电即进金句口袋,不选菜单。屏幕显示「序号/总数」,翻开就读。
-
UP / DOWN 逐句切换:520 条金句循环回环,翻到头接着翻。
-
长句自动分页:正文按 16px 实测字宽贪心断行,一屏放不下的,单击 OK 在句内翻页,页码显示 n/N——再长的一句也能一口气读完。
-
双击 OK 收藏:读到心动的一句,双击 OK 收进口袋;再双击取消。
-
长按 UP「只看收藏」:只想回看自己藏下的句子?长按 UP 切进收藏视图,UP/DOWN 只在收藏之间回环。在收藏视图里取消当前句会自动跳到下一条;取消的是最后一条收藏时,自动退回全部视图;一条收藏都没有时,会友好提示「暂无收藏 双击 OK 可收藏」。
内容方面,520 条金句来自 TRAEWORK 的《管理金句合集》,原始 629 条经过去重、勘误、校对后定版。
设计上还有几个我比较得意的小坚持:
-
收藏跟着文案包走。收藏位图连同文案包的 serial 一起写进 NVS——换一包文案,旧收藏自动作废,绝不会出现「第 38 条收藏的是 A 包的句子、屏幕上显示的却是 B 包」这种错位。
-
文案存储不走文件系统而是进了专属 quotes 分区(1MB,A/B 各 512KB),用自定义的 QPKT v1 包格式:32 字节包头(magic/版本/serial/条数/CRC32)+ 索引区 + UTF-8 文本池。换文案不用重刷固件:PC 上一条命令把新包刷到另一半区,重启后设备自动择优加载、原子提交。
-
它不会变砖。分区损坏或 CRC 校验不过时,固件会自动回退到内置的 20 条种子金句——开得了机、读得了句,是一个口袋的底线。
所以它的目标场景非常具体:早高峰的两站地铁、会议开始前的两分钟、写周报憋不出第一句的下午、想换微信签名又没灵感的晚上。单手三键,掏出来翻两句再揣回去,全程不到十秒。它不打算占用你的时间,只打算补上那些本来就要发呆的缝。
三、它现在长什么样
【图 1|封面图,深蓝星空底、两张叠起的金句卡片】
【图 2|实物图】
【图 3|演示 GIF:翻句 → 双击收藏 → 长按 UP 切进收藏视图,一气呵成】
四、别人怎么体验,以及我下一步想怎么玩
体验门槛压到了最低,四步:
-
先有一块 AI Passport 电子工牌——这是唯一的前置条件;
-
安装之前先接线:用 USB 线把工牌接到笔记本上;
-
打开
https://ai-passport.folotoy.cn/,站内搜索「金句口袋」,点击安装; -
装完拔下来,开机,520 条金句就在你的工牌里了。
整包(固件 + 文案)在浏览器里一条龙装好,不用命令行、不用装环境,点几下等进度条走完就行。小贴士:用 Chrome 或 Edge 打开页面,浏览器会通过串口直接识别到工牌;装完拔下来,从此它既是你的工牌,也是你的口袋。
进阶玩法是换成自己的句子:改 JSON → `make_quotes.py` 打包 → esptool 刷到 B 半区(0x92000)→ 重启,设备自动择优加载,收藏按新包 serial 重新计数。
接下来我还想继续玩:
-
摘抄模式:把收藏的句子一键串成「今日份手账」滚动播放;
-
呼吸感:切句加上 LVGL 翻页动画,现在还是直给;
-
内容连载:做一个小小的「金句周刊」,每周换一包文案,像给口袋换内胆;
-
按键手感:三键共用一路 ADC,去抖和双击判定的参数还想再调调,让收藏这一下更跟手;
-
联网动态更新:做一个轻量服务端,把金句库放到云端,设备联网后自动比对 serial、增量拉取新包——从此换文案不用再碰数据线,「口袋」自己会伸手去掏;
-
MCP 共创金句库:把金句库做成一个 MCP 服务——每个玩友都能通过 TRAE 往库里贡献句子、同步这整个金句库,而且同步下来的每一条都附带贡献网友的名字。到那时,你的口袋里装的就不只是 520 句,而是大家一起攒的心头好。
五、幕后:它是怎么在 TRAE 里被做出来的
这个项目绝大部分代码是和 TRAE 结对写完的,几个印象深的瞬间:
-
第一个坑,分区表。照着文档写
data/raw,IDF 直接拒绝构建,折腾半天才知道 raw 要写成数字0x40。这种「文档写了、但构建系统不认」的坑,AI 翻起来比我快多了。 -
最险的一关,字体。LVGL 内置的中文字体只覆盖示例字符集,一跑覆盖率检查:520 条文案里缺 678 种字符、共 5601 次出现——直接上线就是满屏豆腐块。最后用 lv_font_conv 对着思源黑体生成 1348 字符的应用字体子集,再写了个
font_cover.py自动对照校验,跑出零缺字才敢合并。 -
最值的决定,把纯逻辑抽出来。包格式(quotes_pkg)和导航/收藏状态机(quotes_nav)都是不碰硬件的纯逻辑模块,直接在 PC 上 gcc 编译跑单测——回环导航、收藏清空自动退出视图这类边角逻辑,全部先在 host 上断言通过再上真机。17 个打包用例 + 6 套 C host 测试,外加一条 CI 等效的
validate.sh --all,全绿。 -
每天的节奏:我描述意图 → TRAE 出改动 → host 测试先跑 → 真机验证,循环往复。整个过程大部分时间花在讨论设计上,而不是修语法——这大概是和 AI 结对最大的不同。
-
真机那一刻。COM5 两步烧录、哈希回读一致,串口日志滚出 `package loaded … count=520` 的瞬间,这块胸牌就正式变成「口袋」了。
-
一次回头改。最初版本还留着启动菜单,做完总觉得不对——口袋的意义就是「翻开即读」,多一步选择都是打扰。于是砍掉菜单、开机直达,只在长按 OK 时才退回原系统当逃生门。
另外,给后面的开发与发布立下四条铁律,一字一句都加粗,贴在工位上那种:
-
开发,一定要严格按照官方命令!
-
发布,也一定要严格按照官方规则!
-
发布的时候,不能用原始页面!
-
一定要记住前面三条!
顺带一提,这块板子有个挺有意思的硬件设计:三个按键共用 GPIO0 一路 ADC,双击、长按的判定全靠软件补偿。也正因为这样,把按键逻辑先在 host 上推演一遍再上真机,才睡得着觉。
写给同样拿到 Passport 的朋友:这块小板的可玩性远不止扫个码。它有屏、有键、有 8MB Flash,把它当成一个干净的小硬件去做一遍——分区、格式、测试、烧录——你会对「做产品」这件事有完全不同的手感。



