开源AI语音机器人小智Xiaozhi-ESP32:低成本构建个人智能助理

开源AI语音机器人小智Xiaozhi-ESP32:低成本构建个人智能助理

目录

项目概述:开源AI语音交互解决方案

核心功能:全面而实用的特性

系统架构:模块化设计

核心组件

状态管理

硬件与部署:灵活的选择方案

硬件需求

部署方式

代码解析:清晰的结构设计

工程结构

核心类设计

入口函数

使用方法:快速上手指南

环境准备

基础配置

优势对比:与传统方案的比较

应用场景:广泛的适用领域

总结:开创性的AIoT开源项目


仅需50元成本,ESP32开发板就能变身智能语音助手,GitHub星标超20k的xiaozhi-ESP32项目正掀起AI硬件DIY热潮。

如今,人工智能与物联网技术的结合让智能设备日益普及。今天介绍的Xiaozhi-ESP32是一个基于ESP32开发板的开源AI聊天机器人项目,它让你能够用低成本硬件打造个人专属的语音智能助手。

项目概述:开源AI语音交互解决方案

Xiaozhi-ESP32是一个基于ESP-IDF开发框架的开源硬件项目,旨在利用低成本硬件打造个人专属的AI聊天机器人。它通过WebSocket或UDP协议与LLM、TTS API服务连接,实现实时语音交互功能,无需在设备上运行LLM。

该项目由国内开发者"虾哥"创建,采用MIT开源协议,允许用户自由使用、修改和分发代码,只需包含原作者的版权声明和许可声明即可。这一特性使其特别适合学生、创客和开发者进行AI+IoT项目实践。

核心设计理念是通过模块化、可扩展的架构,在资源受限的嵌入式设备上实现流畅的语音交互。该方案平衡了性能与成本,让更多人能够接触并学习AI技术。

Image

核心功能:全面而实用的特性

Xiaozhi-ESP32集成了多种先进功能,使其在开源智能硬件中表现突出:

  • 语音唤醒与交互:支持离线语音唤醒,同时也可通过BOOT键实现点击和长按两种触发方式,提供灵活的交互选择
  • 多语言识别:支持国语、粤语、英语、日语、韩语五种语言的语音识别,借助SenseVoice模型实现高效准确的识别
  • AI对话与合成:集成多种大语言模型(如Qwen、DeepSeek、Doubao),支持大模型TTS(包括火山引擎或CosyVoice),实现自然流畅的语音对话
  • 显示功能:支持OLED/LCD显示屏,可实时显示信号强度、对话内容,还支持LCD显示图片表情
  • 物联网控制:内置ThingManager类管理物联网设备,可通过语音命令控制智能家居设备
  • 声纹识别:能够识别是谁在喊AI的名字,基于3D Speaker模型,提供个性化体验
  • 记忆功能:具备短期记忆能力,每轮对话后会进行自我总结,增强交互连续性
  • 网络连接:除了常规的Wi-Fi连接,还支持ML307 Cat.1 4G网络,增加使用场景灵活性

Image

系统架构:模块化设计

Xiaozhi-ESP32采用模块化架构,中央应用控制器负责协调各个子系统。该架构使系统能够与不同的硬件配置协同工作,同时保持一致的功能。

核心组件

系统由几个关键组件协同工作:

  • 应用程序控制器:管理设备状态并协调所有其他组件,是系统核心
  • 电路板抽象层:提供独立于硬件的物理组件访问,使核心应用程序无需了解组件具体实现细节即可与它们交互
  • 通信协议:通过WebSocket或MQTT处理客户端-服务器通信
  • 显示系统:管理所连接显示器上的视觉反馈
  • 音频处理:处理音频输入/输出和处理

状态管理

系统通过明确定义的状态机进行操作,控制设备响应用户交互和系统事件的行为。状态包括启动、激活、升级、空闲、连接、监听、说话和Wi-Fi配置等不同模式。

硬件与部署:灵活的选择方案

硬件需求

Xiaozhi-ESP32兼容多款ESP32开发板,以下是核心硬件要求:

  • 主控板:ESP32-S3或ESP32-C3开发板(如ESP32-WROOM或ESP32-S3)
  • 音频模块:麦克风模块用于语音输入,扬声器模块用于语音输出
  • 显示模块:可选配OLED或LCD显示屏
  • 网络模块:支持Wi-Fi或ML307 Cat.1 4G通信

