Skip to content

一个运行在 Arduino Uno R3 上的开源电子书阅读器系统。

License

Notifications You must be signed in to change notification settings

SRInternet/Open-ArduBook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Open-ArduBook-1080p-transp

License Platform Status Flash Language GitLab Stars

"Tiny Core, Infinite World"

ArduBook OS 是一个运行在 Arduino Uno R3 上的开源电子书阅读器系统

📖 简介 (Introduction)

ArduBook OS 是一个运行在 Arduino Uno R3 上的开源电子书阅读器系统。

它在极其有限的硬件资源(32KB Flash, 2KB RAM)下,实现了 FAT32 文件系统读取、GB2312 中文硬解码渲染、图形化 UI、触控操作以及防掉电智能书签系统


✨ 功能特性 (Features)

  • 📚 原生中文支持:基于 HZK16 字库的 GB2312 汉字硬解码渲染,显示效果锐利。
  • 💾 文件浏览器:读取 SD 卡根目录下的 .txt 文件列表(支持翻页/滚动显示逻辑的简化版)。
  • 👆 触控交互:支持点击翻页、菜单选择、设置操作。
  • 🔖 智能书签系统
    • 退出时自动保存阅读进度。
    • 防篡改机制:自动校验文件完整性,防止死机。
    • 历史回溯:保存最近 50 页的历史栈,随时可以完美回翻。
  • ⚙️ 设置中心:支持一键清除历史记录、查看系统信息。
  • 内存管理优化:采用独创的 RAM 分时复用技术与 F-Macro 优化,在 2KB 内存中稳定运行。
  • 🛡️ 断电记忆:使用 .SAV 文件保存状态,断电后重启即可接着读。

📸 图赏 (Gallery)

点击展开查看更多实物细节 / Click to view more photos
开机界面 阅读界面
侧面接线 书架界面

🛠️ 硬件清单 (Hardware Required)

本项目成本极低,核心硬件仅需两样:

  1. 开发板:Arduino Uno R3 (原版或国产克隆版均可)。
  2. 屏幕模块:2.4英寸 TFT 触摸屏扩展板 (Shield)。
    • 驱动芯片:必须支持 ILI9341 (ID: 0x9341)。
    • 接口类型:8-bit Parallel (并口),直接插在 Uno 上的那种 Shield。
    • 触摸芯片:电阻屏 (Resistive Touch)。
  3. 存储:MicroSD 卡 (TF卡) 。
    • 容量建议:32GB 以下。
    • 格式:必须格式化为 FAT32

📦 依赖库 (Dependencies)

请在 Arduino IDE 的 Library Manager (库管理器) 中安装以下库:

  1. Adafruit GFX Library (by Adafruit)
  2. Adafruit TouchScreen (by Adafruit)
  3. MCUFRIEND_kbv (by David Prentice) - 需要特殊修改,详情请见修改库文件
  4. SD (Arduino 内置库)
  5. SPI (Arduino 内置库)

⚠️ 修改库文件 (Crucial Hack)

这一步至关重要!如果不做,代码将无法编译上传(提示存储空间不足)。

直接使用修改模板

您可直接使用已经修改好的 MCUFRIEND_kbv 模板,替换原生 Documents/Arduino/libraries/MCUFRIEND_kbv/ 下。

如果仍出现问题,请尝试手动修改。

手动修改

由于 Arduino Uno 的 Flash 空间只有 32KB,而 MCUFRIEND_kbv 库默认开启了数十种屏幕驱动支持,导致体积极其庞大。我们需要手动裁剪库文件,只保留 ILI9341 驱动。

  1. 找到 Arduino 库文件夹,通常位于:
    • Documents/Arduino/libraries/MCUFRIEND_kbv/
  2. 用记事本或代码编辑器打开 MCUFRIEND_kbv.cpp 文件。
  3. 找到文件开头的一大堆 #define SUPPORT_xxxx
  4. 将所有的 #define SUPPORT_... 全部注释掉(在前面加 //)!
    • 注意:ILI9341 是该库的核心驱动,不需要 #define 开启,注释掉其他所有驱动后,9341 依然可用。

修改示例:

//#define SUPPORT_0139
//#define SUPPORT_0154
//#define SUPPORT_1289
// ... 把它们全部注释掉 ...
//#define SUPPORT_9488_555
  1. 保存文件。此时你的 Flash 占用将从 104% 降至 92% 左右。

🚀 快速开始 (Quick Start)

1. 准备 SD 卡

  1. 将 SD 卡格式化为 FAT32
  2. 准备字库
    • 请自行在互联网搜索下载 HZK16 文件(16x16点阵汉字库,文件大小约为 267KB)。
    • HZK16 文件放入 SD 卡根目录
    • (注意:由于版权原因,本仓库不提供该字库文件)
  3. 准备电子书
    • 将你的小说文件保存为 .txt 格式。
    • 文件名:建议使用英文或数字(如 book1.txt),避免中文文件名乱码。
    • 编码格式必须是 ANSI (GB2312) 编码!不要使用 UTF-8,否则显示乱码。
    • .txt 文件放入 SD 卡根目录。

2. 烧录代码

  1. 下载本仓库代码。
  2. 使用 Arduino IDE 打开 ArduBook_OS.ino
  3. 连接 Arduino Uno,选择正确的端口。
  4. 点击上传。

3. 校准触摸屏 (可选但推荐)

代码中包含了一组默认的触摸校准数据:

const int TS_LEFT=909, TS_RT=252, TS_TOP=382, TS_BOT=759;

如果你的触摸不准(点击偏移或方向相反),请先运行 MCUFRIEND_kbv 库自带的 TouchScreen_Calibr_native 示例程序,获取你屏幕的专属参数,并替换代码开头的这行数值。


🎮 操作指南 (User Guide)

  • 主菜单
    • 列表显示 SD 卡中的 TXT 书籍。
    • 上次阅读的书籍左侧会有 * 号标记。
    • 点击文件名开始阅读。
    • 点击底部 [ SETTINGS ] 进入设置。
  • 阅读界面
    • 点击屏幕右侧:下一页。
    • 点击屏幕左侧:上一页。
    • 点击右上角 [X]:保存进度并返回主菜单。
  • 设置界面
    • Clear History:删除所有书签和记录(慎用)。
    • About:显示系统版本与 Logo。

📄 版权与许可 (License)

源代码

本项目采用 知识共享 署名-非商业性使用-相同方式共享 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

About

一个运行在 Arduino Uno R3 上的开源电子书阅读器系统。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages