ArduBook OS 是一个运行在 Arduino Uno R3 上的开源电子书阅读器系统。
它在极其有限的硬件资源(32KB Flash, 2KB RAM)下,实现了 FAT32 文件系统读取、GB2312 中文硬解码渲染、图形化 UI、触控操作以及防掉电智能书签系统。
- 📚 原生中文支持:基于
HZK16字库的 GB2312 汉字硬解码渲染,显示效果锐利。 - 💾 文件浏览器:读取 SD 卡根目录下的
.txt文件列表(支持翻页/滚动显示逻辑的简化版)。 - 👆 触控交互:支持点击翻页、菜单选择、设置操作。
- 🔖 智能书签系统:
- 退出时自动保存阅读进度。
- 防篡改机制:自动校验文件完整性,防止死机。
- 历史回溯:保存最近 50 页的历史栈,随时可以完美回翻。
- ⚙️ 设置中心:支持一键清除历史记录、查看系统信息。
- ⚡ 内存管理优化:采用独创的 RAM 分时复用技术与 F-Macro 优化,在 2KB 内存中稳定运行。
- 🛡️ 断电记忆:使用
.SAV文件保存状态,断电后重启即可接着读。
本项目成本极低,核心硬件仅需两样:
- 开发板:Arduino Uno R3 (原版或国产克隆版均可)。
- 屏幕模块:2.4英寸 TFT 触摸屏扩展板 (Shield)。
- 驱动芯片:必须支持 ILI9341 (ID: 0x9341)。
- 接口类型:8-bit Parallel (并口),直接插在 Uno 上的那种 Shield。
- 触摸芯片:电阻屏 (Resistive Touch)。
- 存储:MicroSD 卡 (TF卡) 。
- 容量建议:32GB 以下。
- 格式:必须格式化为 FAT32。
请在 Arduino IDE 的 Library Manager (库管理器) 中安装以下库:
- Adafruit GFX Library (by Adafruit)
- Adafruit TouchScreen (by Adafruit)
- MCUFRIEND_kbv (by David Prentice) - 需要特殊修改,详情请见修改库文件
- SD (Arduino 内置库)
- SPI (Arduino 内置库)
这一步至关重要!如果不做,代码将无法编译上传(提示存储空间不足)。
您可直接使用已经修改好的 MCUFRIEND_kbv 模板,替换原生 Documents/Arduino/libraries/MCUFRIEND_kbv/ 下。
如果仍出现问题,请尝试手动修改。
由于 Arduino Uno 的 Flash 空间只有 32KB,而 MCUFRIEND_kbv 库默认开启了数十种屏幕驱动支持,导致体积极其庞大。我们需要手动裁剪库文件,只保留 ILI9341 驱动。
- 找到 Arduino 库文件夹,通常位于:
Documents/Arduino/libraries/MCUFRIEND_kbv/
- 用记事本或代码编辑器打开
MCUFRIEND_kbv.cpp文件。 - 找到文件开头的一大堆
#define SUPPORT_xxxx。 - 将所有的
#define SUPPORT_...全部注释掉(在前面加//)!- 注意:ILI9341 是该库的核心驱动,不需要
#define开启,注释掉其他所有驱动后,9341 依然可用。
- 注意:ILI9341 是该库的核心驱动,不需要
修改示例:
//#define SUPPORT_0139
//#define SUPPORT_0154
//#define SUPPORT_1289
// ... 把它们全部注释掉 ...
//#define SUPPORT_9488_555- 保存文件。此时你的 Flash 占用将从 104% 降至 92% 左右。
- 将 SD 卡格式化为 FAT32。
- 准备字库:
- 请自行在互联网搜索下载
HZK16文件(16x16点阵汉字库,文件大小约为 267KB)。 - 将
HZK16文件放入 SD 卡根目录。 - (注意:由于版权原因,本仓库不提供该字库文件)
- 请自行在互联网搜索下载
- 准备电子书:
- 将你的小说文件保存为
.txt格式。 - 文件名:建议使用英文或数字(如
book1.txt),避免中文文件名乱码。 - 编码格式:必须是 ANSI (GB2312) 编码!不要使用 UTF-8,否则显示乱码。
- 将
.txt文件放入 SD 卡根目录。
- 将你的小说文件保存为
- 下载本仓库代码。
- 使用 Arduino IDE 打开
ArduBook_OS.ino。 - 连接 Arduino Uno,选择正确的端口。
- 点击上传。
代码中包含了一组默认的触摸校准数据:
const int TS_LEFT=909, TS_RT=252, TS_TOP=382, TS_BOT=759;如果你的触摸不准(点击偏移或方向相反),请先运行 MCUFRIEND_kbv 库自带的 TouchScreen_Calibr_native 示例程序,获取你屏幕的专属参数,并替换代码开头的这行数值。
- 主菜单:
- 列表显示 SD 卡中的 TXT 书籍。
- 上次阅读的书籍左侧会有
*号标记。 - 点击文件名开始阅读。
- 点击底部
[ SETTINGS ]进入设置。
- 阅读界面:
- 点击屏幕右侧:下一页。
- 点击屏幕左侧:上一页。
- 点击右上角
[X]:保存进度并返回主菜单。
- 设置界面:
- Clear History:删除所有书签和记录(慎用)。
- About:显示系统版本与 Logo。
本项目采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议 进行许可。在进行分发、传播时,必须保留原作者署名。禁止用于商业用途,不得售卖本项目或其衍生产品。如果你修改了代码,必须使用相同的协议开源,并保留原作者署名。
- HZK16 字库:本仓库不包含此文件。该字库版权归原作者/公司所有。本项目仅通过算法读取该文件以实现渲染,不涉及分发。
- Arduino Libraries:依赖的第三方库遵循其各自的开源协议。
- 项目 Logo (Open-ArduBook 和 ArduBook OS) 是粉丝艺术致敬作品。单词 "Book" 中的 "oo" 符号参考了 Arduino 的无限循环标志,整体设计风格致敬了 HarmonyOS 标志的优雅设计语言。
- Arduino 名称和徽标是 Arduino LLC 的商标。本项目是社区作品,不隶属于 Arduino 官方,也未获得其背书或关联。
感谢 David Prentice 开发了伟大的 MCUFRIEND_kbv 库,没有它,Uno 驱动屏幕将变得异常艰难。
如果你有兴趣将本项目移植到 ESP32 或 STM32,欢迎 Fork 并提交 PR!由于 Uno 资源已耗尽,本项目在 Uno 平台的功能开发可能将进入长期稳定状态。目前的 v1.0 (Stable) 已经过大量文件验证,可供使用。你也可以使用官方中英文测试示例 test_book.txt 进行测试。
Enjoy Reading! ✨ Developed by SRInternet