面包板效果图

部署方式

项目提供两种运行方式:

  • 在线版本:接入xiaozhi.me服务器,个人用户可免费试用,适合普通用户
  • 离线版本:在本地个人电脑上搭建服务器,需要一定的技术背景,更适合开发者

代码解析:清晰的结构设计

了解项目代码结构有助于二次开发,项目主要使用C++语言实现。

工程结构

项目仓库包含多个文件和文件夹,主要结构如下:

  • **main/**:主要源码文件夹,包含应用程序核心逻辑
  • **docs/**:文档文件,包含README文档使用的图片资料和服务器websocket交互协议
  • **scripts/**:脚本文件,包含音频编码测试脚本、烧录调试脚本等
  • 配置文件:包括分区配置和SDK默认配置

核心类设计

整个工程的类图主要围绕Application、Board、ThingManager三个大类进行实现:

  • Application类:作为整个应用程序的核心管理类,负责协调和控制各个功能模块的运行
  • Board类:是一个抽象基类,定义了硬件设备的接口,为不同的硬件平台提供统一的操作方法
  • ThingManager类:作为物联网设备管理类,负责管理多个Thing对象

入口函数

整个工程的入口函数在xiaozhi-esp32/main/main.cc中,初始化默认事件循环和NVS后,通过Application::GetInstance().Start()直接启动应用。

extern "C" void app_main(void) {     // 初始化默认事件循环     ESP_ERROR_CHECK(esp_event_loop_create_default());     // 初始化 NVS flash 以存储 WiFi 配置     esp_err_t ret = nvs_flash_init();     // ... 更多初始化代码 } 

使用方法:快速上手指南

环境准备

要开始使用Xiaozhi-ESP32,需要先准备开发环境:

  1. 安装开发环境:推荐使用Arduino IDE或PlatformIO进行代码编写和烧录
  2. 配置硬件:将麦克风模块、扬声器及其他所需传感器连接到ESP32开发板上
  3. 获取源码:从GitHub仓库下载项目代码

基础配置

配置设备主要涉及以下步骤:

  1. 网络配置:设置Wi-Fi或4G网络连接参数
  2. 服务配置:配置LLM和TTS服务参数
  3. 设备注册:在管理后台注册设备并获取访问凭证

优势对比:与传统方案的比较

与商业智能助手相比,Xiaozhi-ESP32具有明显优势:

特性商业智能助手Xiaozhi-ESP32
成本

高昂

使用低成本ESP32,经济实惠

数据隐私

数据传输至云端,有隐患

本地运行,无需云端支持,隐私性更高

功能定制

功能固定,扩展困难

完全开源,可自由扩展功能

技术门槛

专业配置

入门简单,适合学习与开发

应用场景:广泛的适用领域

Xiaozhi-ESP32可应用于多种场景:

  • 智能家居控制:通过语音控制灯光、窗帘、空调等家电设备
  • 个人语音助手:提供天气查询、日程提醒、语音备忘等功能
  • 教育与实践:作为物联网和人工智能开发的优秀学习案例
  • 工业物联网:各类传感器设备返回定制化的状态报告

总结:开创性的AIoT开源项目

Xiaozhi-ESP32是一个兼具功能性和学习价值的开源项目,它降低了AI语音交互的开发门槛,让更多人能体验并学习AI技术。项目采用模块化架构设计,功能丰富且持续更新,社区活跃。

无论是智能家居控制、个人语音助手开发,还是AI+IoT技术学习,Xiaozhi-ESP32都是一个理想的选择。其开源特性也允许开发者根据自己的需求定制功能,为智能硬件开发提供了更多可能性。


GitHub项目地址:

 https://github.com/78/xiaozhi-esp32

Read more

Java 项目中的 .idea 与 target 文件夹

在 Java 开发中,.idea 和 target 是两个常见的目录,它们在项目中扮演着不同的角色。理解它们的作用以及何时需要删除重建,是提升开发效率的关键。 一、.idea 文件夹:IDE 的专属配置中心 .idea 是 IntelliJ IDEA 为项目自动生成的本地配置目录,它的核心作用是保存 IDE 层面的所有个性化和项目级设置,与业务代码逻辑完全解耦。 核心内容 * 项目基础配置:包含 SDK 版本、语言级别、编码格式、模块依赖关系等项目级基础配置,确保团队成员在同一规范下开发。 * IDE 个性化配置:记录你的运行 / 调试配置、断点位置、代码格式化规则、书签等个人开发习惯,让你每次打开项目都能快速进入熟悉的工作状态。 * 索引缓存:为了实现代码的快速检索和跳转,IDEA 会为项目代码建立索引,这些索引文件就存储在这里,也是你能通过双击 Shift 快速搜索内容的关键。 * 插件适配配置:

By Ne0inhk
Java Web开发基础与Servlet核心技术

Java Web开发基础与Servlet核心技术

Java Web开发基础与Servlet核心技术 15.1 学习目标与重点提示 学习目标:掌握Java Web开发的核心概念与Servlet技术的使用方法,包括Web应用的结构、Servlet的定义与使用、HTTP请求与响应的处理、会话管理、过滤器与监听器的使用,学会在实际开发中处理Web应用问题。 重点:Web应用的结构(目录结构、配置文件)、Servlet的定义与使用(Servlet接口、HttpServlet类、注解配置)、HTTP请求与响应的处理(Request、Response对象)、会话管理(Session、Cookie)、过滤器与监听器的使用、Web开发的实际应用场景。 15.2 Web开发概述 Java Web开发是用于处理Web应用的机制。 15.2.1 Web开发的定义 定义:Web开发是用于处理Web应用的机制。 作用: * 实现Web应用的开发。 * 实现客户端与服务器之间的通信。 * 实现动态网页的生成。 * 实现Web应用的部署与维护。 ✅ 结论:Web开发是用于处理Web应用的机制,作用是实现Web应用的开发、客户端与服务器之间的通

By Ne0inhk
Spring Cloud Alibaba 2025.1.0.0 正式发布:拥抱 Spring Boot 4.0 与 Java 21+ 的新时代

Spring Cloud Alibaba 2025.1.0.0 正式发布:拥抱 Spring Boot 4.0 与 Java 21+ 的新时代

🧑 博主简介:ZEEKLOG博客专家,「历代文学网」(PC端可以访问:https://lidaiwenxue.com/#/?__c=1000,移动端可关注公众号 “ 心海云图 ” 微信小程序搜索“历代文学”)总架构师,首席架构师,也是联合创始人!16年工作经验,精通Java编程,高并发设计,分布式系统架构设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。 🤝商务合作:请搜索或扫码关注微信公众号 “ 心海云图 ” Spring Cloud Alibaba 2025.1.0.0 正式发布:拥抱 Spring Boot 4.0.2

By Ne0inhk
【C++】explicit关键字详解(explicit关键字是什么? 为什么需要explicit关键字? 如何使用explicit 关键字)

【C++】explicit关键字详解(explicit关键字是什么? 为什么需要explicit关键字? 如何使用explicit 关键字)

目录 一、前言 二、explicit关键字是什么?   三、构造函数还具有类型转换的作用  🍎单参构造函数 ✨引出 explicit 关键字   🍍多参构造函数 ✨为什么需要explicit关键字?  ✨怎么使用explicit关键字? 四、总结   五、共勉 一、前言         在我们自己平时写 C++ 代码的时候,较少会用到 explicit关键字 。但是在C++相关的标准类库中,看到explicit关键字的频率还是很高的。既然出现的频率这么高,那么我们就来看看explicit关键字的作用到底是干什么的。 二、explicit关键字是什么?          explicit是C++中的一个关键字,它用来修饰只有一个参数的类构造函数,以表明该构造函数是显式的,而非隐式的。当使用explicit修饰构造函数时,它将禁止类对象之间的隐式转换,以及禁止隐式调用拷贝构造函数。         这能这么说,大家不太好理解,既然解释中提到了类的构造函数  那么下面我将从构造函数中详细的给大家,讲解explicit其中的含义。  三、构造函数还具

By Ne0inhk