说明:EmperorClaw 的界面为英文,下文中的按钮和菜单名称保留英文原文,并在首次出现时附上中文释义。
快速流程
- 用一根 USB-C 数据线把开发板接到电脑上。
- 在 Chrome 或 Edge 中打开 EmperorClaw,进入 Settings → Displays → Set up a display(设置 → 显示屏 → 设置显示屏),然后点击 Connect display(连接显示屏)。
- 安装固件,选择你的 2.4 GHz Wi-Fi,点击 Finish setup(完成设置)。页面会显示 Your display is live(显示屏已上线)。
这就是全部步骤。拔下显示屏,用任意 USB 充电器供电即可。本指南的其余部分会介绍屏幕上显示的内容、你的数据如何受到保护,以及某一步失败时该怎么办。
桌面显示屏只读取一个端点 GET /api/mcp/live,并使用它自己的 Read only(只读)密钥。它每 4 秒轮询一次,绝不会向你的服务器写入任何内容:它不能发送消息、创建任务,也不能审批工作。
准备清单
| 项目 | 详情 |
|---|---|
| 开发板 | ESP32-2424S012C,有时以“1.28 英寸圆形 CYD”的名称出售。在任意电子元件电商平台搜索这个型号即可,价格通常在 10–15 美元左右。ESP32-C3,1.28″ 圆形 240×240 IPS 屏幕(GC9A01),CST816 电容触摸,USB-C,可选 3.7 V 锂聚合物电池。 |
| 数据线 | 一根 USB-C 数据线。很多 USB-C 线只能充电;用这种线开发板能通电,但浏览器永远检测不到它。 |
| 浏览器 | 电脑上的 Chrome 或 Edge。设置过程使用 Web Serial,Safari、Firefox 和手机浏览器都不支持。 |
| Wi-Fi | 一个 2.4 GHz 网络。ESP32-C3 没有 5 GHz 无线模块。 |
| EmperorClaw | 0.8.65 或更高版本,并通过其 https:// 地址访问(或局域网中的私有网络地址)。 |
| 你的账号 | 公司的管理员。只有管理员才能看到 Displays(显示屏)标签页。 |
在浏览器中安装
- 接线。用 USB-C 数据线把显示屏连接到电脑。
- 连接。打开 Settings → Displays,然后在 Set up a display 下点击 Connect display。在浏览器的设备列表中选择这块开发板,它会显示为一个 USB JTAG/serial 设备。
- 固件。页面会询问显示屏当前运行的版本。如果它已经是服务器所附带的版本,点击 Skip — already installed(跳过——已安装)。否则点击 Install firmware(安装固件),并保持数据线连接约一分钟。页面在写入之前会校验每个镜像的 SHA-256,显示屏已保存的设置也会保留。
- Wi-Fi。显示屏会扫描周围网络,页面按信号强度从高到低列出它能看到的网络。选择你的网络并输入密码。如果网络名称是隐藏的,请使用 Other network(其他网络)。
- 选项。为显示屏命名(默认为 “Desk display”),方便以后查找,并决定是否勾选 Include my private chats(包含我的私聊)。该选项默认关闭;详见隐私与安全。
- 完成。点击 Finish setup。页面会为这块显示屏创建一个只读密钥,一次性把 Wi-Fi、服务器地址和密钥发送给开发板,然后等待。开发板重启、连上 Wi-Fi 并获取数据流。当它成功连上服务器时,页面会显示 Your display is live。
密钥在创建后直接交给开发板,不会显示也不会被复制。如果设置没有完成(出错、超时、点击 Change Wi-Fi settings(更改 Wi-Fi 设置)或离开页面),未使用的密钥会被吊销,下次尝试时会创建一个新的。
如果出了问题,页面会指出具体原因:Wi-Fi 密码被拒绝、找不到网络、连接 Wi-Fi 超时,或服务器拒绝了密钥。修正后点击 Try again(重试)。
你会看到什么
左右滑动切换模式。底部边缘的圆点表示当前所在的模式。每个智能体都是一个根据其 id 生成的 12×12 像素角色,所以同一个智能体看起来始终一样,身体颜色则取自该智能体自己的色相。
| 模式 | 显示内容 |
|---|---|
| Throne Room(王座厅) | 默认模式。俯视一间圆形房间,Emperor 坐在中央的王座上,智能体围坐在四周的工位上。工作中:显示器发光,代码火花升起。输入中:一个带动画的 “…” 气泡。空闲:智能体离开工位四处闲逛。需要关注:头顶上方跳动着一个红色的 “!”。离线:一个半透明的灰色幽灵飘在工位旁。任务完成时会爆出彩纸。金色信封表示最近 10 分钟内有一条私聊消息。 |
| Focus(聚焦) | 每页一个智能体:一个大尺寸角色,名字显示在顶部,还有状态标签、实时活动、当前任务以及最后在线时间。外圈表示健康状况。轻点即可打开你与该智能体的私聊。 |
| Pulse(脉搏) | 健康雷达。每个智能体在边缘占一段弧形,按健康状况着色,并被旋转的扫描光束照亮。中央显示健康智能体数与总数之比,以及工作中、进行中、逾期和待审批的数量。 |
| Feed(动态) | 以气泡形式显示最新的团队聊天和群聊消息,每条都带有发送者的迷你角色。新消息会从底部滑入。 |
所有模式通用的信号
- 红色脉动边框:至少有一个智能体宕机。
- 金色脉动光环:有审批在等待人来处理。
- 右上角附近的状态点:绿色表示在线,金色表示正在连接或数据已过期,红色表示出错,紫色表示演示模式。
- 背光在 2 分钟内没有触摸或数据变化时会调暗,有触摸或数据变化时恢复。
光环和弧段中的健康颜色:绿色为健康,橙色为需要关注,红色为宕机,蓝色为空闲。在完成配置之前,显示屏会运行演示模式:模拟一家拥有七个智能体的公司,并带有一个小小的 DEMO 标签,这样你可以在接入任何服务器之前先检查硬件。
手势
| 位置 | 手势 | 操作 |
|---|---|---|
| 任意模式 | 向左 / 向右滑动 | 下一个 / 上一个模式 |
| Throne Room | 轻点某个智能体 | 在 Focus 中打开该智能体 |
| Pulse | 轻点某段弧 | 在 Focus 中打开该智能体 |
| Focus | 向上 / 向下滑动 | 下一个 / 上一个智能体 |
| Focus | 轻点 | 打开你与该智能体的私聊 |
| 私聊 | 向下 / 向上滑动 | 更早 / 更新的消息 |
| 私聊 | 轻点,或向左 / 向右滑动 | 返回智能体页面 |
| 任意位置 | 按住 1.5–5 秒后松开 | 在演示模式与实时模式之间切换(完成配置后) |
| 任意位置 | 按住 5 秒 | 打开设备端设置门户 |
隐私与安全
- 真正的只读。显示屏的密钥使用 Read only 范围。它只能调用
GET /api/mcp/live,别无其他:其他所有端点、MCP 服务器和实时 socket 都会以403拒绝它。只读密钥在 365 天后过期。 - 私聊需主动开启,且按密钥设置。勾选 Include my private chats 后,数据流会加入你自己与每个智能体的私聊往来:你写的消息以及智能体回复你的消息。其他成员的消息绝不会被发送。该选项在创建密钥时即已固定;如需更改,请吊销密钥并重新设置显示屏。
- 与你绑定。每个密钥都会记录是谁创建的。一旦此人离开公司,或不再是所有者或管理员,私聊会立即停止推送。
- 未开启该选项时,私聊永远不会出现在显示屏上。正在私聊中忙碌的智能体只会显示 “Working in a private chat”(正在私聊中工作)。
- 经过验证的 TLS。显示屏会依据标准的公共证书颁发机构,校验服务器证书链和主机名。普通的
http://只接受私有网络主机(10.x、172.16–31.x、192.168.x、*.local)。如果 EmperorClaw 本身是通过公网地址上的http://打开的,浏览器设置会拒绝运行。 - 加锁的设置 Wi-Fi。设备端设置网络使用一个随机密码,它只显示在屏幕上,绝不会出现在串口日志中,因此只有能看到显示屏的人才能加入。已保存的密钥不会再次显示或打印。
- 令牌跟随服务器。如果更改了服务器地址却没有提供新令牌,已保存的令牌会被清除,因此令牌只会发送给创建它的那台服务器。
只在你能掌控的显示屏上包含私聊;如果显示屏离开了你的桌面,请吊销它的密钥。
管理显示屏
Settings → Displays 会列出每一个显示屏密钥,包括名称、创建时间、最后使用时间以及是否开启了私聊。当某块显示屏离开你的桌面时,点击 Revoke(吊销),它会立即停止更新。要把显示屏迁移到另一个网络或服务器,重新运行一遍设置即可,新设置会替换已保存的设置。
故障排查
| 症状 | 解决方法 |
|---|---|
| 检测不到开发板 | 使用 USB-C 数据线,而不是仅充电线。换一个 USB 端口试试,最好是电脑本身的端口而不是扩展坞。关闭其他占用该端口的程序,例如串口监视器。仍然不行:让开发板进入启动模式(按住 BOOT,轻按 RST,松开 BOOT),然后再次点击 Connect display。 |
| 列表里没有我的网络 | 它很可能只有 5 GHz。如果你的路由器为不同频段设置了不同名称,请选择 2.4 GHz 的那个;双频共用一个名称也可以。点击 Scan again(重新扫描),或对隐藏网络使用 Other network。 |
| 密码错误、找不到网络或 Wi-Fi 超时 | 重新输入密码并检查网络名称,把显示屏移近路由器,然后点击 Try again。 |
| 令牌被拒绝 | 服务器拒绝了显示屏的密钥(HTTP 401 或 403):它已被吊销、已过期,或属于另一台服务器。点击 Try again,页面会创建一个新密钥。 |
| TLS 错误 | 证书无法验证。请使用 EmperorClaw 的 https:// 地址,并使用公共证书颁发机构签发的证书(Let’s Encrypt、ZeroSSL、Cloudflare)。如果屏幕显示 “use an https:// URL”,说明保存的地址是公网主机上的普通 http://。如果使用私有证书颁发机构,请用你自己的根证书构建固件(参见固件 README)。 |
| 显示屏的 USB 连接总是断开 | 在某些端口和数据线上,Wi-Fi 发射时的突发电流可能会让 USB 链路短暂掉压。固件已经把 Wi-Fi 启动延迟了 3 秒,并限制了发射功率。请换一根更短或质量更好的线,并使用电脑本身的端口。设置仍然可以完成:页面还会询问服务器新密钥是否已被使用过。断开连接不会影响显示屏本身。 |
| 页面无法开始设置 | EmperorClaw 是通过公网地址上的 http:// 打开的。请通过它的 https:// 地址打开。 |
不用 Chrome 或 Edge
设备端设置门户
- 在 EmperorClaw 中打开 Settings → Access Tokens(设置 → 访问令牌),创建一个 Read only 范围的令牌。只有在需要时才勾选 Include my private chats。复制该令牌。
- 在显示屏上按住 5 秒。边缘会出现一圈逐渐填满的进度环,然后出现 SETUP 界面。
- 用手机或笔记本电脑连接名为 EmperorClaw-Display 的 Wi-Fi 网络,密码显示在屏幕上。如果设置页面没有自动打开,请访问
http://192.168.4.1。 - 选择你的 Wi-Fi,输入其密码、你的 EmperorClaw 地址(例如
https://emperor.example.com)以及令牌。轻点 Save and connect(保存并连接)。 - 显示屏会重启。收到实时数据后,状态点会变成绿色。
设置会在 10 分钟后自动放弃,轻点屏幕也会取消设置。门户还提供 Run demo mode(运行演示模式)和 Erase settings(清除设置)。
串口控制台
在 115200 波特率下,显示屏接受 scan、status、version、ssid、pass、server、token、save 和 reset 等命令。开发者可以用 PlatformIO 从仓库中的 devices/throne-display/ 构建并烧录固件;固件 README(英文)记录了引脚映射、完整命令集以及内存设计。
面向开发者:实时数据流
显示屏只是第一个使用者。GET /api/mcp/live 会返回一份紧凑的 JSON 快照,概括你的整个 AI 团队,可用于你想构建的任何屏幕或仪表盘。在 Settings → Access Tokens 下创建一个 Read only 令牌(或调用 POST /api/settings/tokens 并传入 "scope": "read_only"),然后轮询它。
curl "https://emperorclaw.example.com/api/mcp/live?messages=8" \
-H "Authorization: Bearer <read-only-token>" \
-H 'If-None-Match: "<etag from the last response>"'
响应示例(只保留了一个智能体):
{
"v": 1,
"ts": "2026-10-05T12:00:00.000Z",
"company": { "name": "Acme" },
"summary": { "agents": 6, "healthy": 4, "attention": 1, "down": 0, "idle": 1,
"working": 2, "pendingApprovals": 1, "tasksInProgress": 5, "tasksOverdue": 0 },
"agents": [
{ "id": "6f1c…", "name": "Ada Researcher", "short": "Ada", "hue": 212,
"health": "healthy", "state": "typing",
"activity": "Reading the Q3 report",
"task": { "id": "9b2e…", "title": "Draft Q3 summary" },
"lastSeenSec": 12, "unanswered": 0 }
],
"messages": [
{ "id": "c41d…", "from": "Ada", "agentId": "6f1c…",
"text": "Shipped the Q3 summary", "ageSec": 40 }
],
"dm": []
}
| 字段 | 含义 |
|---|---|
health | healthy、attention、down 或 idle。 |
state | 按优先级排列:typing、offline(5 分钟未在线)、working(持有一个进行中的任务),否则为 idle。 |
activity | 实时状态行(最多 80 个字符),或 null。 |
task | 该智能体优先级最高的进行中任务,或 null。 |
hue | 每个智能体固定的颜色,取值 0–359。 |
messages | 仅包含团队聊天和群聊,绝不包含私聊。按时间倒序,纯文本。?messages= 设置条数(默认 8,范围 0–20)。 |
dm | 始终存在。除非令牌包含创建者的私聊,否则为 []。 |
轮询。每个响应都带有 ETag。在 If-None-Match 中回传它;如果没有变化,你会收到响应体为空的 304。ETag 会忽略时钟相关字段(ts、ageSec、lastSeenSec),因此收到 304 后,请自行把距上次 200 的时间累加到缓存值上。每个键始终存在,缺失的值为 null,而 v 只会在出现不兼容变更时改变。完整的接口约定见 API 参考(英文)。