我在用 TraeCode + TRAE AI 通行证 做一个 WMLs 限定玩法,名字叫 《卜卜通行证》。
它不是社交软件,也不交换账号。它只想解决一个很小、但很真实的问题:在线下的人群里,怎样让喜欢同一支乐队的人,在不打扰彼此的前提下知道“原来这里还有一位老师”。

我遇到的问题
演唱会、展览和城市漫游里,WMLs 可能擦肩而过,但传统社交产品要求扫码、加好友、暴露身份,动作太重。我要的是一种弱连接:看见同类,但不索取关系。
硬件是 ESP32-C3 的 TRAE AI 通行证,资源很有限:8 MB Flash、三键交互、没有振动马达,还要同时处理 BLE、Wi-Fi、屏幕和本地状态。这个项目不只是画几个页面,而是要把交互、协议、存储和资源约束一起跑通。
我是怎么用 TraeCode 做的
我主要让 TraeCode 以 Agent 方式接手已有的 ESP-IDF + LVGL 工程,把需求拆成四层并持续落代码:
- 产品规则:把“认出同好”限制为匿名、短暂、无账号关系的弱连接。
- 感知与通信:设计 7/8 字节 BLE 广播负载,用匿名 ID、圈子码和符号完成附近识别。
- 系统调度:让 Wi-Fi 与 BLE 按 60 秒周期分时运行,并完整 deinit,避免小内存设备长期运行后堆内存被吃光。
- 成长与记忆:用地点档案驱动卜卜成长,并把状态写入 NVS,保证断电后不丢失。
过程中我让 TraeCode 继续完成:协议负载、地点指纹、LRU 熟客表、宠物阶段逻辑、LVGL 素材接入、Host 侧单元测试、固件构建检查,以及 GitHub Actions 报错修复。
最终做出的三个玩法
一、暗号识别
出门时选一个符号别在身上:萝卜、兔子、九号球,还有粉、红、绿、蓝、黄五色球。

设备通过 BLE 匿名广播。附近出现选择相同符号的人时,两边会同时亮起提示:不加好友、不留联系方式、不知道对方是谁,只是知道“这儿还有一位老师”。
二、九号球是心境,不是身份
《九号球》里唱的是:“也许我这一杆,又没办法进球。”
所以九号球表达的不是“我是谁”,而是“我今天不太好”。收到九号球时,设备不会播放动画或提示音,只显示一行克制的文字。当前硬件没有振动马达,因此我没有把“轻震”写成不存在的能力。
它不要求回应,也不建立关系。有人默默陪着,就够了。
三、卜卜会长大
卜卜只认一件事:你带它去过多少个不同的地方。
种子 → 芽 → 幼卜 → 卜卜 → 旅卜 → 世界卜
六个阶段分别在地点数 0、2、4、8、12、16 时解锁,只增不减。久不出门不会掉状态,因为它记的是走过的路,不是连续打卡。

成果与当前状态
目前已经完成:
- ESP32-C3 固件实现并成功构建,固件约 1.7 MB;
- 8 个暗号图标和 6 阶卜卜素材接入;
- 32 个地点档案与 LRU 熟客识别;
- BLE 匿名协议与 Wi-Fi/BLE 分时调度;
- 地点哈希、协议负载、LRU 淘汰、宠物阶段等 Host 侧单元测试;
- 固件已刷入设备,正在进行串口日志、多机相遇和进化边界的实机验证。
我刻意把“已经构建通过”和“仍待实机验证”分开写。AI 能显著加快实现,但不能替硬件完成最后一公里的验证。
项目代码与素材:https://github.com/chenjie1129/MayDayFansInTraePassport/tree/feature/prd1-social-pet
效率对比
以前做这类嵌入式玩法,我需要在需求文档、协议字段、NVS 布局、LVGL 资源、编译日志和测试代码之间反复切换。TraeCode 介入后,这些内容可以在同一代码库上下文里连续推进:从需求拆解,到实现、构建、修复 CI,再到刷机验证准备,形成了一条完整闭环。
对我最有价值的不是“生成了多少代码”,而是它能持续记住硬约束:不能覆盖设备身份分区、NVS 预算约 2.5 KB、Wi-Fi/BLE 必须分时释放资源、硬件没有振动马达、核心逻辑必须能脱离硬件做 Host 测试。
我总结的三个经验
- 先把硬件边界写成不可违反的约束,再让 Agent 规划,效果比只描述功能稳定得多。
- 协议、状态机和进化规则先做纯逻辑模块与 Host 单测,真机只验证硬件相关部分。
- 对 AI 产出的“完成”保持怀疑:构建通过、单测通过、刷机成功、多机实测,是四件不同的事。
《卜卜通行证》想做的不是更强的社交,而是一种更轻的相认:在人群里知道彼此存在,然后把选择权留给两个人。
