把墨水屏阅读器改装成一台真正的打印机:从一行行送进打印机的动画到自带出纸托盘
来源: nishantjosh.dev — 2026-09-07
概述
Nishant 本想给一台名为 Xteink X3 的可编程墨水屏阅读器加个小功能,结果冒出个念头:既然它看起来像纸,就该像纸一样工作——于是我该能朝它「打印」。他跑去搞清楚 macOS 打印时到底在找什么,落到了互联网打印协议 IPP 上,用 ESP-IDF 的 mDNS API 发布一个 `_ipp._tcp` 驱动型服务,广告成一台 300dpi、单面单色、只接受 Apple/PWG raster 的打印机。真正的麻烦在内存:一页 8.4MB 的位图要塞进只有 400KB RAM、跑着 Wi-Fi 和打印服务器的主控。他的解法是把显示器的屏幕缓冲区直接当作「出纸通道」,让解码、缩放、抖动后的每一行像素边到边落进屏显图像,把页图像内存从 113KB 压到 62KB,给网络栈腾出套接字缓冲。最终 Preview 里真的出现了叫 penguin 的打印机,点下打印、约一秒钟漫画页就显在了屏上,保存的打印件还能在阅读器里翻看——出纸托盘其实是一个文件夹。
核心要点
- 他先想给固件加开机动画、摇一摇掷骰子等功能,但「用浏览器上传小网站」的传送方式太繁琐才催生了改造
- IPP 让电脑能查询打印机能力、提交文档并追问任务进度,这些消息都走 HTTP
- 用 Bonjour 以 `_ipp._tcp` 发布驱动型发现,还须调用 ESP-IDF 的mDNS API加 `_universal` 子类型
- A5/Letter 页面在 300dpi 下约 8.4MB,而主控只有 400KB RAM,Wi-Fi 一开可用堆只剩 6.8KB
- 解法是把每行解码好的像素直接写进显示缓冲区,图像内存从约 113KB 压到约 62KB
- 第一次真打印来自 Preview 里一张《无职转生》漫画,约一秒就完整显在 Xteink 屏上并保存到 SD 卡
金句
If it looks like paper, it should act like paper. I should be able to print on it.
👍 0
👎 0
返回 Lobsters 首页