AI Passport:一块不需要联网的电子工牌
这是 AI Passport 的工牌固件。它把这块 240 × 320 的小屏做成一张电子工牌:显示照片、姓名和一句自我介绍,也可以额外存三张全屏图片,随手切换。
它不连 iPhone,也不需要蓝牙。配置通过设备自己开的临时热点完成,用手机浏览器就能改,不用装 App,也不用连互联网。网页、样式和脚本全部嵌在固件里。
项目已开源,源代码与最新进展可以在 GitHub:im-naaran/ai-passport-badge 查看。
它显示什么
工牌
照片固定 200 × 200,可以是方形、圆角或圆形。姓名占一行,下面是一条可选的自定义文字,最多显示两行。
照片的裁剪、缩放、旋转和形状都在浏览器里完成。设备收到的已经是一张处理好的 RGB565 图片,所以换形状不需要额外内存,也不用在设备上跑图片解码。没有配置过资料时,设备显示内置的默认工牌,不会是一片空白。
三张个性化图片
除了工牌,还能存三张 240 × 320 的全屏图片,用来放梗图、状态或者其他想显示的东西。网页上可以上传、裁剪、覆盖和清空;设备上短按上、下键,在工牌和有内容的图片之间循环,空槽会自动跳过。
设置
长按确认键进入设置。里面只有展示相关的内容:Wi-Fi 热点、自动息屏、屏幕亮度和电量。亮度分五档,默认 60%。工牌页本身不显示电量和标题,整块屏幕都留给内容。
硬件与实现
硬件就是 AI Passport 本身:ESP32-C3、240 × 320 的 ST7789 屏幕、CW2017 电量计、三枚按键(共用一路 ADC)、8 MB Flash,没有 PSRAM。固件基于 ESP-IDF 和 LVGL,使用 PlatformIO 构建。
AI Passport 有两套独立固件:一套负责消息和音乐,一套负责工牌和个性化展示。拆开的原因是 C3 没有 PSRAM。如果把消息、音乐、蓝牙、Wi-Fi、工牌和图片都放进一个镜像,运行内存会很紧张,生命周期也会复杂很多。这块工牌固件在编译阶段就完全排除了 BLE、ANCS 和 AMS,只保留展示和配置需要的部分。
存储按「断电不能坏」来做。工牌资料放在独立的 badge_data 分区,双槽轮流写:先写空闲的那一槽,读回来校验 CRC,最后才写提交标记;中途断电或写入失败,就回退到上一份完整记录。三张个性化图片放在单独的 1 MiB 分区,每张图同样保留两份副本。使用普通上传流程时,只写应用区,不会碰这些数据和 cardid 分区。
一些取舍
- 它是一块显示屏,不是智能工牌:不做考勤、定位、NFC,也不记录谁看过它。
- 不提供触摸。三枚实体按键就是全部交互;息屏后的第一次按键只负责唤醒,不会误删图片或改掉设置。
- 不保存原图。网页先把图片转换成 240 × 320 或 200 × 200 的 RGB565,再上传给设备,设备上没有通用图片解码器。
- 热点是开放的,也没有后台服务。它适合在工位旁边配置一下,不适合长期开着。
- 工牌和消息、音乐是两套固件,刷在同一块硬件上,但不会同时运行。
它想做的事情很简单:把一张工牌和几张想放的图,放进一块抬眼就能看见、不用解锁的屏幕里。