ESP32S3运行MCP, 小智AI用语音让其播放音乐。
必备条件
1.有一台小智AI硬件,安装有小智固件并能进行语音对话。
2.有一台搭建了 https://github.com/OmniX-Space/MeowMusicServer 的音乐服务器URL地址,供该硬件使用,运行在公网或内网均可。
如果没有该地址,就没必要继续看本项目了,这是本项目的运行基础.
3.满足本项目的ESP32S3硬件,见下文。
注:MeowMusicServer 项目代码有bug, 搭建完MeowMusicServer后,必须把本项目的 \lib\MeowMusicServer.rar解压替换掉MeowMusicServer文件才可运行本项目
提醒: MeowMusicServer底层用的是 api-v2.yuafeng.cn,api.yaohud.cn网站查歌,用的是免费接口,很容易后期变更协议,如果查不出歌,查看音乐服务器的日志中yuafengfreeapi.go源码关于 YuafengAPIResponseHandler 函数日志。必要时调试修改下查询音乐接口,一般就能解决!
一.硬件:
1.ESP32S3
Flash大小>=4MB , 必须带PSRAM
因为播放mp3用的ESP32-audioI2S库必须用到PSRAM,同时这个语音库不支持 ESP32-S2、ESP32-C3 等单核芯片。
如果想在不带PSRAM的更多ESP32系列芯片上运行,可以把ESP32-audioI2S这个音乐播放库换成这个库: https://github.com/earlephilhower/ESP8266Audio,该库不要求使用PSRAM, 源码进行少量调整即可。我项目中没用这个库的原因是因为想用PSRAM, 在播放网络音乐能对音乐数据进行缓存,减少声音卡顿机率。
2.MAX98357A
MAX98357A ==>ESP32S3引脚
I2S_OUT_BCLK 15
I2S_OUT_LRC 16
I2S_OUT_DOUT 7
3.喇叭
连接到MAX98357A
我用的是淘宝上给小智设计的开发板,用 "小智AI语音对话机器人 MINI ESP32-S3-N16R8开发板" 可查到.
该板有几个功能按钮,还带MAX98357A,省去了单独外接。
小智AI所用硬件一般是ESP32S3,ESP32C3等芯片。本程序是烧录在另一个ESP32S3芯片上运行的,不是烧录在小智所用硬件上的,不要弄混淆了。
二.软件:
1. IDE:
arduino: 2.3.5
2. 库版本:
WebSocketMCP 1.0.0 https://github.com/toddpan/xiaozhi-esp32-mcp 注:不要用0.0.10版本,无法用
如果下载不到最新的,用这个地址的库:https://github.com/lixy123/xiaozhi_mcp_play_music/blob/main/lib/xiaozhi-mcp.rar
ESPAsyncWebServer 3.10.0 https://github.com/ESP32Async/ESPAsyncWebServer
AsyncTCP 3.4.10 https://github.com/dvarrel/AsyncTCP 注:被ESPAsyncWebServer调用,版本不能过低
ArduinoJson 7.4.2 https://github.com/bblanchon/ArduinoJson.git
arduinoWebSockets 2.7.2 https://github.com/Links2004/arduinoWebSockets
ESP32-audioI2S 3.4.4 https://github.com/schreibfaul1/ESP32-audioI2S
2.编译设置:
开发板: esp32s3
USB cdc on boot: enabled
psram选择: OPI PSRAM
flash size: 16MB
partiation scheme: huge app(3MB NO OTA/1MB SPIFFS)
4.烧录
方式1: 源码烧录
A.打开arduino, 打开源码,导入上面的lib库,如果版本不一致,有一定机率编译有问题,
B.arduino进行编译设置,试编译.
C.插入ESP32S3等
D.arduino选择端口
E.arduino点击烧录按钮。 (注:有些ESP32S3板需要先按boot+reset两键进入烧录模式,有些可不用)
F.烧录完后重新上电 (注:有些板烧录完毕能自动重启,不必重新上电)
方式2: 固件烧录 (无需准备源码环境,最省事的方法)
A.下载 flash_download_tool软件
B.下载编译好的固件: (已上传至:Releases)
注:编译了esp32,esp32s3, esp32c5 三种固件,找到你芯片对应的固件进行下载,我只测试了esp32s3的固件
C. 固件烧录地址: 0x0
注: flash_download_tool 使用技巧参考:
https://my.feishu.cn/wiki/Zpz4wXBtdimBrLk25WdcXzxcnNS
编译好的固件烧录界面:
三. 配置
上电后有两种需要配置相关参数:
>>>小智 后台配置:
1.登陆小智 网站https://xiaozhi.me/
2.配置角色介绍
进入 >控制台>对应的智能体>配置角色>
在角色介绍中加入如下文字
所有用户播放音乐的请求,我会调用play_online_music的MCP服务,并提醒用户请稍等,马上为你播放!
当用户要求音乐停止时,我会调用stop_online_music的MCP服务,并提醒用户音乐已停止!
所有用户调整音乐音量请求,我会调用set_online_music_volume的MCP服务,并提醒用户音乐音量已设置!
所有用户查询音乐音量请求,我会调用get_online_music_volume的MCP服务!
注:配置完需要重启小智生效。以后不要重新查看MCP地址,再次进入页面查看MCP地址时,地址会变化,会需要重新配置ESP32S3参数
3.拷出MCP地址
进入>控制台>对应的智能体>配置角色>MCP设置>获取MCP接入点
拷出MCP接入点URL地址,下一步要用.
>>>ESP32S3配置:
1.首次运行,ESP32S3会创建一个AP.
2.用手机或电脑连接此AP
3.浏览器输入网址 http://192.168.4.1
4.填入配置参数
参数说明:
WIFI_SSID 所连接的路由器 AP账号
WIFI_PASS 所连接的路由器 AP密码
mcpEndpoint 上一步得到的小智MCP地址
Music Server Address 搭建了 https://github.com/OmniX-Space/MeowMusicServer 的音乐服务器URL地址
i2s_out_bclk ESP32开发板连接数字功放(MAX98357A)的3个引脚, 配置错误则无法发出语音
i2s_out_lrc
i2s_out_dout
led_pin ESP32 LED灯引脚,AP配置模式会亮灯 (-1表示不使用)
reset_pin ESP32 重置参数引脚,按住超5秒,下次上电后进入AP设置模式,默认0, 也就是boot按钮
volume up_pin 增加音量引脚 (-1表示不使用)
volume down_pin 减少音量引脚 (-1表示不使用)
注:所有参数必须填上,否则不让保存。
四.使用
语音指令:
1.唤醒小智后,对着小智说:"我要听张惠妹的听海"。 小智会提示“马上为您播放”,几秒钟后,音乐会从烧录有本项目固件的ESP32S3上播放出来
2.对着小智说:"停止音乐"。停止音乐播放
3.对着小智说:"调整音乐音量到50"。调整音乐播放音量
硬件按钮:
1.按下39, 40 引脚增加,减少音乐播放音量。
2.长按0 引脚5秒以后,本设备重启并进入配置参数模式。
五.问题
试听了几天,大部分音乐都能正常播放,偶有音乐卡顿,但基本上均能正常播放完。
1.偶有音乐播放卡顿,原因是音乐服务器传输问题,毕竟是网上的免费音乐,稳定性不容易保证。
2.偶有音乐播放不出。
3.极少数机率播放中途重启。
六.后续改进计划
1.增加听歌稳定性。
2.提升播放音质。
