把一本书、一组单词和一点生活灵感,装进口袋。
墨伴是一款基于 ESP32 的墨水屏随身挂件,把电子书阅读、单词学习、时钟、日常记录和趣味工具放在一块小屏幕上。可以挂在包上、放在桌边,也可以随手拿起来读几页、复习几个单词。
本体用四颗实体按键操作,内置 24 项功能。手机或电脑连接设备热点后,打开浏览器就能换书、管理词库、上传图片、设置功能菜单和更新固件,不需要安装专用 App。
本仓库保存最新版固件源码、PCB 机械参考、3D 打印外壳和使用文档。
外壳 CAD 预览。当前版本:固件 v2.8.0、外壳 v3。固件文件和设备热点名称沿用
FortunePager,Arduino 工程名为CyberFortune_CZ04_2Buttons。
菜单包含下列 24 项应用功能,另外还有首页和 Wi-Fi 二维码页,合计 26 个页面。应用功能可以在网页中单独显示或隐藏。
| 序号 | 功能 | 可以做什么 | 页面中按 OK |
|---|---|---|---|
| 1 | 时钟 | 显示 PCF8563 的日期与时间 | 进入年月日时分设置 |
| 2 | 今日运势 | 抽取每日运势和提示 | 重新抽取 |
| 3 | 塔罗牌 | 查看单张塔罗、正逆位及解读 | 重新抽牌 |
| 4 | 今天吃什么 | 从内置和自定义食物中选择 | 重新推荐 |
| 5 | 今天喝什么 | 从内置和自定义饮品中选择 | 重新推荐 |
| 6 | 六面骰子 | 掷出 1~6 的点数 | 再掷一次 |
| 7 | 二十面骰子 | 掷出 1~20 的点数及判定 | 再掷一次 |
| 8 | 抛硬币 | 随机选择正面或反面 | 再抛一次 |
| 9 | 随机数 | 抽取 1~100 的数字 | 再抽一次 |
| 10 | 今日关键词 | 获得当天的关键词和提示 | 换一个关键词 |
| 11 | 是非神谕 | 给出方向提示与建议 | 重新抽取 |
| 12 | 猜拳 | 随机出石头、剪刀或布 | 重新出拳 |
| 13 | 今日宜忌 | 显示今日宜做与暂缓的事项 | 重新生成 |
| 14 | 幸运坐标 | 显示数字、方位和颜色 | 重新生成 |
| 15 | 我的图片 | 显示网页上传的黑白图片 | 刷新图片 |
| 16 | 设备状态 | 查看固件、运行及连接信息 | 刷新状态 |
| 17 | YES / NO | 随机给出 YES 或 NO | 再选一次 |
| 18 | 番茄钟 | 25 分钟专注、5 分钟休息 | 开始或暂停 |
| 19 | 待办事项 | 显示完成数量和待办,最多存储 12 项 | 完成下一条未完成事项 |
| 20 | 电子书 | 阅读网页上传的文字内容 | 从第 1 页开始阅读 |
| 21 | 喝水记录 | 按杯记录当天饮水量和目标完成度 | 记录一杯 |
| 22 | 心情指示器 | 显示心情文字和表情 | 切换下一种心情 |
| 23 | 三餐提醒 | 按时间提示早、中、晚餐,配合振动提醒 | 刷新当前提示 |
| 24 | 背单词 | 六级 / 雅思词库、每日新词与间隔复习 | 开始今日学习 |
更详细的按键、阅读和学习流程见本体操作指南。
在网页中上传 TXT、Markdown 或 DOCX 文档,再回到设备的“电子书”页面,按 OK 开始阅读,用 NEXT / PREV 前后翻页。DOCX 会在浏览器中提取正文,按纯文本排版显示,适合短篇、摘录和碎片阅读。
v2.8.0 使用分块上传和稀疏分页索引处理较大的文本。设备存储一份当前电子书,上传新书时替换原书。每次从电子书介绍页按 OK,都会从第 1 页开始阅读;阅读中按 OK 或 BACK 退出。
内置六级高频和雅思核心两套词库,也可以上传自己的 UTF-8 TSV 词库。在网页选择词库和每日新词数量,然后在本体上回忆、查看释义并评价记忆情况。
- 每日新词数量可在网页设置为 5~30,默认 10 个。
- 先显示单词,按 OK 查看释义,再根据记忆情况选择“忘记”“模糊”或“认识”。
- 优先处理到期复习,再补充当天的新词;到期较多时可分批继续学习。
- 记录每个词的阶段和下次复习日期,断电后保留进度。
- 采用阶段式间隔复习,根据记忆反馈安排下一次复习,间隔随阶段逐步延长,最长 60 天。
六级词库目前约 2,482 条,雅思词库约 4,974 条。词库来源与许可说明保存在数据目录。替换某个词库会重置该词库的学习进度,另一个词库不受影响。
PCF8563 提供日期和时间,网页可以校时。设备还提供番茄钟、待办、喝水记录、心情状态和三餐提醒等轻量功能。待办最多保存 12 项,番茄钟采用 25 分钟专注、5 分钟休息。
日期相关功能依赖正确的 RTC 时间。首次使用或 RTC 时间失效后,应先校时,再开始单词计划和每日记录。
抽签、塔罗、今天吃什么、今天喝什么、D6 / D20 骰子、抛硬币、随机数和 YES / NO 等页面,可以用来娱乐或帮自己做一个轻松的小选择。部分每日结果会保存,按 OK 可以手动重抽。
还可以从网页上传并处理黑白图片,让它显示喜欢的图案;功能页面可以在网页中按喜好启用或隐藏。
- 上传或删除当前电子书,替换词库和图片。
- 设置每日学习量,查看学习进度及设备状态。
- 管理待办、自定义选项和部分日常记录。
- 同时查看实际 Flash 容量、内容分区总量和剩余空间。
- 上传应用固件进行 OTA 更新。
网页运行在设备热点中,直接通过本地地址访问。它分为 概览、内容、设备、系统四个标签页,详细操作见网页使用指南。
| 网页标签 | 包含内容 | 主要操作 |
|---|---|---|
| 概览 | 时间、背单词计划、喝水记录、心情 | 校时、切换词库、设置每日新词、调整饮水目标、同步心情 |
| 内容 | 食物与饮品候选、待办、电子书、词库文件、图片 | 编辑候选和待办,上传或替换内容 |
| 设备 | 本体的 24 项功能开关 | 勾选需要的功能,保存设备菜单 |
| 系统 | 固件更新和分区扩容提示 | 打开 OTA 页面,上传应用固件 |
- 给设备上电,热点会自动启动。
- 手机或电脑连接
FortunePager,密码12345678。手机提示“无互联网”时,选择保持连接。 - 浏览器打开
http://192.168.4.1/。 - 在“概览”点击“同步手机时间”,再选六级或雅思词库、填写每日新词数量,点击“保存学习计划”。
- 在“内容”选择电子书,点击“上传电子书”;也可以上传图片或编辑待办。
- 在“设备”勾选想保留的功能,点击“保存设备菜单”。
- 回到本体,用 NEXT / PREV 找到相应功能,按 OK 使用。
网页顶端显示电池状态、固件版本、可用内存、Flash 容量和内容存储剩余空间。设置修改后点击对应的“保存”或“同步”按钮,页面下方会显示结果。
| 项目 | 当前设计 |
|---|---|
| 主控 | 经典 ESP32,兼容 4MB / 16MB Flash 配置 |
| 显示 | CZ04 墨水屏驱动,绘图区域 212 × 104 |
| 时钟 | PCF8563,I²C 连接 |
| 操作 | 四颗日常功能键,另有 BOOT 与 EN 维护按键 |
| 供电 | 单节锂电池、USB-C 充电相关电路 |
| 反馈 | 振动电机及驱动电路 |
| 外壳 | 3D 打印底壳、卡扣面盖、屏幕压框与四颗独立键帽 |
PCB 机械参考模型见 hardware/reference/BB2V1.step,器件与主要信号连接见硬件说明。
| PCB 位号 | 功能 | ESP32 GPIO |
|---|---|---|
| SW4 | NEXT,下一项 / 下一页 | GPIO32 |
| SW8 | PREV,上一项 / 上一页 | GPIO25 |
| SW5 | OK,确认 | GPIO33 |
| SW2 | BACK,返回 | GPIO26 |
单词评分时,PREV 对应“忘记”,OK 对应“模糊”,NEXT 对应“认识”;未显示释义时先按 OK 显示。SW1 是 EN 复位,SW6 是 GPIO0 / BOOT,面盖没有为这两个维护按键提供日常操作键帽。
平时用 NEXT / PREV 切换功能,OK 执行操作,BACK 返回首页。在首页再按 BACK 清屏,按任意功能键回到首页。阅读、单词学习和时钟设置有各自的按键操作,见本体操作指南。
| 项目 | 4MB Flash | 16MB Flash |
|---|---|---|
| 内容分区 | 640 KiB | 12.625 MiB |
| 单次电子书上传上限 | 256 KiB | 8 MiB |
| 单个词库上传上限 | 256 KiB / 5,000 词 | 2 MiB / 20,000 词 |
| 后续网页 OTA | 两种容量使用同一份应用固件 | 两种容量使用同一份应用固件 |
内容空间由电子书、词库、学习记录和图片等共享。表中是配置上限,实际还受剩余空间和保留空间限制。安全替换文件时,原文件和临时文件会同时占用空间;上传失败时保留旧文件。
使用旧 4MB 分区的 16MB 设备,先按烧录说明做一次串口扩容,内容空间即可增至约 12.6 MiB。后续使用同一份应用固件进行网页 OTA,保留已有分区和内容。
仓库保存源码;完整烧录包、OTA 应用文件和打印 ZIP 使用 Releases 进行分发。
完整烧录包包括对应容量的完整镜像、公共 OTA 应用镜像和 flash_release.py。首次安装与后续 OTA 是两种不同流程。
CH340 与主板共地,收发交叉:下载器 TX 接 ESP32 RX0,下载器 RX 接 ESP32 TX0。UART 信号必须为 3.3V 电平,不要把 5V 信号接到 ESP32 IO,也不要依赖小下载器的 3.3V 引脚承担整板供电。
按住 GPIO0 / BOOT,复位 EN 后再松开 BOOT,进入下载模式。关闭占用串口的监视器。在解压后的完整固件包中运行:
python .\flash_release.py --port COM5把 COM5 换成实际端口。脚本会先备份整个 Flash,识别 4MB / 16MB 容量,并检查受支持的旧分区布局。默认迁移只适用于对应 FortunePager 布局,不能用于任意第三方固件。
新板安装或主动清空设备内容时,才使用:
python .\flash_release.py --port COM5 --fresh--fresh 会替换设置、电子书和学习记录。保管好备份,不要将个人 Flash 备份上传到 GitHub。烧录完成后松开 BOOT,复位或重新上电。
进入设备 Wi-Fi 页面并启用热点,连接以下默认网络:
| 项目 | 默认值 |
|---|---|
| 热点名 | FortunePager |
| 热点密码 | 12345678 |
| 管理地址 | http://192.168.4.1/ |
| OTA 页面 | http://192.168.4.1/update |
| OTA 用户名 / 密码 | admin / 12345678 |
设备上电后自动启动热点,Wi-Fi 二维码页也能查看连接信息。手机保持连接该热点后访问管理地址,先校时,再上传内容和设置每日学习计划。
在 OTA 页面上传 FortunePager_v2.8.0_ota.bin 这类应用镜像。不要上传 *_full.bin、分区表或 LittleFS 镜像。普通 OTA 不会安装词库、重建分区或完成 16MB 扩容。
主工程位于 firmware/CyberFortune_CZ04_2Buttons。Arduino 要求主 .ino 与所在文件夹同名,所以请保留现有工程名。
已验证的构建使用 Arduino ESP32 Core 3.3.10,目标为经典 ESP32 Dev Module。主要外部库包括 Adafruit GFX、U8g2 for Adafruit GFX 及其依赖;WiFi、WebServer、LittleFS、Preferences 和 ESP32 QR Code 接口由相关 ESP32 软件包提供。
默认 partitions.csv 是安全的 4MB 配置,另有 partitions_16mb.csv。不要将 16MB 分区或完整镜像用于 4MB 芯片。项目应用槽约 1.625 MiB,IDE 默认约 1.25 MiB 的应用分区会导致“Sketch too big”,这不表示 RAM 耗尽。
Windows 上安装 Arduino IDE、对应 ESP32 Core、必要库和 Python 后,可在工程目录运行:
python .\tools\build_release.py构建脚本生成两种容量的完整烧录包和共同的 OTA 应用文件。脚本使用 Windows / Arduino IDE 工具路径,并向本机 Downloads 复制发布包;其他平台可调整工具路径后使用。
外壳使用与当前 PCB 匹配的轻薄结构,不沿用早期较厚的 BBV3 整体高度,只参考其卡扣结构。屏幕和四颗日常按键同处正面,电池位于背面,USB-C、拨动开关、通风孔、PCB 安装位和侧面挂扣均有对应空间。
当前 v3 的主要尺寸与修正:
- 主体约 87.1 × 56.4 × 14.8 mm,不含侧面挂扣;含突出的键帽,最大厚度约 16.2 mm。
- 按约 59 × 30 × 1 mm 屏幕设计,屏幕容纳槽为 60.2 × 31.2 mm,可视开窗为 55 × 26 mm。
- 屏幕压框取消原先依赖精细方槽的插入夹持结构,改为从内侧直接放入,用四颗 M1 螺丝固定。
- 螺丝直接拧入塑料导孔,没有建模螺纹,不需要螺母;建议 M1 × 2 mm,未经复核不要超过 2.5 mm。
- 键帽下部裙边缩短,顶部加高并放宽活动间隙;正常就位后约突出面盖 1.2~1.4 mm。
- 面板凹刻 NEXT / PREV / OK / BACK,字号 4 mm、凹深 0.6 mm。
- 挂扣位于侧面,孔径 5 mm。底壳与 v2 几何保持一致,已有 v2 底壳可继续使用。
打印时使用 enclosure/v3/print 下的七个 STL,单位毫米、比例 100%。这七个文件是底壳、面盖、压框和四颗键帽。STEP 用于编辑,不必把 STEP 再导入切片软件重新定向。
装配顺序、M1 导孔和屏幕保护说明见外壳装配指南。屏幕边缘需柔性绝缘缓冲,压框不得压迫有效显示区或排线焊接区。锂电池不能靠合盖挤压固定。
InkMate/
├─ README.md 项目首页
├─ THIRD_PARTY_NOTICES.md 词库、依赖和参考资料来源
├─ firmware/ v2.8.0 源码、词库与工具
├─ hardware/ PCB 机械参考及硬件说明
├─ enclosure/v3/ 最新打印件、STEP、生成源代码
├─ docs/ 使用说明、版本摘要、图片与验证记录
└─ licenses/ 非软件设计许可原文
旧版发布文件集中保存在仓库外的 InkMate_Archive 目录,当前仓库只保留最新版。
请勿用于商业项目。

