Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions apps/tuya_t5_epaper_reader/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
##
# @file CMakeLists.txt
# @brief
#/

# APP_PATH
set(APP_PATH ${CMAKE_CURRENT_LIST_DIR})

# APP_NAME
get_filename_component(APP_NAME ${APP_PATH} NAME)

# APP_SRCS
aux_source_directory(${APP_PATH}/src APP_SRCS)

# Add utf8_to_gbk source
list(APPEND APP_SRCS
${CMAKE_SOURCE_DIR}/apps/tuya_t5_pocket/tuya_t5_pocket_ai/src/expand/src/utf8_to_gbk.c
)

# Add E-Paper Library sources
aux_source_directory(${APP_PATH}/lib/Config LIB_CONFIG_SRCS)
aux_source_directory(${APP_PATH}/lib/e-Paper LIB_EPAPER_SRCS)
aux_source_directory(${APP_PATH}/lib/GUI LIB_GUI_SRCS)
aux_source_directory(${APP_PATH}/lib/Fonts LIB_FONTS_SRCS)

list(APPEND APP_SRCS
${LIB_CONFIG_SRCS}
${LIB_EPAPER_SRCS}
${LIB_GUI_SRCS}
${LIB_FONTS_SRCS}
${CMAKE_SOURCE_DIR}/src/liblvgl/v9/lvgl/src/libs/tjpgd/tjpgd.c
${APP_PATH}/src/third_party/lodepng/lodepng_wrap.c
${CMAKE_SOURCE_DIR}/src/common/qrcode/qrcodegen.c
)

########################################
# Target Configure
########################################
add_library(${EXAMPLE_LIB})

target_include_directories(${EXAMPLE_LIB}
PRIVATE
${APP_PATH}/src
${APP_PATH}/src/third_party/lodepng
${CMAKE_SOURCE_DIR}/apps/tuya_t5_pocket/tuya_t5_pocket_ai/src/expand/inc
${CMAKE_SOURCE_DIR}/examples/e-Paper/4.26inch_network_novel_reader/lib/Fonts
${CMAKE_SOURCE_DIR}/src/common/qrcode
${APP_PATH}/lib/Config
${APP_PATH}/lib/e-Paper
${APP_PATH}/lib/GUI
${APP_PATH}/lib/Fonts
${CMAKE_SOURCE_DIR}/src/liblvgl/v9/lvgl/src/libs/tjpgd
)

target_compile_definitions(${EXAMPLE_LIB}
PRIVATE
)

target_sources(${EXAMPLE_LIB}
PRIVATE
${APP_SRCS}
)
70 changes: 70 additions & 0 deletions apps/tuya_t5_epaper_reader/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
menu "Application config"

config EPAPER_WIFI_SSID
string "wifi ssid"
default ""

config EPAPER_WIFI_PSWD
string "wifi password"
default ""

config EBABLE_SD_PINMUX
bool "enable sd pinmux"
default n

if(EBABLE_SD_PINMUX)
config SD_CLK_PIN
int "clk pin"
default 14
range 0 63

config SD_CMD_PIN
int "cmd pin"
default 15
range 0 63

config SD_D0_PIN
int "cmd pin"
default 16
range 0 63

config SD_D1_PIN
int "cmd pin"
default 17
range 0 63

config SD_D2_PIN
int "cmd pin"
default 18
range 0 63

config SD_D3_PIN
int "cmd pin"
default 19
range 0 63

endif

config BAIDU_NETDISK_ENABLE
bool "enable baidu netdisk"
default y

if(BAIDU_NETDISK_ENABLE)
config BAIDU_NETDISK_APP_KEY
string "baidu app key (client_id)"
default ""

config BAIDU_NETDISK_APP_SECRET
string "baidu app secret (client_secret)"
default ""

config BAIDU_NETDISK_TARGET_DIR
string "baidu netdisk target dir"
default "/TuyaT5AI"

config BAIDU_NETDISK_SCOPE
string "baidu oauth scope"
default "basic,netdisk"
endif

endmenu
182 changes: 182 additions & 0 deletions apps/tuya_t5_epaper_reader/PROJECT_PLAN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
# 基于涂鸦 T5 的「墨阅 · 墨水屏文本图片阅读器」项目计划书

## 一、项目概述(项目背景)

**项目名称:** 墨阅 · 墨水屏文本图片阅读器(E-Paper Reader)

**项目背景:**
- 4.26 英寸墨水屏具备长续航、强光可读、类纸显示等优势,非常适合做离线阅读、图文展示与信息看板。
- 在日常使用中,用户常有“把资料拷到 SD 卡就能直接看”的需求(出差、通勤、户外、无网络环境),而传统 LCD 设备耗电高、强光可读性弱。
- 本项目基于 TuyaOpen 与涂鸦 T5 平台,提供一套轻量、可扩展的“离线文件浏览 + 文本/图片阅读”参考实现,帮助开发者快速做出可演示、可迭代的墨水屏应用作品。

