文章目录
前言
针对ESP32-A1S的开发板,之前就写了一边如何实现离线语音控制LED灯的博文,但是之前的博文中所用到的模组中的音频编解码芯片是AC101,需要我们自己写驱动程序。为了适配乐鑫得SDK,模组中得编解码芯片也换成了ES8388,乐鑫已经写好了驱动程序,我们二次开发只要不需要重新写编解码程序。也让我们的移植变得更加简单。
DuerOS是百度度秘事业部在2017年1月CES展推出的对话式人工智能操作系统,它赋予硬件设备与人沟通的能力,真正的将语音对话这种新的交互方式融入到了人们的生活之中。
本文将通过对乐鑫ESP-ADF-SDK中的dueros 例程进行移植,在安信可SEP32-A1S-Audio-Kit开发板上实现在线语音对话功能,本文很长,但是没有闲话。
一、准备工作
1.硬件准备
硬件毫无疑问就是安信可ESP32-A1S-Audio-Kit_V2.2开发板,带内存卡,最好接有扬声器,没有扬声器可以接3.5mm音频口的耳机也成。
可惜:目前这个开发板已经在安信可某宝旗舰店下架了,但是ESP-A1S模组还在,绘画PCB的同学可以画一个自己的小板子,上方的开发板的原理图也提供给大家,见本文结尾连接:
2.软件准备
本次的二次开发是在Linux 环境下进行的,软件是乐鑫的esp-adf工程,在一个自己喜欢的文件夹中clone项目源码,这个克隆的时间比较长,请耐心等待:
git clone --recursive https://github.com/espressif/esp-adf.git
//如果觉得慢,也可以使用博主的仓库
git clone https://gitee.com/seahi007/esp-adf.git
ESP-ADF具体的安装步骤请参考:espressif esp-adf 音频开发框架
最后不要忘了拉取子模块:
cd esp-adf
git submodule update --init --recursive
在等待的过程,可以去注册一个百度账号或者做一下开发者验证。注册账号后进行通过开发者验证(验证时间1~2天)。DuerOS开放平台连接:https://dueros.baidu.com/open,
验证通过之后,进入这个连接:小度智能开放平台:https://dueros.baidu.com/didp/main/index,千万不要直接点击控制台进去,不然永远都找不到这个界面,也就无法获取profile文件。
详细的profile文件获取方式请参考: http://www.dianzixuexi.com/HTML/zixun/64787.html
二、验证ESP-ADF是否正常
1. 代码简单修改
ESP-ADF里的examples 都是需要开发板的,因为它的I2C,I2S等接口只是适配了乐鑫出品的开发板。要用我们自己的板子的话,就需要改一下代码,令I2C和I2S接口匹配我们的板子,ESP32-A1S的开发板接口如下:
修改board_pins_config.c,路径:esp-adf/components/audio_board/lyrat_v4_3
cd /home/saehi/Desktop/ESP/ESP32-A1S/esp-adf_test/esp-adf/components/audio_board/lyrat_v4_3
vi board_pins_config.c
2.播放MP3测试
播放MP3这个例程是不要 microSD(内存卡)的,可以直接编译下载就能播放。
配置 Audio HAL—>ESP32-Lyrat V4.3:
idf.py menuconfig
配置完成后,即可编译—>下载—>验证:
idf.py build flash montior
这时候,你应该就能听到一段很魔幻的声音,中就证明ESP-ADF已经准备就绪,可以开始做在线语音功能了。
三、dueros 例程适配
适配过程有点繁杂,请仔细阅读:
1.替换连接文件
dueros的连接需要用到profile 文件,里面包含了client_id、client_secret等验证信息。
重中之重: 我们需要把profile.zip 中的任意一个文件重命名为:duer_profile,然后替换该路径下的duer_profile:esp-adf_test/esp-adf/components/dueros_service/duer_profile。
2.内存卡准备
准备一张内存卡,最好是空的内存卡,然后把DingDing.wav 文件复制到内存卡根目录,DingDing.wav文件路径为:esp-adf_test/esp-adf/examples/dueros/tone。完成之后把内存卡插入开发板的卡槽当中。
3. 代码修改
代码修改主要在dueros例程的main文件中的dueros_app.c:
(1)屏蔽触摸按键
安信可ESP32-A1S开发板中并没有触摸按键,所以要屏蔽掉,而且触摸按键的循环查询占用了大量CPU的资源,会导致I2C与ES8388的通信受阻,dueros_app.c的294行到342行全部屏蔽掉:
(2)修改唤醒提示音
源码中的唤醒提示音的文件名是错误的,不修改的话,提示音的播放不了的,虽然不影响使用,但是降低体验感受。
定位到:94行:
4. 修改 lyrat_v4_3中的board.c 代码
打开board.c:
vi esp-adf_test/esp-adf/components/audio_board/lyrat_v4_3/board.c
定位到93行,把93行到99行的内容屏蔽掉,如下:
5.连接成功截图
连接成功之后,就可以对着开发板的麦克风说"Hi,乐鑫",”今天天气怎么样“,正常情况下是可以播报天气情况。
四、常见问题
1.函数未声明错误
问题截图:
原因: dueros_esp_flash.c 没有被添加到工程当中;
修改方法: 在路径:"esp-adf_test/esp-adf/components/dueros_service/ " 中打开CMakeLists.txt,修改如下即可编译通过:
2. 串口监控有唤醒提示但没有提示音
原因1: 内存卡中没有DingDing.wav 音乐文件;
解决办法: 把esp-adf_test/esp-adf/examples/dueros/tone/DingDing.wav 文件复制到内存卡。
原因2: 播放文件没修改:
解决办法:
如果以上办法都没有解决,请先运行播放MP3的例程,看看是否正常。
3.I2C Bus WriteReg Error
问题截图:
原因: 没有屏蔽TOUCH的初始化代码,导致TOUCH初始化出错。
解决办法: 详见: 4. 修改 lyrat_v4_3中的board.c 代码
五、相关连接
开发板原理图:ESP32-A1S-Audui-Kit-V2.0原理图;
模组购买连接: 安信可ESP32-A1S某宝购买连接;
欢迎关注安信可官方博客:欢迎关注安信可科技;
源码地址:https://github.com/SeaHi-Mo/esp-adf