Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Eterink

Eterink 是 MindReset Quote/0(ESP32-C3 + 296×152 黑白墨水屏)的私有化应用。后端(TypeScript)负责渲染、设备管理与周计划调度;前端(Vue 3)提供浏览器控制台,并内置 USB 本地工具页与设备模拟器页。

本项目基于 SeimoDev/inklink-studio,遵循 GNU GPL-3.0,详见许可与来源。

工程结构

Eterink/
├── backend/                # TypeScript 纯 JSON API:渲染、设备管理与插件系统(Node ≥ 20,零运行时依赖)
├── web/                    # Vue 3 前端,一次构建产出三个入口
│   ├── index.html          # 控制台 /:设备、显示任务、任务规划、电源策略与插件
│   ├── usb/                # USB 本地工具页 /usb/:Web Serial 配置、画面编辑与固件刷写
│   ├── sim/                # 设备模拟器页 /sim/:无硬件时模拟固件轮询与上屏
│   ├── src/                # 控制台源码(api / components / lib / router / stores / views)
│   └── public/firmware/    # 内置一体化固件(USB 工具页刷写资源)
├── firmware/               # ESP-IDF 固件(ESP32-C3 + UC8251D)
├── __web/                  # 迁移前的旧版 USB 工具(保留备查,见其 README)
├── nginx.conf              # 部署示例:静态托管 web/dist 并反代 /api 到后端
└── PLUGIN_GUIDE.md         # 后端插件制作手册

开发快捷命令

根目录提供基于 pnpm 的快捷命令(首次使用先执行一次 pnpm install):

pnpm dev            # 并行启动后端(:8080)与前端开发服务器(:5173)
pnpm dev:backend    # 仅启动后端
pnpm dev:web        # 仅启动前端
pnpm build          # 依次构建后端与前端
pnpm test           # 依次运行后端与前端测试
pnpm typecheck      # 前后端类型检查

前端开发服务器通过 Vite 将 /api 代理到 http://127.0.0.1:8080,与生产环境的同源部署保持一致。运行后端后第一次访问控制台时,会自动进入初始化流程设置账号密码。

前端三个入口

web/ 一次构建产出三个入口,共用同一套浅色视觉基线:

入口 路径 说明
控制台 / 公开首页与登录/初始化;登录后管理设备、显示任务、任务规划、电源策略与插件
USB 工具 /usb/ Web Serial 连接设备:配置读写、离线画面编辑、固件备份与刷写(无需登录)
设备模拟器 /sim/ 无硬件时模拟设备的后端同步循环与上屏,便于联调后端(无需登录)

后端

后端是设备的公网控制入口,只提供 JSON API,不托管任何页面:

  • 身份验证:验证访问者是否为设备拥有者;密码 scrypt 加盐哈希,会话为 HMAC 签名的 HttpOnly Cookie。
  • 显示任务:任务(基础源 + 插件组件)与周一至周日计划的增删改查;按服务器本地时间自动切换到当前时段的任务,支持临时显示并自动恢复。
  • 设备协议:设备以 X-Eterink-Device / X-Eterink-Secret 凭据轮询上报遥测,服务端返回显示版本、电源策略与下一个计划边界;设备仅在版本变化时拉取 1-bit 帧。
  • 插件系统:注册渲染器与组件扩展后端渲染(可声明选项 Schema,面板自动生成配置控件),并可注册额外的 API 端点;插件配置由控制面板维护并保存在服务器。

部署、环境变量与完整 API 一览见 backend/README.md。

设备同步与电源策略

设备定时向后端请求配置与显示状态,仅在目标画面变化时更新屏幕。请求频率由固件按电源状态自动调整,用户可在一定范围内自定义:

电源状态 行为
充电 电源活跃状态,每 1 秒获取服务端信息,实现伪实时修改
断开供电后的活跃期 每 5 秒获取服务端信息
休眠态 按用户设定的时间间隔与服务器交互

例如断开供电越久或电量越低,可以降低请求频率以节省电量:开启自适应后,休眠间隔按断电时长(每满 6 小时递增一档)与电量(低于 20%/10% 时加大档位)自动放大,并以设定的间隔上限封顶。

电池休眠期为深睡轮询(睡眠时长 = 轮询间隔 − 15 秒),插 USB 即秒级唤醒。深睡期间设备会读取后端声明的下一个周计划边界(display.nextChangeAt):边界比轮询间隔更近时提前唤醒,保证计划切换准点生效。

构建固件

固件基线为 ESP-IDF 6.1:

. "$IDF_PATH/export.sh"
cd firmware
idf.py set-target esp32c3
idf.py build

日常刷写统一从 USB 本地工具页(/usb/)的“浏览器刷写与备份”区域执行。固件构建、合并为浏览器资源及分区说明见 firmware/README.md。

当前能力

  • Web 控制台(/):公开首页与登录/初始化,登录后管理设备、显示任务、任务规划、电源策略与插件
  • 后端按周计划渲染显示任务(基础源 + 插件组件叠加),公网控制显示内容与设备状态;插件系统可扩展渲染器与组件并注册额外 API
  • 设备按电源策略定时同步后端配置与显示状态,变化时更新画面;深睡时按周计划边界提前唤醒
  • USB 本地工具页(/usb/)提供 296×152 可视化编辑,图片裁剪、缩放、灰阶转 1-bit 与多种抖动算法
  • 文字和传感器图层自由定位、样式调整、层级管理与项目 JSON 导入导出
  • 电池电压、电量、芯片温度、USB 状态、运行时间和可用内存读取
  • 从设备载入并保存 Wi-Fi、BLE、数据读取、屏幕更新、强制全刷间隔与连续局刷上限
  • 通过 USB 配置后端服务器地址、设备 ID 与密钥,并读写充电/断电/休眠电源策略
  • UC8251D 变化区域局刷、周期全刷和无变化跳过
  • 浏览器内置固件刷写、本地固件载入及整颗 4 MB Flash 备份下载
  • 设备模拟器页(/sim/):无硬件时模拟固件轮询、拉帧、CRC 校验与上屏

屏幕是黑白 1-bit 面板;网页中的灰阶效果通过抖动网点模拟,发送到设备的最终画面只有黑白两色。

隐私与安全

浏览器刷写会覆盖设备固件。仅对已确认采用相同板级引脚、UC8251D 屏幕和 4 MB Flash 的 Quote/0 设备操作。浏览器生成的整片备份包含 Wi-Fi 凭据,请妥善保管。

许可与来源

本项目基于 SeimoDev/inklink-studio,按 GNU General Public License v3.0 发布(见 LICENSE)。原项目版权归其作者所有;本项目在原项目基础上的修改与新增同样以 GPL-3.0 授权,任何人均可在相同条款下再分发。

文档

About

Pluggable HTTP controller for MindReset Quote/0. 插件化、可高度自定义的Quote/0控制器

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages