文章目录
Toggle背景
随着AI的火热,目前有不少公司尝试进行AI+IoT的结合,以实现更智能的陪伴机器人。基于以上背景,本章将分享一个基于AI的陪伴机器人项目,其中涉及到的知识点主要有:硬件Esp32电路板组装、Arduino编程、dify后端服务部署、前后端接口联调等。
项目目标
构建一个能够语音交流的陪伴机器人。
项目架构
说明:
- 程序启动后创建唤醒词工作线程;
- 用户说话,触发唤醒词工作线程;
- 唤醒词识别成功后,启动对话工作线程,该线程会进行:
- 通过ESP32的麦克风采集用户语音;
- 将语音发送至百度语音识别接口;
- 识别结果返回后,对话工作线程将识别结果发送至dify后端服务;
- dify后端服务根据识别结果,调用LLM大模型,生成回复内容;
- 待回复内容返回后,对话工作线程将回复内容发送至百度语音合成接口;
- 合成结果返回后,对话工作线程将合成结果发送至ESP32的扬声器,完成一次对话。
技术点
本次项目中涉及到的技术点主要有:
前端部分:
- 硬件构成:硬件电路板组装
- 硬件编程:Arduino编程
- 模型训练:唤醒词识别的模型训练
后端部分:
- 接口调用:语音识别和语音合成
- 服务部署:Dify服务部署
代码地址
https://github.com/domonic18/esp32s3-ai-chat
1. 硬件构成
1.1 硬件准备
- 硬件清单:
- ESP32-S3-N16R8开发板
- 语音模块
- 读卡器
- MicroSD卡
1.1.1 开发板ESP32-S3-N16R8
1.1.2 语音模块
1.1.3 读卡器microSD SPI
1.2 硬件组装
1.2.1 音频模块与Dsp32开发板连接
1.2.2 读卡器与Dsp32开发板连接
1.2.3 焊接后的效果
说明:
- 音频模块购买后,需要焊接在DSP32开发板上;
- 焊接时要注意焊接点,不要虚焊,否则会出现信号不准的问题。
2. 硬件编程
2.1 开发环境
由于DSP32开发板是基于Arduino的,所以我们使用的开发环境是Arduino IDE。
根据提示,下载对应的版本并安装即可,例如:
2.1.1 下载arduino IDE
详细下载安装流程不再赘述,具体可以参考CSDN:Arduino IDE下载、安装和配置
2.2 安装依赖库
2.2.1 下载ESP32芯片包安装
在开发管管理中粘贴如下内容:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
然后点击 确定,保存。
打开 开发板管理器
,并搜索输入esp32
,找到 esp32 by Espressif Systems
2.2.2 安装其他组件库
因为后续硬件DSP需要通过HTTP请求与后端交互,交互数据格式为JSON,所以我们需要在Arduino IDE中安装arduinojson
、base64
、urlencode
三个组件库。
Arduino Json库:
点击左侧库管理,搜索arduinojson
,选择对应的组件库,点击安装。
Base64库:
搜索base64
,选择对应的组件库,点击安装。
Urlencode库:
搜索urlencode
,选择对应的组件库,点击安装。
2.2 快速上手
2.2.1 运行第一个示例程序
首先,我们运行arduino预置的示例程序,以测试硬件是否正常工作。
打开arduino软件,点击文件->示例->Basics->Blink,打开亮灯的程序工程。
2.2.2 安装串口驱动程序
因为我的MAC是通过typeC接口连接开发板的,所以需要安装串口驱动程序。
驱动下载地址:https://www.wch.cn/downloads/CH34XSER_MAC_ZIP.html
2.2.3 开发板端口选择
通过typeC接口连接MAC和开发板后,在arduino IDE中选择对应的端口。
2.2.4 编译程序
2.2.5 烧写程序
-
一只手按住BOOT键不松手
-
另一只手短按一下RST键后松手,接着按住BOOT键的手松开。
-
ESP32-S3此时进入串口烧录模式,等待程序下载。
2.3 测试硬件
2.3.1 拉取代码
git clonehttps://github.com/domonic18/esp32s3-ai-chat.git
2.3.2 工程目录介绍
esp32s3-ai-chat/
├── README.md # 项目说明文档
├── esp32s3-ai-chat.ino # 主程序入口文件
├── config.h # 配置头文件,包含所有配置项的声明
├── config.cpp # 配置实现文件,包含所有配置项的定义
├── server_api.ino # 服务器API接口实现,包含与Dify服务器通信的功能
├── audio_process.ino # 音频处理相关功能实现
├── wifi_process.ino # WiFi连接及配网相关功能实现
├── example/ # 示例代码目录
│ ├── audio_player/ # 音频播放测试程序
│ ├── SD_Test/ # SD卡读写测试程序
│ └── wifi_smartconfig/ # WiFi配网测试程序
├── library/ # 项目依赖的库文件
│ ├── ArduinoJson/ # JSON解析库
│ ├── base64/ # Base64编解码库
│ └── UrlEncode/ # URL编码库
└── pcb/ # 硬件PCB设计文件
└── audio_board/ # 音频扩展板设计文件
说明:
- 配置文件
- config.h: 包含所有配置项的声明,如API密钥、URL等
- config.cpp: 配置项的具体实现,定义所有配置变量
- 功能实现文件
- esp32s3-ai-chat.ino: 主程序入口,包含setup()和loop()函数
- server_api.ino: 实现与Dify服务器的通信功能,包括文件上传和工作流执行
- audio_process.ino: 处理音频录制和播放相关功能
- wifi_process.ino: 处理WiFi连接和配网功能
- 测试代码
- audio_player: 音频录制和播放的基础示例
- SD_Test: SD卡读写功能测试示例
- wifi_smartconfig: WiFi配网功能示例
2.3.3 音频录制和播放(测试麦克风喇叭硬件连接是否正常)
代码路径:example/audio_player/
测试方法:
测试结果:
运行程序后,语音提示接下来会进行5秒的录音,请讲话
;讲话后,程序会重复播放录音的内容,测试即通过。
特别说明:
- 如果麦克风和喇叭硬件没有正常工作,请检查硬件连接是否正常,焊接点是否虚焊。
- 如果启动程序后出现异常,在串口中提示崩溃,请检查是否开启了psram。
2.3.4 测试SD卡读写
代码路径:example/SD_Test/
测试方法:
2.3.5 测试WiFi配网
代码路径:example/wifi_smartconfig/
#include <WiFi.h>
const char* ssid = "WiFi名称";
const char* password = "WiFi密码";
void setup() {
//初始化串口
Serial.begin(115200);
delay(10);
// 进行WiFi连接
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
//连接WIFI
WiFi.begin(ssid, password);
//等待WIFI连接成功
while (WiFi.status() != WL_CONNECTED) { //WiFi.status()函数用于获取WiFi连接的状态
//WL_CONNECTED,即连接状态
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop() {
}
测试方法:
- 打开
wifi_smartconfig
工程,配置相应的wifi热点名称和密码 - 编译程序并上传
- 运行程序后,会自动进行WiFi配网,配网成功后,会自动连接到WiFi网络
至此,我们基本上完成了Dsp硬件的组装、IDE环境配置以及程序测试。
下一篇模型篇,将基于DSP32开发板,实现唤醒词识别、语音识别、语音合成、对话交互等功能。
参考资料
https://gitee.com/chging/esp32s3-ai-chat
该系列其他文章
欢迎关注公众号以获得最新的文章和新闻