让AI知识触手可及

首页 » 【项目实战】基于esp32开发板+大模型实现的陪伴助手-硬件篇

背景

随着AI的火热,目前有不少公司尝试进行AI+IoT的结合,以实现更智能的陪伴机器人。基于以上背景,本章将分享一个基于AI的陪伴机器人项目,其中涉及到的知识点主要有:硬件Esp32电路板组装、Arduino编程、dify后端服务部署、前后端接口联调等。

项目目标

构建一个能够语音交流的陪伴机器人。

项目架构

说明:

  1. 程序启动后创建唤醒词工作线程;
  2. 用户说话,触发唤醒词工作线程;
  3. 唤醒词识别成功后,启动对话工作线程,该线程会进行:
    1. 通过ESP32的麦克风采集用户语音;
    2. 将语音发送至百度语音识别接口;
    3. 识别结果返回后,对话工作线程将识别结果发送至dify后端服务;
    4. dify后端服务根据识别结果,调用LLM大模型,生成回复内容;
    5. 待回复内容返回后,对话工作线程将回复内容发送至百度语音合成接口;
    6. 合成结果返回后,对话工作线程将合成结果发送至ESP32的扬声器,完成一次对话。

技术点

本次项目中涉及到的技术点主要有:
前端部分:

  1. 硬件构成:硬件电路板组装
  2. 硬件编程:Arduino编程
  3. 模型训练:唤醒词识别的模型训练

后端部分:

  1. 接口调用:语音识别和语音合成
  2. 服务部署: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中安装arduinojsonbase64urlencode三个组件库。

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

下载后解压文件,拖动程序到application即可。

2.2.3 开发板端口选择

通过typeC接口连接MAC和开发板后,在arduino IDE中选择对应的端口。

2.2.4 编译程序

点击图中的编译按钮,编译程序。

2.2.5 烧写程序

  1. 如图连接dsp32开发板

  2. 一只手按住BOOT键不松手

  3. 另一只手短按一下RST键后松手,接着按住BOOT键的手松开。

  4. ESP32-S3此时进入串口烧录模式,等待程序下载。

  5. 点击左上侧的箭头图标,开始编译并下载程序。

  6. 烧录完成后,开发板上的LED灯会开始闪烁。

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/

测试方法:

  1. 打开audio_player工程
  2. 在烧录时前,开启psram
  3. 点击编译按钮,编译程序
  4. 点击上传按钮,上传程序
  5. 上传完毕后,进行语音说话,程序会重复播放语音

调试过程中,也可以将代码中的日志打开,使用日志查看工具查看日志信息。

Mac下的串口调试程序推荐串口调试助手Pro,在App Store中搜索即可。

测试结果:
运行程序后,语音提示接下来会进行5秒的录音,请讲话;讲话后,程序会重复播放录音的内容,测试即通过。

特别说明:

  1. 如果麦克风和喇叭硬件没有正常工作,请检查硬件连接是否正常,焊接点是否虚焊。
  2. 如果启动程序后出现异常,在串口中提示崩溃,请检查是否开启了psram。

2.3.4 测试SD卡读写

代码路径:example/SD_Test/

测试方法:

  1. 打开SD_Test工程
  2. 编译程序并上传
  3. 运行程序后,在SD卡中会创建两个文件

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() {

}

测试方法:

  1. 打开wifi_smartconfig工程,配置相应的wifi热点名称和密码
  2. 编译程序并上传
  3. 运行程序后,会自动进行WiFi配网,配网成功后,会自动连接到WiFi网络

运行结果:

至此,我们基本上完成了Dsp硬件的组装、IDE环境配置以及程序测试。
下一篇模型篇,将基于DSP32开发板,实现唤醒词识别、语音识别、语音合成、对话交互等功能。

参考资料

https://gitee.com/chging/esp32s3-ai-chat

该系列其他文章

欢迎关注公众号以获得最新的文章和新闻

声明:一起AI技术所有文章,如无特殊说明或标注,均为本站作者原创发布。任何个人或组织,在未征得作者同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。
原创不易,内容版权受保护,感谢您的尊重与支持。
5 1 投票
Article Rating
订阅评论
提醒
guest的头像
0 评论
内联反馈
查看所有评论
Picture of Dongming
Dongming
见天地,见众生,见自己。

分类文章

推荐活动

推荐文章

【产品体验】DeepSeek的三种接入使用方法
【论文简读】DeepSeek LLM:以长远主义拓展开源语言模型
【产品体验】趋动云上使用LLaMaFactory进行模型微调的流程体验
【课程总结】day24(上):大模型三阶段训练方法(LLaMa Factory)
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
【模型训练】在AutoDL上使用LLamaFactory进行模型训练
【产品体验】豆包大模型实时语音本地化部署及功能体验
【项目实战】基于esp32开发板+大模型实现的语音助手-软件篇
【模型部署】在趋动云上使用vllm部署模型
【模型部署】在趋动云上使用xinference部署模型
0
希望看到您的想法,请您发表评论x
滚动至顶部