**项目目标:**
- 基于涂鸦 T5 平台打造一个可运行的离线阅读器 Demo:支持 SD 卡目录浏览、文本阅读、图片浏览与按键交互。
- 兼顾“作品可演示”与“工程可复用”:核心能力模块化(文件系统、UI 绘制、图片解码、时间同步等),便于二次开发扩展。
- 启动即用:开机进入文件列表,顶部显示当前时间与品牌标识,支持按键操作完成浏览/阅读全流程。

**基础功能完善及未来优化方向:**
- 当前已实现:SD 挂载、目录分页、文本分页/断点、图片渲染、横竖屏旋转、启动网络时间同步、文件列表顶栏时间显示。
- 未来优化:百度网盘下载小说图片、多格式支持(EPUB/PDF 预处理等)。

## 二、市场分析(可选)

**市场需求(示例方向):**
- 离线阅读、电子价签/信息牌、展会/博物馆讲解牌、会议桌牌、旅行清单/地图、电子日程等场景对“低功耗 + 强光可读 + 静态内容展示”有天然需求。

**目标用户画像:**
- 开发者/极客:希望用墨水屏做低功耗应用、信息看板与个性化阅读器。
- 教育/办公:需要电子资料离线分发、展示与阅读(讲义、流程卡片、作业清单)。
- 户外/旅行:在无网络环境下阅读攻略、说明文档、图片资料。

**竞争对标(简述):**
- 通用电子书阅读器:功能成熟但生态封闭、二次开发门槛高。
- 普通 LCD 平板:开发容易但耗电高、强光可读性弱。
- 本项目定位:开源、可扩展、可快速二次开发的 TuyaOpen 墨水屏应用参考工程。

## 三、技术方案

### 1、系统架构图

```text
┌──────────────────────────────────────────────────────────┐
│ 应用层(sd 示例) │
│ 文件列表 UI / 文本阅读 / 图片浏览 / 按键交互 / 断点记录 │
│ 顶部时间显示 / 启动网络时间同步(HTTP Date) │
└───────────────▲───────────────────────────────▲──────────┘
│ │
┌───────────────┴──────────────┐ ┌────────────┴──────────┐
│ TuyaOS / TAL 抽象层 │ │ 设备驱动/外设 │
│ tal_time / tal_kv / event │ │ SD/FATFS, GPIO Keys │
│ netmgr + http_client │ │ 4.26" E-Paper SPI/IO │
└───────────────▲──────────────┘ └────────────▲──────────┘
│ │
┌──────┴──────┐ ┌──────┴──────┐
│ 网络栈 │ │ 图形/字库 │
│ Wi-Fi/Wired │ │ GUI_Paint │
│ DHCP/HTTP │ │ HZK24 GBK │
└─────────────┘ └─────────────┘
```

### 2、硬件清单

- 主控:涂鸦 T5 平台开发板(示例默认配置为 `TUYA_T5AI_BOARD`,可切换 `TUYA_T5AI_POCKET`)
- 显示:4.26 英寸黑白墨水屏(EPD_4in26)
- 存储:Micro SD 卡(FAT32)
- 输入:7 键按键(UP/DOWN/LEFT/RIGHT/MID/SET/RST)
- 供电:USB 供电(可扩展电池方案)

### 3、核心实现功能

- SD 卡挂载与目录扫描:
- 启动后挂载 `/sdcard`,读取目录项并分页展示。
- 文件浏览与阅读:
- **文本**:自动换行、翻页、滚动、支持断点记录(进度文件保存在 SD 的隐藏目录)。
- **图片**:支持 BMP/JPG 等(渲染为 1bit 黑白输出),并随旋转方向适配显示区域。
- 中文显示与编码处理:
- 面向字库(HZK24)采用 GBK 渲染策略,兼容 SD 卡来源的不同编码情况。
- 横竖屏切换:
- SET 键切换旋转(0°/90°),目录与预览均生效。
- 启动网络时间同步:
- App 启动时订阅网络事件,联网后通过 HTTP 响应 `Date` 头进行校时;失败兜底默认时间。
- 文件列表顶栏时间展示:
- 文件列表上方显示 `YYYY-MM-DD HH:mm 贾-AIDevLog`,便于演示“设备已校时/可显示实时信息”。

### 4、软件技术架构

