“电子纸其实不太适合当电脑显示器,反而适合做成一张公共信息海报挂在户外。”我第一次把一块彩色电子墨水屏从包装里拆出来、贴上太阳能板、装进公园长椅里的时候,脑子里冒出来的就是这句话。
这个项目我叫它BenchPad:一张普通到不能再普通的长椅,靠背的位置嵌着一块Colour E-Ink屏幕,整把椅子完全靠一块Solar面板供电,不需要拉市电。最核心的玩法是——这块屏幕可以被“投递内容”。管理员在后台通过一条 API 或者一封邮件,就能把一条公告、一段小说章节、一张手绘海报,推送到公园里这张长椅的屏幕上。
说白了,就是把“邮局公告栏”数字化,但这次的显示屏会越晒越清晰,而且断电后画面依然保留。这篇文章把选型、供电、结构、通信和固件这几个关键环节完整拆开讲一遍,给想折腾离网电子墨水公共设施的人当个参考。
1. 为什么偏要一块越晒越清晰的屏?——屏幕选型背后的真实逻辑
1.1 户外显示屏的反直觉选择
先说最直接的问题:为什么不用普通 LED 或 LCD 屏装到长椅上?
我最早也想过用一块高亮 LCD 屏,成本低、色彩鲜艳、刷新快。但后来在户外实测了一次就放弃了:夏天正午的太阳底下,LCD 背光要开到接近最高的亮度才能勉强看清,而那个亮度等级意味着功耗直接奔着十几瓦去。一块 12V 10W 的面板从早晒到晚,才勉强够它亮几个小时,晚上还得靠电池硬扛。另一个问题是眩光——LCD 的玻璃面板在太阳下一照,反光能让人什么都看不清。
彩色电子墨水屏完全是另一种思路。
它不发光,靠反射环境光来显示,太阳越猛,对比度反而越高。这一点非常适合户外。更重要的是功耗结构不一样:普通显示屏你亮着就一直在耗电,电子墨水屏只有画面变化的那几秒钟才需要供电,画面定格之后哪怕整个系统断电,内容也原封不动地留在屏幕上。这就是“零功耗待机”。
所以 BenchPad 的核心逻辑就变成了:系统大部分时间深度睡眠,只有需要更新内容的时候才醒过来,把屏幕刷一下,然后继续睡。
我做了个简单的对比表,直观一点:
| 显示方案 | 户外强光可读性 | 待机功耗 | 刷新速度 | 内容形态 |
|---|---|---|---|---|
| 高亮LCD | 依赖背光,强光下勉强 | 持续耗电 | 快 | 视频/动图 |
| 户外LED点阵 | 好,但受观看距离限制 | 持续耗电 | 快 | 文字/简单图形 |
| 黑白电子墨水 | 极好 | 几乎为零 | 中 | 图文静态,类似纸张 |
| 彩色电子墨水 | 极好,类似彩色报纸 | 几乎为零 | 慢 | 静态海报,批次图形 |
1.2 彩色电子墨水屏也有三六九等
确定了用电子墨水之后,真正的纠结才开始——彩色型号怎么选。
现在能买到的彩色电子墨水屏大概分三档:
第一档是黑白红黄四色屏,常见尺寸 4.2 寸到 7.5 寸。这种屏的彩色其实是在电泳粒子里面掺了红、黄两种颗粒,刷新一次大概要 15 到 25 秒,但它颜色纯正、价格便宜、兼容方案极其成熟。我做 BenchPad 的第一版就用的 7.5 寸四色屏,显示公告标题、简单图标、色块分割线完全够用。
第二档是Kaleido 3这种在黑白电泳层上叠加一层彩色滤色片的方案。它能显示接近 4096 色的彩色图片,屏幕尺寸可以做到 10 寸以上,观感很像一本杂志内页。缺点是色彩饱和度偏低,白底会泛一点灰,而且彩色显示需要背光补偿或者较强的环境光。这套方案适合放插画、摄影作品和图文混排内容。
第三档是ACeP 全彩电子墨水,这个目前还是贵,屏幕尺寸大,刷新时间动不动就几十秒起步,性价比偏低。我评估下来觉得现阶段没太必要,除非你想做一块正经的艺术画屏。
BenchPad 最终给屏幕留了两种选择:预算有限,用 7.5 寸四色屏;预算充足,直接上 13.3 寸 Kaleido 3。固件层面我把这两种屏的驱动抽象成了同一个渲染接口,切换屏幕型号不需要大改逻辑。
1.3 关于刷新方式和内容的“海报化”原则
彩色电子墨水屏被最多人吐槽的就是刷新慢。7.5 寸四色屏刷一次要 18 秒左右,Kaleido 3 全屏刷新也要十几秒,而且刷新过程中屏幕会闪几轮黑帧和白帧。这在室内场景里很减分,但在公共空间里其实没什么问题——没有路人会盯着长椅屏幕一直看,你又不是在播 MTV。
实际使用中我给自己定了一条铁律:内容布局必须海报化。
意思是,不要把网页截图直接扔到屏幕上去。显示屏分辨率有限、色域有限,大面积灰阶渐变和细密小字在电子墨水屏上显示效果会很差。正确做法是把内容转成“卡片式排版”:大标题、短段落、高对比度色块、粗线条装饰。字少一点,视觉重心明确,路人三秒内能读完。这就是电子墨水屏最适合的形态。
另外一个容易踩的坑是残影累积。黑白屏刷新之前通常会自动反冲一次来清残影,彩色屏的处理逻辑更复杂,如果连续刷好几张图并且中间不做完全清屏,上一张图的轮廓会像“水印”一样残留在屏幕上。我现在的做法是:每刷 4 次内容强制执行一次完整黑白翻转清屏,把颗粒彻底“洗”一遍。
2. 让长椅“断电也能活”的电源策略 —— 光伏板尺寸、电池容量与充电管理
2.1 先算一笔能耗账
很多人在做太阳能项目的时候,第一反应是“面板越大越好”,但实际上对准需求做功耗预算比盲目堆面板有效得多。
我按最典型的工作循环测了一组数据:BenchPad 每 30 分钟醒来一次,连上 WiFi,向服务器发一个心跳请求,检查有没有排队内容需要更新。没有新内容就直接睡回去。
这组状态下,各个模块的实测功耗大概是这样:
| 模块行为 | 典型电流 | 持续时间 | 单次耗电 |
|---|---|---|---|
| ESP32 深度睡眠 | 约 15uA | 30分钟 | 约 0.008mAh |
| WiFi 连接 + HTTP 心跳 | 约 120mA | 3秒 | 约 0.1mAh |
| 获取新内容并渲染 | 约 140mA | 8秒 | 约 0.3mAh |
| 彩色电子墨水刷新 | 约 350mA | 20秒 | 约 1.9mAh |
| 24小时累计(按每天刷4次) | — | — | 约 12mAh |
算出来之后我自己都愣了一下:一个全天待机的系统,实际日耗电也就十几毫安时,连一节五号干电池的容量都不到。当然这是理想情况,如果 WiFi 信号弱、重连频繁,这个数值会翻好几倍。但即便按 50mAh/天 的余量去算,一块 2000mAh 的锂电池也够撑一个多月。
所以 BenchPad 的面板需求其实很低。我最终选了一块6V 2.5W 的柔性太阳能板,峰值输出大概 400mA,在天气好的时候晒半天就能回满电池。
2.2 电池和充电芯片怎么选
电池我反复对比过 18650 锂离子和磷酸铁锂两种方案。
环境温度是户外项目的关键词。锂离子电池在高温下容量衰减快,而且一旦被过放容易出现不可逆损伤。磷酸铁锂耐高温、循环寿命长、安全性好,但能量密度偏低,同样体积容量会小一些。
最终我选了两节26650 磷酸铁锂,标称容量约 1200mAh 每节,两节并联。这个容量对于 BenchPad 来说非常宽裕,连续开一个星期都没有阳光也能正常服役。
充电芯片方面,直接避开了最常规的 TP4056。TP4056 是给锂离子电池设计的恒流恒压充电方案,用在磷酸铁锂上电压阈值不对,而且太阳能板的输出电压会随着光照强度变化,单纯靠 TP4056 没办法做最大功率跟踪。
推荐用CN3791或者CN3767这类太阳能专用充电 IC。它们内部集成了类似 MPPT 的机制,会根据面板输出电压动态调整充电电流,在弱光环境下也能挤出一部分电流给电池补电。同时支持通过电阻配置电池电压阈值,磷酸铁锂可以设定在 3.6V 恒压。
充电电路还有个细节:太阳能板在夜里会产生反向漏电,一定要在面板和充电模块之间加一个肖特基防倒灌二极管,否则电池的电会顺着板子在夜里白白漏光。
2.3 光伏板安装位置比功率更重要
这是我在实地踩出来的经验:公园长椅的阴影分布远比面板功率窗口要残酷。
很多长椅被放在树荫下面,一天里面能直接晒到太阳的时间可能只有两三个小时。离网系统设计的第一准则不是“晒多久能充满”,而是“在有效日照时间窗口内,面板能不能把白天消耗的电充回来”。
我当时在长椅试装了几天,记录到中午有一段时间光照极强,电流一度冲到 380mA,但全天累计的有效发电时长只有 3.2 小时。加上早晨和傍晚的弱光时间,当天总共充过来的电量其实是峰值电流乘以等效日照时长的七成左右。
这个测算方法建议直接抄走:
有效发电量(Ah) ≈ 面板峰值充电电流(A) × 有效日照小时(h) × 0.7比如 2.5W 面板,峰值充电电流约 0.4A,有效日照 3 小时,一天最多充入约 0.84Ah。而 BenchPad 日耗电按最坏情况的 50mAh 算,这个余量是足够的。
光伏板的安装角度也影响很大。长椅的靠背往往会自然地形成一个倾斜面,我把光伏板固定在靠背正上方,倾角大约 20 度,既兼顾了结构美观,又不太容易堆积落叶和鸟粪。
另外,我用了一个很小的电压电流监测模块(INA226)接在电池两端,定期采样记录电压变化曲线。有这个数据之后,我可以远程判断是电池老化、面板被挡、还是充电电路出问题,修起来方便很多。
3. 把屏幕装进一张户外长椅里 —— 结构、防水与防盗的真实工程问题
3.1 结构布局与观看角度
屏幕放在长椅的哪个位置,很考验设计直觉。我一开始想把屏幕嵌进座面,做一张“桌面阅读长椅”,后来被一个细节否决:没有人愿意坐着的时候低头向着自己的大腿看屏幕,座面屏的观看角度极其别扭。
最终方案是把屏幕嵌在长椅靠背的背面,也就是路人从椅子后方经过时能正对的那一面。屏幕中心距离地面约 700mm,略微向后倾斜 10 度,正好是成年人站立时的舒适观看高度。这样坐椅子的人和路过的人都能看到内容,人流动线也顺。
结构材料我用了防腐木椅身加不锈钢骨架,屏幕区域单独做了一个铝合金边框。之所以不用钣金把屏幕整个封死,是因为后续换屏幕、清灰、升级驱动板都需要打开维护口,铝合金框架用螺丝固定,维护成本最低。
3.2 电气与屏幕的防水设计
电子墨水屏最怕的不是水,是水汽凝结。如果我把屏幕和主板完全密封在一个密闭腔体里,白天太阳把腔内温度烤到 50 度,水汽蒸发;到了夜里温度降下来,水汽会凝在屏幕上,形成一层水膜,轻则影响显示,重则让驱动电路上的水滴引发短路。
正确的做法不是“绝对密封”,而是“控制呼吸”。
我在屏幕腔体底部开了一排细小的通气缝,用防尘海绵和细网挡住蚊虫,让内外气压缓慢平衡,水汽不容易积累。电路板则单独放在一个 IP65 接线盒里,所有线缆通过 PG7 防水接头引出。接线盒内部我额外放了两包干燥剂,每三个月开箱换一次。
屏幕正前方用了一层高透亚克力面板保护。这里要提醒一下:普通亚克力在紫外线下会很快发黄,透光率直线下降。一定要选抗UV亚克力,或者干脆用钢化玻璃。我第一块亚克力用了两个月就开始泛黄,后来换了抗UV版本,目前一年下来还比较透明。
3.3 防盗与路人交互设计
公共设施最大的威胁不是天气,是好奇的人。电子墨水屏从正面看确实像一个平板电脑,很多人会下意识地用手去按、去戳。
防盗层面我做了三件事:第一,所有外部可见螺丝全部换成防拆梅花头;第二,铝合金边框和长椅骨架之间用结构胶粘合了一层,单纯用螺丝刀拆不开;第三,屏幕腔体的检修门朝向长椅内侧,必须把长椅翻过来才能接触到。
更像游乐场的情况是很多人真的会去按压屏幕。虽然屏幕有亚克力挡着,但持续的机械压力还是有可能损坏屏幕边缘。后来我在屏幕周围贴了一张醒目的贴纸:“电子纸屏幕,内容由社区维护,请勿按压”,配合长椅上方的光伏板,绝大多数人一眼能看出这是个装置艺术,而不是一台能玩的平板,误触的情况基本消失了。
还有一个很实用的小设计:主板驱动屏幕上常驻显示一个电池图标和信号图标,电量低的时候图标会变颜色。这样路人能直观看到这个设施的运行状态,而我远程查日志的时候也能对照现场照片,判断仪表读数是不是准。
4. 远程投递链路:怎么把一句话传到公园里的屏幕
4.1 “Post To”不是发推文,是一条轻量级消息总线
“You Can Post To”这个功能是整个项目里最有趣的部分。它本质上是一条内容发布链路:用户产生内容,经过服务器处理,最终投递到公园里某一张长椅的屏幕上。
我没有采用“长椅端开一个 TCP 长连接”这种重方案,因为 WiFi 在户外场景很不稳定,长连接一旦断开需要很复杂的重连机制。BenchPad 用的是最朴素的轮询模型:
远程用户 → HTTPS POST → 中心服务器 → 消息队列(带TTL) → BenchPad每30分钟拉取 → 屏幕渲染中心服务器我用 FastAPI 写了一个非常简单的接口,长椅端启动的时候会带着唯一设备 ID 注册,服务器给每把长椅分配一个独立的 API Key。投递内容的时候,只需要调用一次接口:
curl -X POST "https://server.example.com/v1/benchpad/0001/post" \ -H "Authorization: Bearer BENCHPAD_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title": "社区图书角活动", "body": "周六上午九点,欢迎带旧书来交换。", "expire": "2025-08-01T00:00:00Z" }'服务器收到请求后,把这条内容存进队列,设置一个过期时间。长椅下次醒来轮询的时候如果发现队列里还有未读内容,就拉下来渲染并显示,同时返回一个 ack 把消息标记为已读。这样即使长椅离线几天,也不会丢内容。
这条链路最关键的机制是TTL(存活时间)。比如一条寻物启事设置 72 小时过期,如果那把长椅一直离线,那么它恢复后也不应该再显示这条过期消息。服务器在返回队列的时候,先过滤掉已经过期的消息,然后再按优先级排序。
4.2 给“小白”也能用的入口:邮件和网页剪藏
纯 API 方式只适合技术玩家。BenchPad 真正的价值在于让普通社区居民也能参与内容投递,所以我补充了两个更亲民的入口。
第一个是邮件入口。我给每把长椅分配了一个专用邮箱地址,用户直接写一封主题为标题、正文为内容的邮件发过去,服务器定时抓取邮件,拆分主题和正文,自动渲染成一幅海报推送给长椅。邮件入口用下来是普通人接受度最高的方式,发一封邮件比打开一个网页再登录亲切得多。
第二个是网页剪藏。这个功能也是最近被朋友们问得最多的地方——很多人问我能不能把一本小说/一篇长文章“投”到屏幕上看。这里的做法是做了一层文本提取和分页:服务器端用 trafilatura 或者 BeautifulSoup 把网页正文提取出来,过滤掉广告、图片和导航栏,然后按照屏幕尺寸把长文切成若干“章节卡”。每张卡只放得下几行字,所以一篇文章被切成十几张卡片,然后一屏一屏刷新展示。
这样做出来的效果非常像一本挂在公园里的连载小说,每天更新一屏内容,路过了就能看一段。公共屏幕上放连载小说其实比想象的更受欢迎——路人对连续剧式的内容有天然的期待感,下次路过时顺便看一眼“读到了哪一章”。
4.3 认证、审核与离线缓冲
公共屏幕的内容安全是必须认真对待的。API 层面我做了这几层防护:
- 每个设备有独立 API Key,服务器端才能访问队列;
- 单条内容有明确的长度限制,标题不超过 32 字,正文不超过 200 字,避免有人灌入超长文本撑爆屏幕;
- 内容渲染前做基础关键词过滤,包含辱骂、骚扰、敏感词之类的直接拒绝,保持社区环境干净;
- 所有内容都不支持嵌入外部链接,只接受纯文本和用户主动上传的图片,避免恶意脚本被渲染进屏幕。
离线缓冲的逻辑也需要单独考虑。电子墨水屏的好处是即使长椅彻底掉线,当前显示的内容也不会消失,所以“离线”不是一个致命问题。但有个细节要设计好:如果某张长椅离线超过 24 小时,再恢复网络时,服务器不能把积压的一百条内容一次性全部推下去,否则屏幕会连续刷新好几分钟,而且路过的人看到的是一堆过期消息乱炖。
我在服务器端做了一个简单的策略:长椅每次唤醒最多拉取一条内容,显示完并标记 ack 后,下次唤醒再拉下一条。这样过期内容自然被 TTL 机制过滤,宽限期内的排队消息也能按顺序慢慢消化,视觉体验完全可控。
5. 固件层的慢周转战术 —— 深度睡眠、唤醒轮询与OTA
5.1 工作循环怎么搭
BenchPad 的固件核心不是逻辑多复杂,而是把“快餐式唤醒”做得稳健。
主循环大约是这样一个流程:
1. ESP32 深度睡眠 30 分钟(随机抖动 ±4 分钟,避免多把长椅同时广播唤醒) 2. RTC 唤醒,初始化外设 3. 连接 WiFi(超时 15 秒,连不上直接回睡) 4. 从 NTP 同步时间,校正 RTC 漂移 5. HTTP 请求服务器,拉取待显示内容 6. 有内容则渲染并驱动电子墨水屏 7. 上报电池电压、充电状态、屏幕状态 8. 回到深度睡眠这里的随机抖动看起来是个小细节,但很关键。如果社区里有十把长椅,所有长椅同时整点唤醒,服务器会在同一瞬间接收到十个请求,而且十台屏幕同时开始刷新,附近路过的人会觉得整个街区在集体闪光抽风。随机抖动几秒钟之后,刷新过程就变成错落有致的节奏感,对服务器和观感都友好得多。
5.2 屏幕驱动的关键调参
彩色电子墨水屏驱动起来和普通显示屏很不一样,最容易踩的坑有三个。
第一个坑是刷新间隙不清屏。四色屏在连续刷新时如果没有执行正常清屏周期,上一张图的残留会越来越重。固件里要跟踪一个计数器,每刷新一定次数强制插入一次全屏清屏循环。
第二个坑是彩色图片压缩格式。7.5 寸四色屏和 Kaleido 3 需要的像素格式不一样,前者是 1bit 三色索引图,后者是 16bit 灰度映射彩色。如果你在 ESP32 上用标准图像库直接把 JPEG 解压成 RGB888,再转换像素格式,内存会溢出得很难看。我最终的处理是:渲染工作全部放到服务器端完成,服务器生成好了目标屏幕的原始像素缓冲,通过 HTTP 直接传二进制给长椅,长椅端只需要做最基础的格式校验和 SPI 搬运。
第三个坑是色彩校准不能看着手机调。同一个颜色,在电脑屏幕、手机屏幕和电子墨水屏上的观感完全不同。电子墨水屏颜色偏淡、对比度低、颜色偏干燥,所以你需要真的把测试图刷到屏幕上,再根据实物调整配色。我常用的手法是把饱和度和明度整体拉高 15%,显得更接近普通照片的观感。
5.3 OTA与稳定性
公共设施固件最大的礼仪就是:出了问题不能白跑一趟现场。所以 OTA 从第一天就是必需品。
我用的是带签名的 HTTP OTA,服务器端维护一个固件版本号,长椅每次心跳时携带当前版本号,服务器比对后下发最新固件 URL。固件文件在服务器端进行签名,ESP32 侧校验签名之后再启动升级。
稳定性层面做了三层看门狗:
- 硬件看门狗定时喂狗,WiFi 初始化卡死或者 SPI 死锁时自动复位;
- 复位后短时间再次崩溃会在 NVS 里记录原因,连续三次失败会进入“保守模式”——不连接网络、不刷新屏幕,只保持最低功耗的睡眠等待人工处理;
- 电池电压低于安全阈值时,不管服务器有什么新内容都拒绝唤醒刷新,保证电池不过放。
固件层的思路是:宁可让长椅少干一点活,也绝不让它带着满身毛病死磕。
6. 实测三个月之后的复盘 —— 色彩褪没、刮风下雨与那些被路人的手碰过的瞬间
6.1 晴天、阴天、雨天的实际水平
把 BenchPad 放在真实公园里跑了三个月,有几个发现是法理上怎么推演也无法提前预知的。
阳光直射下,彩色电子墨水屏的可读性确实比所有发光屏幕都强。即使在正午的太阳底下,屏幕上的文字和色块都非常清楚,完全不需要调亮度。这一点让我觉得选型选对了。
但高温的影响也很明显。当屏幕表面温度到了 45 度以上时,彩色电泳粒子的响应速度明显变慢,刷新时间从 18 秒拉长到 25 秒以上,而且刷新过程中偶尔会出现色块不均匀的现象。后来我在屏幕背面贴了一片铝散热片,导热到铝合金边框,效果好了不少。
雨天倒没什么好担心的。防水做得到位,亚克力面板上的雨水自然流掉,屏幕区域没有进过水。反而要提防的是持续阴雨天叠加光伏板被落叶覆盖,连续一周下来电池电压掉得比较厉害。我把每次心跳上报电压汇成曲线,看到曲线斜率异常就能判定是树冠遮挡还是面板脏了。后来安排保洁每周顺手擦一下光伏板,状况明显好转。
6.2 路人教会我的几件事
最有意思的部分永远是“人怎么跟这个东西互动”。
一开始我以为路人会围观屏幕看半天,实际观察下来,大部分人只是路过的时候扫一眼,真正会停下来读完整段内容的人很少。这原本让我有点失落,但后来社区工作人员告诉我:信息展示的价值不在于“围观”,而在于“路过时被看见”。那块屏幕就像一张固定在路边的海报,内容在那里,需要的自然会看。
发现最有价值的反而是“连载”模式。当我在屏幕上调出一本小说逐章展示之后,有几位附近居民竟然每天固定时间过来“读下一章”。这个反馈让我意识到,电子墨水屏天然适合内容周期较长的叙事内容——它不是用来抢眼球的,而是用来陪伴的。
也有人试图按屏幕、摸屏幕、拿钥匙戳屏幕。一段时间之后我发现亚克力面板上留下了一些小划痕,屏幕边缘的边框也被翘过两次,但核心屏幕本体没有出大问题。前期做的防拆设计和贴纸提示起了作用。
6.3 如果再做一次 BenchPad
复盘下来,最值得改的点有三个。
第一,屏幕尺寸要往大做。7.5 寸四色屏在公共空间里还是显得小,适合内容有限。要是预算允许,直接上 13.3 寸 Kaleido 3,内容排版空间充裕,视觉冲击力完全不同。
第二,WiFi 模块是最大的耗电变量和最脆弱的环节。公共区域 WiFi 信号不稳定,模块重连的功耗可能占系统总功耗的一半以上。如果再选,我会优先考虑用 4G Cat-M1 模块,省电稳定,而且不依赖附近有没有人偷偷把路由器藏进树洞。
第三,维护口的位置要充分考虑现场操作。我的第一版维护口在长椅侧面,需要整个人趴下去才能打开。后来改用正面快拆面板,再配合远程诊断日志,绝大多数问题不用去现场就已经处理掉了。
最后还是想提醒想做类似项目的朋友一句:离网电子墨水屏公共设施,看起来像是硬件性能和屏幕工艺的问题,其实绝大部分精力都花在对环境曲线的理解上——什么时候有太阳、什么时候有人经过、什么时候设备容易出问题、什么时候内容需要更新。把这些节奏摸清楚了,剩下的技术反而都是常规操作。