Skip to content

OpenClaw 实时状态显示器

一个放在桌面上的 OpenClaw 后台状态小窗。

它由 ESP32-S3 和 2.9 寸 Waveshare 电子墨水屏组成,通过 Wi-Fi 从云端服务拉取 OpenClaw 的运行状态,把“已接收、工具调用、整理中、已回复”等后台过程显示出来。

这个项目解决的不是让 AI 更快回复,而是让等待期间的后台过程变得可见。

OpenClaw 状态显示器屏幕预览
3 秒自动检查间隔
Wi-FiESP32 独立联网
中文服务器端位图渲染
PM2云端服务常驻

项目背景

OpenClaw 执行复杂任务时,最终回复可能需要几十秒甚至几分钟。问题不只是等待时间长,而是等待期间很难知道它到底在做什么:是在调用工具、查资料、整理回复,还是已经卡住。

这个小硬件的目标是提供一种低打扰的“掌控感”:不用打开日志,不用切后台,不用反复确认,只要看一眼桌面上的电子墨水屏,就能知道 OpenClaw 当前处于哪个阶段。

最终效果

屏幕会显示这些信息:

  • 当前状态:例如 空闲已接收工具完成整理中已回复
  • 前序动作:保留上一步动作,让任务推进过程更连续
  • 任务信息:模型、本轮 token、上下文占比、更新时间
  • 耗时:运行中显示已用时间,完成后显示总耗时
  • 设备状态:右上角 Wi-Fi 图标
  • 今日统计:今日任务数和今日累计 token

硬件清单

硬件型号 / 说明
开发板Hosyond ESP32-S3 N16R8,带 Wi-Fi
屏幕Waveshare 2.9 inch e-Paper Module,黑白,SPI
线材随屏幕附带的杜邦线
供电目前通过 USB 给 ESP32-S3 供电

接线表

墨水屏接口ESP32-S3 引脚
VCC3V3
GNDGND
DINGPIO11
CLKGPIO12
CSGPIO10
DCGPIO9
RSTGPIO8
BUSYGPIO7

接线和插拔时建议断电操作。这个项目里使用的是 3.3V 供电,不要接到 5V。

工作原理

整体链路可以理解成三段:

text
OpenClaw 后台状态

云端 FastAPI 状态服务

ESP32-S3 通过 Wi-Fi 每 3 秒拉取画面

2.9 寸电子墨水屏显示

ESP32 并不是通过 USB 数据线和电脑实时通信。它连上 Wi-Fi 后,会像一个独立的小设备一样,定期访问云端接口 /frame/activity.raw,下载一张已经渲染好的 1-bit 屏幕画面。

为了支持中文显示,最终没有让 ESP32 自己画中文,而是在云端用 Python/Pillow 先把中文界面渲染成电子墨水屏所需的原始帧,再由 ESP32 下载并刷新屏幕。

开发过程摘要

这个项目的开发更像一次人机协作:

我负责Codex 负责
提出需求拆解实现方案
提供硬件链接和照片判断硬件型号和接线方式
接线、拍照、观察屏幕写 MicroPython 程序和屏幕驱动
反馈显示异常修正旋转、镜像和扫描方向
提出界面体验要求实现中文界面、刷新策略和云端服务

最初只是点亮屏幕就经历了多轮调试:不显示、上下颠倒、左右镜像、字母反向、内容越界。后续又继续打磨中文状态文案、3 秒轮询、防频闪、Wi-Fi 状态、今日统计和任务耗时。

刷新策略

电子墨水屏不适合高频全屏刷新,所以当前策略是:

  • ESP32 每 3 秒检查一次云端画面
  • 只有画面字节发生变化时才刷新屏幕
  • 运行耗时采用粗粒度显示,避免秒级变化导致频繁刷屏
  • 局部刷新已经做过预研,但当前版本仍采用“有变化才全刷”的稳定策略

这个策略在真实演示中可以比较流畅地展示后台过程,同时避免无意义闪屏。

当前限制

  • 还没有外壳,线材和屏幕仍然裸露
  • 供电还依赖 USB,不够优雅
  • 当前显示内容还可以继续根据真实使用习惯调整
  • 局部刷新暂未正式启用
  • 如果云端状态服务停止,屏幕会停留在最后一次画面

后续计划

  • 设计外壳和支架
  • 优化供电方式
  • 继续打磨中文状态文案
  • 评估是否启用局部刷新
  • 增加更清晰的复刻教程和代码包

下载资料

更多说明见 OpenClaw 状态显示器资料包

用项目记录 AI 如何进入真实工作流。