- 入口:`examples/peripherals/sd/src/tuya_main.c`
- `user_main()` 初始化日志/板级硬件后,执行启动时间同步,再启动 SD 应用线程。
- `refresh_ui()` 统一负责页面绘制(文件列表/文件预览/错误页)。
- 时间同步模块:`examples/peripherals/sd/src/net_time_sync.c`
- 订阅 `EVENT_LINK_STATUS_CHG`,收到 `NETMGR_LINK_UP` 后发起 HTTP 请求并解析 `Date` 设置系统时间。
- 外设/图形:
- EPD 驱动:`lib/e-Paper/EPD_4in26.*`
- 绘制:`lib/GUI/GUI_Paint.*`
- 字库:`lib/Fonts/*` + `hzk24`
- 文件系统:
- `tkl_fs`/`tkl_dir_*` 进行 SD/FATFS 访问。

### 5、安全技术(如有)

- 本示例不处理账号体系与敏感数据;网络校时仅用于演示“联网后同步时间”能力。
- 未来可增强:
- 使用 NTP 或 HTTPS(带证书校验)进行安全校时,避免被中间人篡改时间。
- 对读取的文件做格式校验与大小限制,避免异常文件导致内存压力。

## 四、产品呈现

### 1、外观设计图/产品照片

- 建议拍摄角度:
- 正面(文件列表页,顶部时间与品牌标识清晰可见)
- 侧面(展示墨水屏与外壳厚度)
- 背面(展示 SD 卡槽/按键布局)
- 户外强光环境对比(突出墨水屏优势)

### 2、功能演示视频(极其重要)

建议视频脚本(1–3 分钟):
- 开机进入文件列表:展示顶部 `YYYY-MM-DD HH:mm 贾-AIDevLog`
- 插卡识别:展示目录分页与文件大小/类型
- 打开文本:展示翻页、滚动、返回、断点恢复
- 打开图片:展示图片渲染、旋转适配
- (可选)联网校时:断网显示默认时间→联网后时间更新

### 3、用户体验流程

1. 上电启动 → 进入 SD 文件列表
2. 顶栏展示时间与标识;用户用方向键移动选择
3. MID 进入目录/打开文件;RST 返回
4. 文本:UP/DOWN 行滚动,LEFT/RIGHT 翻页;SET 旋转
5. 退出/重进仍保留阅读进度(断点文件)

## 五、未来展望与商业潜力

### 1、可优化方向

- 校时升级:NTP/HTTPS 校时、时区配置与夏令时支持、断网保持/RTC 校准
- UI/交互:文件搜索、按类型过滤、最近打开列表、书签/目录、进度条更细粒度
- 格式扩展:EPUB/TXT 优化排版、PDF/Office 通过工具链预处理为图片页或纯文本
- 性能与功耗:局部刷新策略、按需重绘、低功耗待机/按键唤醒
- 内容生态:与云端(Tuya 云/局域网)联动下发文件、同步阅读进度

### 应用场景扩展

- 离线资料终端:设备手册/维修指南/应急预案
- 电子桌牌/会议系统:日程与参会信息动态更新
- 店铺与展馆:低功耗信息看板、电子菜单、展品说明牌

### 商业化思考

- 成本:主控 + 墨水屏 + 外壳 + 电池 + SD/Flash,具备量产空间(可按场景选屏幕尺寸与按键数量)
- 量产可行性:TuyaOpen 生态与 T5 平台可减少底层适配成本,适合快速产品化
- 目标市场:教育/办公、文旅展陈、零售展示、工业运维等 B 端场景优先

## 六、项目实施计划

### 1、项目阶段划分

- 阶段 1:硬件联调与基础 UI(完成目录列表、按键、屏幕显示)
- 阶段 2:核心阅读能力(文本分页/断点、图片渲染、旋转适配)
- 阶段 3:体验增强(时间同步与顶栏显示、异常处理、刷新优化)
- 阶段 4:完善与提交(文档、演示视频、贡献 PR)

### 2、人员安排

- 固件/系统:负责 TuyaOpen 工程、外设与网络能力接入
- UI/交互:负责页面布局、按键映射、阅读体验优化
- 测试/演示:准备 SD 内容、验证边界场景、录制演示视频与素材

### 3、里程碑与交付物(硬件原形 & 核心技术功能)

- 可运行固件:SD 文件列表 + 文本/图片预览 + 旋转 + 断点
- 核心技术点:启动网络时间同步 + 文件列表顶栏时间展示
- 交付材料:
- 代码贡献链接(GitHub/Gitee PR)
- <https://github.com/jiaxianhua/TuyaOpen>
- 本计划书文档(本文件)
- 功能演示视频:
- [贾-墨阅 · 墨水屏文本图片阅读器](https://www.bilibili.com/video/BV1pjkgB6EiT),
- [贾-墨阅 · 墨水屏文本图片阅读器_百度网盘](https://www.bilibili.com/video/BV1aFkgBHEPT/)
- 社交媒体发布链接
- [Day 82: 基于涂鸦 T5 的「墨阅 · 墨水屏文本图片阅读器」项目计划书](https://mp.weixin.qq.com/s/6A0BuiTvOaudE775vNeNEQ)

Loading