一、对话效果演示
ESP-SPARKBOT对接豆包大模型-演示1
ESP-SPARKBOT对接豆包大模型-演示2
ESP-SPARKBOT对接豆包大模型-演示3
二、固件介绍与源码下载
本例程主要功能是连接豆包 volcano rtc 云端并进行语音交互,可以适用于智能音箱产品、智能玩具、语音控制设备等,适配 esp-sparkbot 开发板。
git clone https://gitee.com/esp-friends/esp_sparkbot.git
三、安装 ESP-ADF 框架
Step1、克隆仓库源码
# git clone --recursive https://github.com/espressif/esp-adf.git
git clone --recursive https://gitee.com/EspressifSystems/esp-adf.git
执行“recursive”更新失败,是因为 github 网络问题,此时需要使用工具仓库 esp-gitee-tools,可以参照 Linux下ESP32开发环境搭建:新手也能轻松上手_esp32 linux环境搭建-CSDN博客,
Step2、配置 ESP-IDF 与 ESP-ADF
cd esp-adf
./install.sh
. ./export.sh
如果在安装时,又遇到网络问题,可以把下载链接直接复制到其他软件进行下载,然后拷贝到 /home/sam/.espressif/dist/ 这个路径下,重新执行安装脚本,
这样子太麻烦了,实际上官方文档中有解决方案,
export IDF_GITHUB_ASSETS="dl.espressif.cn/github_assets"
可以看到使用了镜像地址之后下载速度一下子就提升了,
接着配置环境变量,
sudo vim ~/.bashrc
# export ADF_PATH=/data/home/sam/MyWorkSpace/esp-adf
# export IDF_PATH=/data/home/sam/MyWorkSpace/esp-adf/esp-idf
source ~/.bashrc
. ./export.sh
至此,环境搭建完毕。注意,这仅对当前命令窗口有效,如果新开了窗口,则需要重新执行脚本,因此我们可以为脚本导入一个别名,在 .bashrc 文件底部添加:
alias get_adf='. /data/home/sam/MyWorkSpace/esp-adf/export.sh'
四、火山引擎服务开通
1、账号注册
登录网址:账号登录-火山引擎
首次注册登录需要实名认证,认证完之后直接搜索“实时音视频”,
2、开通“实时音视频”服务
点击“视频服务”的“实时音视频”就会跳转页面,
点击“领取礼包并开通”,
提交成功之后,点击“去控制台”,
可以看到已经创建了默认应用,直接点击“临时token”,
RoomId 与 UserId 随便填就可以,然后生成临时 Token,
把参数全部配置到 main/config.h 文件,还要配置 WIFI 账号密码,不然没法联网。
3、设置权限
配置“访问控制”:账号登录-火山引擎
4、智能体 API
智能体配置:API Explorer
使用智能体进行对话前,你需要开通 ASR、 TTS 和大模型服务并配置相关策略,详情请参看开通服务。
5、开通 ASR/TTS 服务
ASR/TTS:账号登录-火山引擎
进入页面后,点击“创建应用”,主要选中“大模型语音合成”、“语言合成” 、“流式语音识别”,
如果需要配置音色,则需要开通服务,这里先用试用版,
AppId 与 Token 可以在底部查到:
6、开通 LLM 服务
大语言模型配置:账号登录-火山引擎
点击“系统管理”,注意右上角开启“免费用量 自动暂停”,然后选中其中一个模型进行开通。
可以看到已经开通成功,接着配置“在线推理”:
7、自定义推理接入点
选中刚刚开通的大模型,点击“确认接入”,
这里 ep 开头的就是需要获取的 EndPointId 参数值,
以上我们已经获取了启动智能体所需的所有参数,先用 Web 端测试参数是否可以正常使用,
8、无代码测试
弹窗中,依次检查 Step1、Step2,然后“加入 RTC 房间”,
生成临时 token 并且使用临时 token 进入房间,
接着配置智能体,
输入刚刚获取的 ep 开头的 EndPointId ,
ASR 与 TTS 配置需要在语音技术页面找到 AppId 与 Cluster,点击下方蓝色提示词就可以跳转到对应的页面了,
最后点击“开始调用”,
此时会听到豆包AI在说话就表示正常调用。
9、启动智能体
接下来整合参数配置、发起请求启动智能体:
"ASRConfig": {
"Provider": "volcano",
"ProviderParams": {
"Mode": "smallmodel",
"AppId": "9*******"
}
},
语音识别配置,这里使用小模型,只需改 AppId。
"TTSConfig": {
"Provider": "volcano",
"ProviderParams": {
"app": {
"appid": "9*******",
"cluster":"volcano_tts"
}
}
},
语音合成配置,这里只需改 AppId。
"LLMConfig": {
"Mode": "ArkV3",
"EndPointId": "ep*******",
"MaxTokens": 1024,
"Temperature": 0.1,
"TopP": 0.3,
"SystemMessages": [
"你是派蒙,旅行者的向导与引路人。你是一个话痨,并且贪吃好玩。"
],
"WelcomeSpeech": "你好,我是派蒙"
}
大语音模型配置,这里只需改 EndPointId,角色预设与欢迎语根据自己需求修改。
配置好参数后,点击“发起调试”,可以看到已经调用成功。如果需要关闭智能体,则点第二个菜单,同样填入页面需要的参数即可。
五、固件烧录
按照 README 中的指引,以上我们已经搭建好了 ESP-ADF 的开发环境,并且配置了火山引擎的鉴权参数以及 WIFI 信息,现在可以进行编译和下载。
1、修改 spi mode(重点)
修改 components/esp_sparkbot_bsp/esp_sparkbot_bsp.c 中第 121 行 spi_mode 为 0,否则屏幕只亮背光,不显示图片。
2、设置目标芯片
idf.py set-target esp32s3
3、配置 menuconfig(重点)
idf.py menuconfig
设置 flash size 为 16MB,
按下 “?/” 键 进入搜索模式,输入 lv_color_16_swap ,把该值置为 1,
audio board 选中 esp-sparkbot ,
按 s 进行保存,然后按 esc 退出。
注意:如果不配置 lv_color_16_swap 为 1,则会导致屏幕颜色反转,
4、执行编译
idf.py build
5、一键烧录
idf.py -p /dev/ttyACM0 flash monitor
烧录成功后加入房间,就可以跟智能体进行对话啦!
六、自定义图片显示
1、图片渲染的代码位置
只需要自定义图片,替代原代码行即可,
lv_img_set_src(ui_emoji, &my_img);
2、实战过程步骤
首先在网上找一张图片,下载,
接着再随便找个网站修改下像素,这里适配屏幕是 240 * 240,
然后到 lvgl 的官方转换网站,把图片转换为 C 数组,
导出来的文件是一个 C 语言文件,把它放到与 main.c 同级目录下,
并且修改 main/CMakeLists.txt ,
修改 main.c 文件,添加刚引入的图片文件,
extern const lv_img_dsc_t my_img;
最后重新编译、下载就可以了。如果有实力的话,可以开通火山引擎的音色服务,为角色配置相符的音色,并将大模型预设好角色性格,对话体验会更佳。
彩蛋:豆包大模型与小智AI对话
ESP-SPARKBOT对接豆包大模型-与小智对话