免提语音助手,支持 OpenClaw ESP32‑S3‑BOX‑3,本地唤醒,可切换 xAI Grok / ElevenLabs 语音识别与合成,无需 Home Assistant。
ESP32 OpenClaw 语音助理.是一项面向实际任务的技能,主要用于Give OpenClaw 硬件语音:一个运行股票的ESPHome irmware 直接与 Docker 桥面交谈——在设备上唤醒字,VAD,STT,OpenClaw。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
为 OpenClaw 赋予硬件级语音能力:一台运行 原生 ESPHome 固件 的 ESP32-S3-BOX-3 直接与 Docker 桥接服务通信 —— 设备端唤醒词检测(on-device wake word)、语音活动检测(VAD)、语音转文本(STT),由 OpenClaw 充当智能体大脑,再将分句流式合成的文本转语音(TTS)音频实时推送至扬声器。整个语音链路中不经过 Home Assistant,且无需修改设备固件:该桥接服务通过 ESPHome 原生 API(TCP 6053)模拟 Home Assistant 语音客户端行为,因此你无需重新刷写固件或编辑设备 YAML 配置。
唤醒词(设备端)→ ESP32-S3-BOX-3 → 桥接服务(Docker):VAD → STT(xAI|ElevenLabs) → 口语化确认应答 → OpenClaw /v1/chat/completions → TTS(xAI|ElevenLabs,流式输出) → 设备通过 HTTP(:10400 端口,FLAC 格式)拉取回复音频
作者所用设备响应自定义训练的唤醒词 "Yo Marvin"。你可选用任意标准 ESPHome 唤醒词(例如 "Hey Jarvis"),或自行训练专属唤醒词;相关流程详见《Hardware Voice Assistant for OpenClaw》文档。
STT 和 TTS 服务提供商可独立切换为 xAI Grok Voice 或 ElevenLabs —— 支持自由组合(例如:低成本 xAI STT + ElevenLabs 自定义音色用于 TTS)。
wake-word-voice-assistants 配置,或其衍生版本;支持标准唤醒词或自定义训练唤醒词)。其他兼容 ESPHome 的语音设备理论上也可工作;桥接服务会自动适配设备所声明的媒体格式。/v1/chat/completions,该端点仅在 OpenClaw 配置中启用聊天接口后才对外提供。该端点须可从桥接服务所在容器访问(默认 compose 配置假定其位于 Docker 主机的 18789 端口)。STT_PROVIDER/TTS_PROVIDER 相匹配。ELEVENLABS_VOICE_ID 在 TTS 使用 ElevenLabs 时为必填项。克隆代码仓库并创建配置文件:
git clone https://github.com/darrenjrobinson/voice-esp32-openclaw.git cd voice-esp32-openclaw cp .env.example .env
在 OpenClaw 中,确保已启用聊天接口,使 /v1/chat/completions 接口正常提供服务,并记录其 URL 与 API 密钥。
编辑 .env 文件 —— 至少需设置以下变量:STT_PROVIDER/TTS_PROVIDER、对应 API 密钥、OPENCLAW_URL、OPENCLAW_API_KEY、ESP32_HOST(若设备 API 启用加密,则还需设置 ESP32_NOISE_PSK),以及 BRIDGE_ADVERTISE_HOST(即 Docker 主机在局域网中的 IP 地址 —— 此值在容器内必需)。本技能附带一份带注释的参考示例文件 example.env。
断开 Home Assistant 对该设备的语音订阅(禁用 ESPHome 集成条目,或禁用其 assist satellite 实体)。该协议仅允许单个语音助手订阅者;若存在两个订阅者,唤醒词将静默失效,无任何响应。
启动桥接服务并验证连接状态:
docker compose --profile bridge up -d --build docker compose logs -f voice-bridge # 预期日志中出现:"Connected to(…)" 和 "device announcement format: flac @ 48000 Hz"
说出唤醒词。完成。
.env 中)| 变量名 | 默认值 | 用途说明 |
|---|---|---|
STT_PROVIDER / TTS_PROVIDER |
xai |
可独立设为 xai 或 elevenlabs —— 任意组合均有效 |
XAI_VOICE |
eve |
支持 xAI 内置的 26 种语音之一,或指定自定义语音 ID |
ELEVENLABS_VOICE_ID |
— | ElevenLabs TTS 必填;可通过 python scripts/elevenlabs_voices.py 列出可用 ID |
ELEVENLABS_TTS_MODEL |
eleven_flash_v2_5 |
最低延迟、半价模型 |
OPENCLAW_SESSION_KEY |
agent:main:voice |
发送至 OpenClaw 的会话标识符(当 OPENCLAW_SESSION_MODE=user 时作为 OpenAI user 字段发送;设为 header 时则作为 X-Session-Key 请求头发送) |
OPENCLAW_TIMEOUT_SECONDS |
240 |
等待智能体响应的最大时长 —— 工具密集型对话可能持续数分钟 |
BRIDGE_ACK_PHRASE |
On it. |
智能体思考期间播放的应答短语;仅合成一次并缓存;留空则禁用该功能 |
BRIDGE_VOLUME |
1.0 |
每次回复前向设备设置的音量(0 表示保持当前音量不变) |
VAD_THRESHOLD |
500 |
语音门限值 —— BOX-3 麦克风底噪较低,实测 60 左右数值效果良好;每次对话的电平统计信息将被记录,便于调优 |
VAD_SILENCE_SECONDS / VAD_MAX_SECONDS |
0.8 / 10 |
话语结束后的静音判定时长与单次录音最大时长 |
TTS_STREAMING |
true |
启用流式合成,以实现最快首字节音频(time-to-first-audio)响应 |
每轮对话的成本统计(美元金额 + ElevenLabs 积分)将追加写入 out/metrics.jsonl。典型单轮成本约为 $0.005(全 xAI 方案)至 $0.015(ElevenLabs TTS 方案)。
.env 修改未生效:容器仅在创建时读取 .env 文件。请在仓库根目录下执行 docker compose --profile bridge up -d(若提示“无变更”,请额外添加 --force-recreate 参数)。仅执行 restart 不足以触发配置重载。/v1/chat/completions 接口)、OPENCLAW_URL 可从容器内部访问,且 OPENCLAW_API_KEY 与 OpenClaw 配置完全一致。BRIDGE_ADVERTISE_HOST 是否为 Docker 主机 在局域网中的 IP 地址,并确认设备可访问该主机的 10400 端口。docker compose --profile bridge down,然后在 Home Assistant 中重新启用 ESPHome 集成 —— 设备将立即恢复使用 HA Assist 语音流水线;设备端从未发生任何变更。相关专题
热门下载
相关下载
精品课程
共1课时 | 154人学习
共0课时 | 0人学习
共1课时 | 200人学习
最新文章