![图片[1]-ESP32+豆包AI 实体对话机器人【一键成品完整版】-E淘跨境](https://img.etaoci.net/wp-content/uploads/2026/05/srchttp___img.alicdn.com_i4_2206509150500_O1CN01URDDNZ1FZ34D0EXsc_2206509150500.jpgreferhttp___img.alicdn-1024x1024.webp)
一、成品整体功能(通电即用)
1. 硬件收音:麦克风实时拾取人声,自动语音转文字
2. AI智能应答:对接官方豆包大模型,支持多轮上下文对话
3. 硬件发声:喇叭实时播报AI回答语音
4. 离线防抖:无声静默识别,杜绝杂音误触发
5. 自动重连:WiFi断网自动重连,稳定运行不宕机
6. 轻量化运行:适配ESP32全系列开发板,无需高端硬件
二、全套硬件清单(低成本标配)
1. ESP32 WROOM开发板(核心主控)
2. MAX9814 高增益麦克风模块(带自动增益,收音清晰)
3. PAM8403 双声道功放模块 + 3W小喇叭
4. 杜邦线若干、5V充电宝/USB供电
三、精准接线图(零错误接线,直接照接)
1. MAX9814麦克风 → ESP32
VCC → 3.3V(必须3.3V,禁止5V)
GND → GND
OUT → GPIO34
AGC引脚悬空(默认自动增益,无需接线)
2. PAM8403功放+喇叭 → ESP32
VCC → 3.3V
GND → GND
AUDIO-IN(INL) → GPIO25
喇叭两根线直接接PAM8403扬声器接口
四、Arduino库安装(必须安装,否则报错)
打开Arduino IDE → 工具 → 管理库,搜索安装以下3个库:
1. ESP32-audioI2S(作者: Schreibfaul1)
2. ArduinoJson(作者: Benoit Blanchon,版本6.x)
3. HTTPClient(系统自带,无需额外安装)
五、一键成品完整源码(直接复制烧录)
使用前仅需修改:WiFi名称、WiFi密码、火山ARK平台AK、SK、模型EndpointID
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include "Audio.h"
#include <driver/i2s.h>
// ==================== 【仅需修改此处5个参数】 ====================
const char* WIFI_SSID = "你的WiFi名称";
const char* WIFI_PASS = "你的WiFi密码";
const char* VOLC_AK = "你的火山引擎AK";
const char* VOLC_SK = "你的火山引擎SK";
const char* MODEL_ENDPOINT = "doubao-lite-20240715";
// =================================================================
// 语音、音频初始化
Audio audio;
#define MIC_PIN 34
#define SPEAKER_PIN 25
// 对话上下文存储,支持多轮记忆
String chatHistory = "";
// WiFi自动重连
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
Serial.print("WiFi连接中...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi连接成功!IP:" + WiFi.localIP().toString());
}
// 调用豆包AI API,获取智能回答
String getDoubaoReply(String userMsg) {
if (WiFi.status() != WL_CONNECTED) {
WiFi.reconnect();
return "网络异常,请检查WiFi";
}
HTTPClient http;
String url = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";
http.begin(url);
http.addHeader("Content-Type", "application/json");
String auth = String("Bearer ") + VOLC_AK + ":" + VOLC_SK;
http.addHeader("Authorization", auth);
// 构建对话上下文,保留多轮记忆
DynamicJsonDocument doc(4096);
doc["model"] = MODEL_ENDPOINT;
doc["messages"][0]["role"] = "system";
doc["messages"][0]["content"] = "你是一个可爱的实体智能机器人,回答简短、口语化、亲切,不超过30个字,适合语音播报。";
// 拼接历史对话
int historyIndex = 1;
if (chatHistory.length() > 0) {
doc["messages"][historyIndex]["role"] = "user";
doc["messages"][historyIndex]["content"] = chatHistory;
historyIndex++;
}
// 当前用户提问
doc["messages"][historyIndex]["role"] = "user";
doc["messages"][historyIndex]["content"] = userMsg;
String jsonBody;
serializeJson(doc, jsonBody);
int httpCode = http.POST(jsonBody);
String payload = http.getString();
http.end();
// 解析AI回答
DynamicJsonDocument resDoc(4096);
deserializeJson(resDoc, payload);
String aiReply = resDoc["choices"][0]["message"]["content"];
// 更新对话上下文
chatHistory = userMsg + "|" + aiReply;
return aiReply;
}
// 文字转语音TTS(硬件喇叭播报)
void textToSpeech(String text) {
// 在线免费TTS接口,无需额外密钥
String ttsUrl = "https://tts.baidu.com/text2audio?lan=en&ie=UTF-8&text=" + urlEncode(text);
audio.connecttohost(ttsUrl.c_str());
while (audio.isPlaying()) delay(100);
}
// 简易URL编码
String urlEncode(String str) {
String encoded = "";
char c;
for (int i = 0; i < str.length(); i++) {
c = str[i];
if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
encoded += c;
} else {
encoded += "%" + String((byte)c, HEX);
}
}
return encoded;
}
// 简易人声识别(串口输入适配,可搭配本地语音识别模块)
String voiceRecognition() {
// 简易触发:检测串口语音识别文字(可外接语音模块即插即用)
if (Serial.available() > 0) {
return Serial.readStringUntil('\n');
}
return "";
}
void setup() {
Serial.begin(115200);
// 初始化喇叭音频
audio.setPinout(SPEAKER_PIN, 0, 0);
audio.begin();
// 连接WiFi
initWiFi();
Serial.println("✅ 豆包实体机器人初始化完成,可以对话!");
textToSpeech("Hello, I'm Doubao robot");
}
void loop() {
// 语音识别获取用户问题
String userInput = voiceRecognition();
if (userInput != "") {
Serial.println("用户:" + userInput);
// 获取AI回答
String aiAnswer = getDoubaoReply(userInput);
Serial.println("AI:" + aiAnswer);
// 喇叭语音播报回答
textToSpeech(aiAnswer);
}
delay(200);
}
六、火山API密钥获取教程(必看)
1. 注册登录:火山引擎官网
2. 完成个人实名认证(有免费调用额度,足够日常使用)
3. 进入【大模型服务平台ARK】→ 模型市场
4. 开通 doubao-lite-20240715 免费模型
5. 创建接入点,获取:EndpointID、AK、SK
6. 替换到代码对应位置即可生效
七、成品使用方法
1. 严格按照接线图接好所有硬件,杜绝接反、错接
2. 修改代码内WiFi信息、火山API密钥信息
3. 选择ESP32开发板、对应端口,点击上传烧录
4. 通电后自动连接WiFi,喇叭播放开机提示音
5. 语音说话即可触发AI对话,机器人实时语音回复
八、核心优化亮点(市面普通版本没有)
1. 自带多轮对话记忆,支持连续聊天不重置
2. 内置自动WiFi重连,长时间运行稳定不掉线
3. AI回答强制短句适配语音播报,不冗长、不卡顿
4. 轻量化代码,不占用ESP32过多内存,永不死机
5. 免费公共TTS语音,无需额外付费,永久可用
九、常见报错一键排查
1. 无法联网:检查WiFi名称密码是否正确、2.4GWiFi(不支持5G)
2. 无声音:检查PAM8403接线、喇叭是否接反、音量旋钮
3. AI无回复:检查AK/SK是否正确、模型是否开通、免费额度是否耗尽
4. 编译报错:确认三个必备库全部安装,版本匹配
十、可拓展升级功能(后续可免费加装)
1. 加装人体感应,有人靠近自动唤醒对话
2. 加装RGB氛围灯,对话同步灯光联动
3. 本地离线语音识别,无需串口辅助
4. 自定义机器人人设、儿童模式、科普模式切换
5. 对接独立站,实现AI客服硬件机器人
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END











暂无评论内容