帧影(FrameFilm)是一套彩色电子纸系列产品及其配套工具。
硬件包括冰箱贴(基础版 / Pro)、桌面电子相册 Max、通行证版 Ark 和墨水屏底座 Dock。各产品均使用彩色电子纸屏幕,可断电保留画面,支持蓝牙、WiFi 或 USB 连接,接收来自手机、网页或云端服务的图片并显示。
“帧影”取”一帧一影,定格时光”之意,英文名 FrameFilm 由”帧”(frame)与”胶片”(film)组成。
配套软件包括设备端 app(图片 / 模板 / 时钟 / 动图 / 通行证)、Web 工具 ForFilm、微信小程序、Flutter 手机 App,以及局域网部署的 Film-hub 云服务。
| 产品 | 固件目录 | 屏幕 | 特点 |
|---|---|---|---|
| 冰箱贴 基础版 | firmware/frame_film(FRAMEFILM_STD) |
3.6” 600×400 | 旋转编码器(带按键)、WS2812 灯 |
| 冰箱贴 Pro 版 | firmware/frame_film(FRAMEFILM_PRO) |
3.68” 792×528 | 三按键、WiFi、无线充电 |
| 电子相册 Max 版 | firmware/frame_film(FRAMEFILM_MAX) |
7.09” 1200×1600 双面板 | 大屏电子相册、三按键、无 LED |
| 通行证版 Ark | firmware/frame_film_ark |
3.70” 720×480 | 单机型;含 app 框架与 LVGL UI 层 |
| 墨水屏底座 Dock | firmware/frame_film_dock |
3.64” 760×568 | USB 复合设备:声卡 + HID 键盘 + CDC 串口 |
| 小萤 FilmReader | 衍生整机(FrameFilm 主板 + CrossMux 固件) | 3.97” 800×480 四灰阶 | 黑白墨水屏阅读器;四键、SD 卡、无线充电 |
基础版 / Pro / 电子相册 Max 三机型共用同一套固件,靠机型宏 +
sdkconfig编译隔离;屏幕可在hal_epd.h中按机型自由选择(见下方「可选屏幕」)。
各产品的原理图、PCB、BOM、外壳与生产文件均在立创开源平台:
| 工程 | 说明 |
|---|---|
| FrameFilm 标准版 | 冰箱贴基础版,E6 全彩 V2 |
| FrameFilm 星火版 | 电路优化版:NU1680 无线充电、32pin 3.7” E6 与 24pin 1.54” E6 兼容,提供三个硬件版本 |
| FrameFilm Dock | 墨水屏底座(声卡 / HID / CDC) |
| 小萤 FilmReader | 3.97” 黑白墨水屏阅读器衍生整机 |
衍生模块:
| 模块 | 说明 |
|---|---|
| E-Ink 彩色 E6 墨水屏驱动模块 | 适配 3.6 / 4 / 7.3 寸微雪、佳显 E6 彩色墨水屏 |
| NU1680 无线充电接收模块 | 5V / 1A,支持 Qi,15×10×0.8 mm,可选防倒灌,MIT 许可 |
主板设计与固件以本仓库为准;立创工程用于打样与复刻,BOM、装配与打样参数以各自工程附件为准。
0x4E)与时间同步(0x4D)。三条固件线均按 film_service → film_hal → film_sys 单向分层,不得逆依赖。
| 组件 | 说明 | frame_film |
frame_film_ark |
frame_film_dock |
|---|---|---|---|---|
film_sys |
系统初始化、日志、配置、事件总线 | ✅ | ✅ | ✅ |
film_service |
BLE 通信、文件管理、照片播放、参数存储 | ✅ | ✅ | ✅ |
film_hal |
电子纸、电池、LED、输入、SD、USB | ✅ | ✅ | ✅ |
film_app |
app 框架:调度、菜单、设置、内容 app | — | ✅ | — |
film_ui |
LVGL UI 层:页面生命周期、显示链路、资源 | — | ✅ | — |
Dock 的 BLE 与 USB 共用同一套命令解析(
film_service/src/service_cmd.c),新增命令只需改这一处。
屏幕不与机型绑定:在 hal_epd.h 的对应机型分支内,把目标 EPD_SELECT_E6_* 置 1、其余置 0 即可切换。
| 屏幕 | 分辨率 | 面板 ID | 宏 | 驱动 |
|---|---|---|---|---|
| 3.68” | 792×528 | 0x01 | EPD_SELECT_E6_3_68_792_528 |
hal_epd_368.c |
| 3.70” | 720×480 | 0x02 | EPD_SELECT_E6_3_70_720_480 |
hal_epd_370.c |
| 3.6” | 600×400 | 0x03 | EPD_SELECT_E6_3_60_600_400 |
hal_epd_360.c |
| 1.54” | 240×240 | 0x04 | EPD_SELECT_E6_1_54_240_240 |
— |
| 7.09” 双面板 | 1200×1600 | 0x05 | EPD_SELECT_E6_7_09_1600_1200 |
hal_epd_709.c |
| 3.64” | 760×568 | 0x06 | EPD_SELECT_E6_3_64_760_568 |
hal_epd_364.c(Dock 默认) |
| 3.98” | 768×552 | 0x07 | EPD_SELECT_E6_3_98_768_552 |
hal_epd_398.c |
| 3.98” 四色 | 768×552 | 0x08 | EPD_SELECT_E4_3_98_768_552 |
hal_epd_398e4.c |
| 3.97” 黑白 | 800×480 | — | — | FilmReader 采用 SSD1677(四灰阶),本仓库无驱动 |
0x07(SE0398 3.98”)为新增可选屏,默认关闭,需手动置1启用;它走 4 线 SPI + DC,仅适用于 STD / Pro 的接线(Max 无 DC 脚)。0x08(JD79665AA 3.98” 四色)只有黑/白/黄/红,ForFilm 检测到该面板后自动按四色出图;全刷约 15 s,同样只适用于 STD / Pro 接线。 3.97” 黑白屏(SSD1677)用于衍生整机「小萤 FilmReader」,运行 CrossMux 固件,本仓库三套固件均未包含其驱动,详见下方「小萤 FilmReader」。 面板 ID 随0x42回包给连接端,客户端据此校正分辨率;客户端机型仍以 BLE 广播名为准。
| 参数 | 规格 |
|---|---|
| 主控芯片 | ESP32-S3 WROOM N16R8 |
| 显示屏 | 彩色电子纸 3.6” 600×400 (WFT驱动) |
| 存储 | TF卡 最大32GB 或 内置SDnand |
| 通信 | 蓝牙 BLE 4.2 |
| 交互 | 旋转编码器(带按键) |
| 电池 | 锂电池 304040规格 1.5mm插头 |
| 尺寸 | 约 92 × 60 × 7 mm |
| 安装方式 | 背部磁吸 磁铁 2x12mm-1mm 1x15mm-2mm |
| 参数 | 规格 |
|---|---|
| 主控芯片 | ESP32-S3 mini N4R2 |
| 显示屏 | 彩色电子纸 3.68” 792×528 (SE0368-C驱动) |
| 存储 | 内置SDnand |
| 通信 | 蓝牙 BLE 4.2 / WiFi |
| 交互 | 三按键 |
| 电池 | 锂电池 244147规格 |
| 充电 | 支持无线充电(兼容 MagSafe 充电器) |
| 尺寸 | 约 90 × 59 × 5 mm |
| 安装方式 | 背部磁吸 magasafe磁环 |
| 参数 | 规格 |
|---|---|
| 主控芯片 | ESP32-S3 N16R8(16MB Flash / Octal PSRAM) |
| 显示屏 | 彩色电子纸 7.09” 1200×1600 双面板 |
| 存储 | TF卡 |
| 通信 | 蓝牙 BLE 4.2 |
| 交互 | 三按键 |
| 灯效 | 无 RGB LED |
| 电池 | 无电池电量检测 |
| 参数 | 规格 |
|---|---|
| 主控芯片 | ESP32-S3 N4R2(4MB Flash / Quad PSRAM) |
| 显示屏 | 彩色电子纸 3.70” 720×480(面板 ID 0x02) |
| 存储 | TF卡(带检测脚) |
| 通信 | 蓝牙 BLE 4.2 |
| 交互 | 三按键(上 / 下 / 确认,低有效) |
| 灯效 | WS2812(白=未连接、绿=已连接、红=低电) |
| 电池 | 锂电池,带电量检测 |
| 参数 | 规格 |
|---|---|
| 主控芯片 | ESP32-S3 N16R8(16MB Flash / Octal PSRAM) |
| 显示屏 | 彩色电子纸 3.64” 760×568(面板 ID 0x06) |
| USB | 复合设备:UAC 声卡 + HID 键盘 + CDC 虚拟串口(VID/PID 0x303A/0x8000) |
| 音频 | ES8311 + NS4150B 语音模块(麦克风 + 扬声器) |
| 交互 | 三按键(作为 PC 键盘键值发送) |
| 通信 | 蓝牙 BLE 4.2 + USB |
小萤 FilmReader 是基于 FrameFilm 主板制作的 3.97 寸黑白墨水屏阅读器,属于 FrameFilm 的衍生整机:核心电路沿用 FrameFilm 主板,主要在 PCB 拼接(panel)、外壳、前面板与整机装配上适配。它没有触摸与背光,只有四个按键,价值在于可低成本复刻、改固件与换外壳。
立创开源工程(原理图 / PCB / BOM / 外壳 / 前面板): https://oshwhub.com/kiritro/project_bppplpbn
| 参数 | 规格 |
|---|---|
| 主控芯片 | ESP32-S3(16MB Flash / 8MB PSRAM) |
| 显示屏 | 黑白四灰阶 3.97” 800×480(SSD1677) |
| 存储 | SD 卡(4-bit SDMMC) |
| 交互 | 四按键:UP / DOWN / CONFIRM+PWR / BACK |
| 充电 | MagSafe 无线充电 |
| 其他 | 32.768 kHz RTC 晶振、WS2812 状态灯、深度休眠外设断电 |
| 主板配置 | 沿用 FrameFilm 主板;焊点 P1 断开 / P2 断开 / P3 连接 |
firmware.factory.binFilmReader外壳.3mf、BOM_Board_FilmReader材料清单.xlsx 均在立创工程附件中;前面板按亚克力 0.8 mm、要背胶、普通遮光、背面印刷打样主板设计与 FrameFilm 共用,遵循本仓库 GPLv3 许可;阅读器固件与整机资料分别在 CrossMux 仓库与立创工程维护。
FrameFilm/
├── assets/ # 资源文件
│ └── pic/ # 产品图片和渲染图
│
├── docs/ # 文档资料
│ ├── blecmd/ # BLE 通信协议文档
│ ├── datasheet/ # 芯片和模块数据手册
│ ├── film/ # film 文件格式规范
│ ├── filmhub/ # 云端相框服务设计文档
│ ├── filmagent/ # 语音交互(FilmAgent)设计与音频驱动
│ ├── hardware/ # 硬件规格说明文档
│ ├── knowledge/ # AI 知识库(架构/规范/命令速查)
│ ├── wifi/ # WiFi 功能说明
│ ├── ci-builds.md # Ark 自动构建与发布说明
│ └── ARK_CHANGELOG.md # 通行证版更新日志
│
├── firmware/ # 设备固件 (ESP-IDF)
│ ├── frame_film/ # 冰箱贴 / 电子相册本体(三机型,可切换屏幕)
│ │ ├── components/
│ │ │ ├── film_service/ # 服务层
│ │ │ ├── film_sys/ # 系统层
│ │ │ └── film_hal/ # 硬件抽象层
│ │ ├── main/ # 主程序
│ │ └── sdkconfig_* # 各机型配置 (std/pro/max)
│ ├── frame_film_ark/ # 通行证版(单机型;含 app 框架与 UI 层)
│ └── frame_film_dock/ # 墨水屏底座(单机型;BLE + USB)
│
├── app/ # 手机 App
│ ├── android/ # Ark Android 客户端(Kotlin 通信内核)
│ └── flutter_app/ # Ark Flutter 客户端(当前主线 UI)
│
├── hardware/ # 硬件设计
│ ├── pcb/ # PCB 电路原理图
│ └── model/ # 外壳 3D 模型
│
├── server/ # 云端服务
│ └── filmhub/ # film-hub(局域网后端 + 管理前端)
│ ├── backend/ # 后端 API 服务 (FastAPI)
│ └── web/ # Web 管理前端
│
├── tools/ # 开发工具
│ ├── ForFilm/ # Web 端相框管理工具(BLE / USB / 串口)
│ ├── wechart/ # 微信小程序
│ ├── framefilm-dock-upload/ # 底座 USB 传图工具
│ ├── convert/ # 照片转换工具
│ ├── ui-mockup/ # 设备端 UI 视觉设计稿
│ ├── ui-assets/ # UI 图标 / 开机图资源生成
│ ├── ui-fonts/ # UI 字库生成
│ ├── clock-font/ # 时钟大字号字库生成
│ ├── ark-font/ # 通行证字库生成
│ ├── ark-pass-editor/ # 通行证档案编辑工具
│ ├── ark-ui-simulator/ # Ark UI 模拟器
│ └── film_viewer/ # film 文件查看器
│
├── AGENTS.md # AI 开发指南
├── README.md # 项目说明文档(中文)
├── README.en.md # 英文说明文档
└── LICENSE # 许可证
固件分三个工程,只有 frame_film 需要先做机型配置(替换 sdkconfig + 修改机型宏 + 选屏);frame_film_ark(通行证版,单机型,支持 4MB/Quad 与 16MB/Octal 两种存储变体)默认直接编译,切换方式见下文;frame_film_dock(底座,单机型)直接编译烧录。
app 框架与 UI 层(LVGL UI 层 + app 层)仅
frame_film_ark有;frame_film是经典固件(无 app 层 / UI 层)。
以下为 frame_film(三机型) 的配置步骤:
sdkconfig:将 firmware/frame_film/sdkconfig_<机型> 复制为 sdkconfigfirmware/frame_film/components/film_sys/inc/sys_cfg.h,将对应机型宏置 1(三选一)firmware/frame_film/components/film_hal/inc/hal_epd.h,在对应机型分支内将目标屏幕的 EPD_SELECT_E6_* 置 1、其余置 0| 机型 | 替换用的 sdkconfig | sys_cfg.h 宏 | 默认屏幕 |
|---|---|---|---|
| 基础版 | sdkconfig_std |
FRAMEFILM_STD |
3.6” 600×400 |
| Pro 版 | sdkconfig_pro |
FRAMEFILM_PRO |
3.68” 792×528 |
| Max 版(电子相册) | sdkconfig_max |
FRAMEFILM_MAX |
7.09” 1200×1600 双面板 |
可选屏幕与对应宏见上方「可选屏幕」表。
cd firmware/frame_film
cp sdkconfig_std sdkconfig # 示例:基础版;Pro/Max 版同理
idf.py build
idf.py flash monitor
ForFilm 的「设置 → 串口烧录 · 完整固件」通过浏览器的 Web Serial 直接写 Flash,等价于 idf.py flash。相比蓝牙 OTA 更快,且能刷 bootloader 与分区表(OTA 只能写应用分区)。
tools 为根启动静态服务)。build/ 下的 bootloader.bin、partition-table.bin、ota_data_initial.bin、frame_film.bin,偏移按文件名自动匹配(0x0 / 0x8000 / 0x29000 / 0x30000)。idf.py merge-bin 生成的合并镜像,页面会按文件内容识别并从 0x0 写入。烧录前先关闭
idf.py monitor等占用串口的程序。只选应用镜像时不要勾选「合并镜像」,否则会从 0x0 写入并覆盖 bootloader。frame_film_ark与frame_film_dock的build/产物同样可以用这个入口烧录。
通行证版 / 底座:
cd firmware/frame_film_ark # 通行证版 FRAMEFILMARK(3.70" 720×480,三按键)
idf.py build flash monitor # 默认 n4r2:4MB Flash / Quad PSRAM
.\build.ps1 n16r8 flash COM15 # n16r8:16MB Flash / Octal PSRAM(PowerShell)
cd firmware/frame_film_dock # 墨水屏底座 FRAMEFILMDOCK(3.64" 760×568)
idf.py build flash monitor
frame_film_ark有sdkconfig(n4r2)与sdkconfig_n16r8两份,用build.ps1或 VS Code 的ESP-IDF: 选择项目配置切换;frame_film_dock只有一份sdkconfig。两者都不需要改机型 / 屏幕宏。
项目已包含 .vscode/settings.json(IDF 路径已配置),按以下步骤即可编译烧录:
firmware/frame_film(通行证版选 firmware/frame_film_ark,底座选 firmware/frame_film_dock)sdkconfig + 修改 sys_cfg.h 机型宏)—— 仅 frame_film 需要;frame_film_ark / frame_film_dock 跳过此步ESP-IDF: 选择项目配置 → n4r2(4MB/Quad,默认)或 n16r8(16MB/Octal);构建目录分别为 build_n4r2 / build_n16r8Ctrl+E 然后 BCtrl+E 然后 FCtrl+E 然后 M(Ctrl+] 退出)提示:首次构建时间较长属正常;若更换串口/芯片,在底部状态栏重新选择即可。
Ark 的手机端当前主线是 Flutter 工程(app/flutter_app/),复用 app/android/ 里的 Kotlin BLE / WiFi Direct 通信内核,不使用 WebView:
构建、验证范围与签名配置见 app/flutter_app/README.md 与 docs/ci-builds.md。
底座插到电脑后会枚举出虚拟串口,可直接用现成脚本传图:
# 上传一张图片(自动找串口 → 握手 → 转换 → 上传 → 回读校验)
python tools/framefilm-dock-upload/scripts/dock_upload.py photo.jpg
# 列出 / 校验设备上已有的 film 文件
python tools/framefilm-dock-upload/scripts/dock_upload.py --list
完整参数与排查表见 tools/framefilm-dock-upload/SKILL.md。
ForFilm Web 工具,支持以下功能:
在线工具(GitHub Pages): 👉 FrameFilm Web 工具
FrameFilm 微信小程序,方便在手机端管理和传输照片:
小程序码,扫码即可体验。

局域网部署的云端相框服务,为设备提供 WiFi 内容推送、模板渲染与远程管理能力:
技术栈: FastAPI + SQLite + Vue 3,单机局域网部署。
server/filmhub/backend/ | Web 前端:server/filmhub/web/面向底座的语音交互方向:语音对话驱动墨水屏生成画面,并复用 Film-hub 后端。当前处于设计与音频驱动阶段,见 docs/filmagent/。
详细的开发文档请参考各模块 README:
技术文档目录:
本项目(FrameFilm/帧影)为开源学习与兴趣制作项目,所提供的一切源码、硬件设计、文档及资料均按「现状」提供,仅供学习、研究与非商业用途参考。
使用本项目即视为已阅读并同意上述条款。
本项目基于 GNU General Public License v3.0 (GPLv3) 开源。