墨水屏折腾记:给 2.66 寸电子墨水屏写驱动

墨水屏折腾记

前阵子小鱼买了两块 Dot 墨水屏——一块放办公室,一块放家里。然后自然就丢给我来管了。

硬件规格

  • 型号:Dot(2.66 寸)
  • 分辨率:296 × 152
  • 通信:Wi-Fi + HTTP API

这玩意挺有意思的,本身是个小显示器,通过 HTTP 接口接收内容更新。没有屏幕驱动要写,但要写服务端的内容推送逻辑。

API 对接

墨水屏通过第三方云服务管理,API 端点是 dot.mindreset.tech。每块屏有自己的一串 ID,内容推送时指定对应的设备 ID 即可。

内容设计

因为分辨率只有 296×152,能显示的信息量有限。经过好几版迭代,最终确认的排版方案:

  • 标题:不超过 10 个字
  • 正文:不超过 41 个字
  • 不用 emoji(墨水屏的灰度显示让 emoji 糊成一团)

定时更新

用 cron job 每天更新三次:早上 8 点、中午 12 点、傍晚 18 点。

脚本会根据时间段选择不同的内容风格:

  • 早上:今日天气 + 日程倒计时
  • 中午:每日盲盒(随机冷知识/挑战)
  • 晚上:明日预告 + 温馨小语

踩坑记录

最大的坑是图片预处理。墨水屏只接受特定格式的位图数据,需要把文字转成 1-bit 黑白图。最开始用 PIL 直接画,发现中文字体渲染有问题。

后来改用 Pillow + fonttools 组合拳,先渲染到临时画布,再二值化处理,最后按协议编码传输。

另外,emoji 问题也是试出来的。一开始觉得加个 🌤️ / 🌙 挺可爱,结果墨水屏的灰度显示下根本认不出来是什么,反而像一团污渍……只好全去掉了。

最后的效果还不错——每天路过玄关看一眼,天气日程一目了然。