# 小智 ESP32 语音助手 这是一个基于 ESP32 的语音交互助手系统,支持中文语音识别和播放功能,适用于智能家居控制。作为 Home Assistant 的加载项,提供便捷的安装和管理体验。 ## 使用指南 ### 安装前准备 1. Home Assistant OS、Supervised 或 Container 安装方式 2. MariaDB 加载项已安装(或外部 MySQL/MariaDB 数据库) 3. 具有较好网络连接的环境 4. 足够的存储空间(至少 500MB) ### 配置选项说明 | 选项 | 描述 | | ---------------- | ------------------------------------------------------ | | `mysql_host` | 数据库主机地址,默认使用 MariaDB 插件为 `core-mariadb` | | `mysql_port` | 数据库端口,默认为 `3306` | | `mysql_database` | 数据库名称,默认为 `xiaozhi` | | `mysql_user` | 数据库用户名,默认为 `xiaozhi` | | `mysql_password` | 数据库密码,默认为 `123456` | | `java_memory` | Java 应用内存分配,如 `512m`、`1g`、`1.5g` | ### 数据库设置 **自动配置方式**: 插件会尝试自动创建数据库和所需表结构,您只需在配置中提供有效的数据库连接信息。 **手动配置方式**: 如果您希望手动设置数据库,可以执行以下步骤: ```sql CREATE DATABASE xiaozhi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'xiaozhi'@'%' IDENTIFIED BY '你的安全密码'; GRANT ALL PRIVILEGES ON xiaozhi.* TO 'xiaozhi'@'%'; FLUSH PRIVILEGES; ``` ### 内存管理 可以通过配置项 `java_memory` 控制分配给 Java 应用的堆内存大小,格式示例: - `512m`(512 兆字节,适合大多数使用场景) - `1g`(1 吉字节,适合大量设备和频繁交互场景) - `1.5g`或更高(适合高负载场景) **内存管理建议**: - 默认内存分配(512MB)足够普通使用 - 对于多设备场景,建议分配 1GB 或更多内存 - 如遇内存不足问题,增加分配至 1GB 或更高 **优化资源使用**: - **关闭其他不必要的加载项释放资源**:Home Assistant 上可能同时运行多个加载项,每个加载项都会消耗系统资源。建议临时停用不常用的加载项,特别是资源密集型的加载项(如 Node-RED、VS Code 等),以释放更多内存给语音识别服务。 - **监控资源使用**:通过 Home Assistant 的系统监控加载项,定期检查系统资源使用情况,确保有足够的可用内存。 - **优化运行时参数**:对于性能有限的设备(如某些 Raspberry Pi 型号),确保系统有足够的交换空间(swap)。 - **定期重启**:如果发现内存使用率持续升高,建议定期重启加载项,以释放累积的内存占用。可以在 Home Assistant 中设置自动化,定期重启此加载项。 ### 端口说明 本加载项使用以下端口: - **8091**:API 服务端口(ESP32 设备通过 WebSocket 连接此端口) - **8084**:Web 管理界面端口(可通过 Home Assistant 边栏访问) ## Web 界面功能 通过 Home Assistant 的边栏图标或直接访问`http://你的HA地址:8084`进入 Web 管理界面。 默认账号:admin 默认密码:123456 ### 设备管理 可以添加、编辑和删除 ESP32 设备,主要功能: - 设备列表查看 - 设备状态监控(在线/离线) - 设备信息编辑 ### 音色配置 支持为 ESP32 设备配置不同的语音合成音色: - 预设多种中文音色 - 音色预览功能 - 为不同设备分配不同音色 ### 角色设置 可以选择不同的 AI 助手角色: - AI 助手 - 智能家居助手 - 其他预设角色 ### 对话管理 查看与 ESP32 设备的历史对话: - 按时间查看历史消息 - 按关键词搜索对话内容 - 消息管理功能 ## ESP32 设备配置 1. 获取并烧录 ESP32 固件(从[原始项目](https://github.com/78/xiaozhi-esp32)获取) 2. 将 ESP32 设备连接到与 Home Assistant 相同的网络 3. 在 ESP32 固件配置中设置服务器地址: ``` ws://你的HA地址:8091/ws/xiaozhi/v1/ ``` 4. 在 Web 管理界面中添加对应的设备信息 ## 高级功能 ### 持久化对话 系统支持持久化对话记录,可以记住与用户的对话上下文: - 自动保存对话历史 - 根据历史对话进行上下文理解 - 提供更自然的对话体验 ### 自定义唤醒词(需 ESP32 固件支持) 如果 ESP32 固件支持,可以通过接口设置自定义唤醒词。 ## 故障排查 ### 加载项无法启动 - 检查 MariaDB 服务是否正常运行 - 验证数据库连接信息(主机、端口、用户名、密码) - 查看 Home Assistant 日志是否有错误信息 - 确保分配了足够的内存给加载项 ### 语音模型问题 - 检查 `/config/models/vosk-model` 目录是否存在模型文件 - 如果模型不存在,请手动下载并解压到该目录 - 确保存储空间足够(至少需要 100MB 空闲空间) - 确保下载的是中文语音模型 ### ESP32 设备无法连接 - 验证 ESP32 和 Home Assistant 在同一网络环境 - 检查 WebSocket 地址格式是否正确(ws://ip:8091/ws/xiaozhi/v1/) - 确认 ESP32 固件是否正确配置 - 检查防火墙是否阻止了 WebSocket 连接 ### 内存不足错误 - **增加`java_memory`配置**:根据设备性能适当增加,如从 512m 改为 1g - **关闭其他不必要的加载项释放资源**: - 在 Home Assistant 的加载项页面,暂时停用不常用的资源密集型加载项 - 特别关注数据库、多媒体相关加载项,它们通常消耗较多资源 - 考虑使用 Home Assistant 的"系统诊断"功能,检查哪些加载项占用较多资源 - 如果使用的是低配置设备(如 Raspberry Pi 3 或更低),可能需要限制同时运行的加载项数量 - **优化系统配置**: - 增加系统交换空间(在树莓派等设备上尤为重要) - 考虑使用性能更强的设备运行 Home Assistant - 确保设备有足够的散热,避免因过热导致的性能降低 ## 技术架构 本加载项基于以下技术构建: - **容器技术**:Docker + S6 Overlay(进程管理) - **前端**:Vue.js + Ant Design(Web 管理界面) - **后端**:Java Spring Boot(RESTful API 和 WebSocket 服务) - **语音处理**:VOSK(语音识别)+ ONNX Runtime(模型推理) - **数据存储**:MySQL/MariaDB(对话历史和配置) ## 支持与贡献 如有问题或建议,请访问[项目 GitHub 页面](https://github.com/joey-zhou/xiaozhi-esp32-server-java)。 欢迎提交问题报告、功能请求或代码贡献。