这是我准备放到博客里的第一个作品:Lobster Dashboard。
它是一个运行在 Raspberry Pi 5 8GB 上的智能桌面仪表盘,搭配 7 寸 HDMI 屏幕和微雪 WM8960 Audio HAT,支持 OpenClaw 本地对话、语音输入、语音播放、情绪化 Emoji、模型自动切换、中文输入、系统监控和 Kiosk 开机自启。
为什么做这个项目
我一直很喜欢电子产品,也喜欢把软件和硬件组合成一个真的可以放在桌面上运行的小东西。
这个项目的目标不是做一个普通网页,而是把树莓派、小屏幕、音频模块和 AI Agent 组合成一个桌面交互终端:它可以显示状态,可以听我说话,可以把回复读出来,也可以通过表情反馈当前的“情绪”。
硬件配置
- Raspberry Pi 5 8GB
- 7 寸 HDMI 显示屏
- 微雪 WM8960 Audio HAT
- 麦克风 / 扬声器音频链路
它能做什么
Lobster Dashboard 目前包含这些功能:
- 时间和日历显示
- 本地待办事项
- 实时天气
- CPU / 内存 / 磁盘 / 温度 / 运行时间监控
- 网络和电源状态显示
- 风扇状态与档位控制
- OpenClaw 本地对话
- 语音录音和语音识别
- TTS 语音播放
- 情绪化 Lobster Emoji
- 中文输入法切换
- 网页内置拼音输入 fallback
- Chromium Kiosk 全屏启动
- systemd 开机自启
技术架构
这个项目没有使用复杂的前端框架,整体结构比较直接:
- 前端:HTML / CSS / Vanilla JavaScript
- 后端:Python 3 标准库 HTTP Server
- Agent:OpenClaw CLI
- 语音录制:ALSA
arecord - 语音播放:ALSA
aplay - TTS:edge-tts / espeak-ng
- STT:sherpa-onnx / whisper.cpp / OpenAI-compatible API
- 输入法:Fcitx5 + 内置拼音 IME fallback
- 部署:Chromium Kiosk + systemd
前端负责界面展示和交互,后端负责提供本地 API,包括天气、系统状态、风扇控制、OpenClaw 对话、语音录制、语音识别、TTS、输入法切换和拼音候选。
项目亮点
软硬件一体化
这个项目是围绕 Raspberry Pi 5、小尺寸 HDMI 屏幕和 WM8960 Audio HAT 来设计的。它不是只在电脑浏览器里跑的 Demo,而是面向真实桌面设备的 Kiosk 应用。
通过 start.sh 可以启动全屏 Chromium Kiosk,通过 systemd 可以设置开机自启,让它更像一个独立的小设备。
OpenClaw 本地 Agent 集成
Dashboard 通过本地 OpenClaw CLI 发起对话,并且做了 pending 状态、单飞控制和发送限流,避免在树莓派上同时启动多个消耗较大的 Agent turn。
用户输入后,界面会先显示 Lobster 正在思考,后端异步执行本地 Agent,再把结果展示回界面。
模型智能路由
项目支持 auto / fast / strong 三种模型模式。
在 auto 模式下,系统会根据输入内容自动判断使用快模型还是强模型。比如涉及代码、调试、Linux、systemd、架构、优化等关键词,或者消息较长时,会自动路由到更强的模型;普通短问题则优先使用更快的模型。
语音交互闭环
语音输入采用手动触发方式:点击麦克风开始录音,再点一次停止录音。
停止后可以选择直接识别并发送给 Lobster,也可以先识别到输入框里确认。后端会通过 arecord 录音,分析 WAV 的 RMS 和 Peak,并把音频处理成适合 STT 的格式。
语音输出部分支持 TTS 合成和本地播放,可以把 Lobster 的回复读出来。这样就形成了从“说话 → 识别 → Agent 回复 → 朗读”的完整闭环。
情绪化 Lobster 角色
界面中央的 Lobster 不只是装饰,它会根据对话和状态变化切换心情。
比如:
- pending 时显示思考状态
- 提到笑话或开心内容时变开心
- 遇到分析类问题时变思考
- 处理任务时进入工作状态
- 出现难过、困惑、生气等语义时切换对应情绪
这种情绪化反馈让 Dashboard 更像一个有性格的小终端,而不只是普通信息面板。
中文输入专项适配
树莓派 + Chromium + 小屏幕的中文输入并不总是稳定,所以项目同时做了两层支持:
第一层是通过 fcitx5-remote 控制系统输入法,在中文和英文之间切换。
第二层是网页内置的拼音输入 fallback,通过页面里的拼音候选面板和后端候选词接口,在系统输入法不好用时也能输入中文。
系统监控和硬件控制
Dashboard 还集成了天气、CPU、内存、磁盘、温度、运行时间、网络、电源和风扇状态。
在树莓派上,它还会尝试读取 PMIC 电源信息,用来估算板子功耗。风扇也可以通过页面 API 控制档位。
本地 API 安全控制
控制类 POST API 加了本地 token 和 loopback 限制。
Dashboard 页面会从同源的 /api/client-config 获取 token,请求敏感接口时带上 X-Lobster-Token。这样可以减少局域网里其他设备误触发语音、TTS、风扇或 OpenClaw 调用的风险。
后续计划
接下来我想继续完善这些部分:
- 补充实际运行照片和界面截图
- 优化 7 寸屏幕上的布局、字体和触控体验
- 继续调整语音输入的稳定性
- 增加更多硬件状态展示
- 整理完整的部署流程
- 根据长期使用体验优化 Lobster 的情绪反馈
这个项目对我来说是一次把 AI、树莓派、小屏幕和语音交互组合起来的实验。它还不完美,但已经是一个可以真实运行、可以继续迭代的小作品。