之前在HomeAssistant里使用Node-RED+小米智能音箱+某GPT实现了智能问答应用,但使用起来不太方便,最近看到一个开源项目,正好手头又有相关配件,于是试着搭建了一个自己的聊天机器人。

一、器件准备

1.  ESP32开发板(ESP-WROOM-32)

2、INMP441全向麦克风

3、MAX98357 I2S音频放大器模块

4、1.8寸(128x160)TFT彩色显示屏(8针)

5、小型喇叭

6、3D打印外壳

   

7、按钮开关

6*6*9按钮微动开关

二、器件连接

INMP441ESP32MAX98357ESP32TFT显示屏ESP32

LED

(可选)

ESP32
VDD3.3vVinVINVDDVIN正极GPIO33
GNDGNDGNDGNDGNDGND负极GND
SDGPIO22LRCGPIO27SCLGPIO18
WSGPIO15BCLKGPIO26SDAGPIO23
SCKGPIO4DINGPIO25RSTGPIO12
DCGPIO32
CSGPIO5

如下图:

三、注册并开通大模型服务

以接入讯飞星火模型为例:

1、注册账号

进入https://www.xfyun.cn注册个人账号

2、创建应用

完成注册并登录后,进入控制台,选择创建新应用,平台将自动生成APPID。

  

3、开通服务

点击已创建的应用条目,点击“更多服务信息查询”,可查看你的APPID、APISecret、APIKey信息,记录下来后面代码调试将使用。

返回后重新点击已创建的应用条目,进入后选择左侧的Spark4.0 Ultra模型,点击“立即购买”,然后选择我的应用、“免费包(个人)”,最后“确认下单”,这样就开通了讯飞认知大模型。

  

同样的操作,再选择开通语音转文字服务。

四、烧录固件

1、编译环境准备

下载vscode和platformIO插件

2、从GitHub克隆代码

地址:GitHub - Explorerlowi/ESP32_AI_LLM: 本项目使用esp32、esp32s3接入讯飞星火、豆包、chatgpt等大模型,实现语音对话聊天功能,支持语音唤醒、连续对话、音乐播放等功能,同时外接了一块显示屏实时显示对话的内容。

注意:找到.pio\libdeps\upesy_wroom\TFT_eSPI路径下的User_Setup.h文件,删除它,然后将根目录下的User_Setup.h文件剪切粘贴过去

3、按需修改代码

必须修改的代码:

......

int llm = 1;    // 大模型选择参数:0:豆包,1:讯飞星火,2:通义千问

......

// 讯飞stt和大模型服务的参数
String APPID = "12345678";     // App ID,必填
String APISecret = "12345678"; // API Secret,必填
String APIKey = "12345678";    // API Key,必填

......

根据个人喜好可以修改的代码:

......

// 角色设定
String roleSet = "你是一个二次元魔法猫娘,你的名字叫小灵,你的性格可爱活泼,说话简短,同时带有攻击嘲讽意味,你喜欢在回答的末尾加一个“喵”字。";
String roleSet1 = "你是一个二次元魔法猫娘,你的名字叫小灵,你的性格可爱活泼,说话简短,同时带有攻击嘲讽意味,你喜欢在回答的末尾加一个“喵”字。";


......

                // 增加足够多的同音字可以提高唤醒率,支持多唤醒词唤醒(askquestion.indexOf("你好") > -1 || askquestion.indexOf("您好") > -1) &&
                if( (askquestion.indexOf("坤坤") > -1 || askquestion.indexOf("小白") > -1 || askquestion.indexOf("丁真") > -1 || askquestion.indexOf("九歌") > -1))
                {
                    await_flag = 0;     //退出待机状态
                    start_con = 1;      //对话开始标识
                    Answer = "喵~九歌在的,请尽情吩咐小九歌,主人。";
                    response();     //屏幕显示Answer以及语音播放
                    conflag = 1;
                    return;
                }
......

Answer = "嗨~我没有听清,请再说一遍吧";

......

            else if (askquestion.indexOf("退下") > -1 || askquestion.indexOf("再见") > -1 || askquestion.indexOf("拜拜") > -1)
            {
                start_con = 0;      // 标识一轮对话结束
                musicplay = 0;
                Answer = "喵~主人,我先退下了,有事再叫我。";
                response();     //屏幕显示Answer以及语音播放
                await_flag = 1;     // 进入待机状态
                awake_flag = 0;     // 继续进行唤醒词识别
            }

......

4、编译并上传固件

在vscode中安装platformIO插件,编译并上传固件即可。

五、使用说明

1、首次使用设置

1)设备通电后,用电脑连接设备热点ESP32-Setup密码为12345678

2)打开浏览器,输入http://192.168.4.1

3)进入ESP32 Configuration页面,点击“WI-FI Management”

4)输入你的WI-FI信息,点击“Save”

如果需要在其他WIFI环境使用,也可以添加多个WIFI,只不过启动会稍微慢一点。也可以通过“Delete”删除多余的WIFI配置。

2、正常使用

点击ESP32开发板上的“EN”重启键设备,就可以连接WIFI开始使用了。在待机状态下,使用唤醒词“小白”唤醒设备,设备应答后就可以开始提问。设备回答完一个问题,过一段时间没有新的问题,设备会自动回到待机模式。也可以说“拜拜”“退下”让设备进入待机模式。如要在设备回答过程中终止设备回答,可以按ESP32开发板上的“ROOT”按钮,开始下一个提问。如设备响应出现问题,可以按“EN”键重启设备。

六、组装

1、打印3D外壳

在以下地址下载3D打印外壳文件:

百度网盘链接:https://pan.baidu.com/s/1ek-Phzb4BuplCgqt3bZ0RA?pwd=ulze 
提取码:ulze 
 

2、组装

按照接线图进行组装,注意为方便操作,需将ESP32开发板上的“EN”、“ROOT”键外接到机壳上。

3、效果视频

ESP32制作聊天机器人(连接大模型)_哔哩哔哩_bilibili

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