Skip to content
cgzjsPublic

About

InkMate,一款基于 ESP32 的开源墨水屏随身挂件。集电子书阅读、六级与雅思单词学习、每日学习计划、记忆复习、时钟及趣味抽签于一体,支持通过网页管理内容、查看设备状态和 OTA 更新,兼容 4MB / 16MB Flash。项目包含固件源码、PCB 硬件设计及轻薄 3D 打印外壳,采用四键操作、USB-C 充电与锂电池供电,让阅读和学习随身相伴。

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

墨伴 InkMate

把一本书、一组单词和一点生活灵感,装进口袋。

墨伴是一款基于 ESP32 的墨水屏随身挂件,把电子书阅读、单词学习、时钟、日常记录和趣味工具放在一块小屏幕上。可以挂在包上、放在桌边,也可以随手拿起来读几页、复习几个单词。

本体用四颗实体按键操作,内置 24 项功能。手机或电脑连接设备热点后,打开浏览器就能换书、管理词库、上传图片、设置功能菜单和更新固件,不需要安装专用 App。

本仓库保存最新版固件源码、PCB 机械参考、3D 打印外壳和使用文档。

墨伴轻薄外壳设计预览

外壳 CAD 预览。当前版本:固件 v2.8.0、外壳 v3。固件文件和设备热点名称沿用 FortunePager,Arduino 工程名为 CyberFortune_CZ04_2Buttons。

本体的 24 项功能

菜单包含下列 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 可以手动重抽。

还可以从网页上传并处理黑白图片,让它显示喜欢的图案;功能页面可以在网页中按喜好启用或隐藏。

用网页管理,不必安装专用 App

  • 上传或删除当前电子书,替换词库和图片。
  • 设置每日学习量,查看学习进度及设备状态。
  • 管理待办、自定义选项和部分日常记录。
  • 同时查看实际 Flash 容量、内容分区总量和剩余空间。
  • 上传应用固件进行 OTA 更新。

网页运行在设备热点中,直接通过本地地址访问。它分为 概览、内容、设备、系统四个标签页,详细操作见网页使用指南。

网页标签 包含内容 主要操作
概览 时间、背单词计划、喝水记录、心情 校时、切换词库、设置每日新词、调整饮水目标、同步心情
内容 食物与饮品候选、待办、电子书、词库文件、图片 编辑候选和待办,上传或替换内容
设备 本体的 24 项功能开关 勾选需要的功能,保存设备菜单
系统 固件更新和分区扩容提示 打开 OTA 页面,上传应用固件

网页第一次怎么用

  1. 给设备上电,热点会自动启动。
  2. 手机或电脑连接 FortunePager,密码 12345678。手机提示“无互联网”时,选择保持连接。
  3. 浏览器打开 http://192.168.4.1/。
  4. 在“概览”点击“同步手机时间”,再选六级或雅思词库、填写每日新词数量,点击“保存学习计划”。
  5. 在“内容”选择电子书,点击“上传电子书”;也可以上传图片或编辑待办。
  6. 在“设备”勾选想保留的功能,点击“保存设备菜单”。
  7. 回到本体,用 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 与 16MB 的空间

项目 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,保留已有分区和内容。

第一次运行

1. 获取匹配的固件包

仓库保存源码;完整烧录包、OTA 应用文件和打印 ZIP 使用 Releases 进行分发。

完整烧录包包括对应容量的完整镜像、公共 OTA 应用镜像和 flash_release.py。首次安装与后续 OTA 是两种不同流程。

2. 串口烧录或扩容

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,复位或重新上电。

3. 连接管理网页

进入设备 Wi-Fi 页面并启用热点,连接以下默认网络:

项目 默认值
热点名 FortunePager
热点密码 12345678
管理地址 http://192.168.4.1/
OTA 页面 http://192.168.4.1/update
OTA 用户名 / 密码 admin / 12345678

设备上电后自动启动热点,Wi-Fi 二维码页也能查看连接信息。手机保持连接该热点后访问管理地址,先校时,再上传内容和设置每日学习计划。

4. 后续更新

在 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 复制发布包;其他平台可调整工具路径后使用。

轻薄 3D 打印外壳

外壳使用与当前 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 目录,当前仓库只保留最新版。

使用说明

请勿用于商业项目。

About

InkMate,一款基于 ESP32 的开源墨水屏随身挂件。集电子书阅读、六级与雅思单词学习、每日学习计划、记忆复习、时钟及趣味抽签于一体,支持通过网页管理内容、查看设备状态和 OTA 更新,兼容 4MB / 16MB Flash。项目包含固件源码、PCB 硬件设计及轻薄 3D 打印外壳,采用四键操作、USB-C 充电与锂电池供电,让阅读和学习随身相伴。

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages