安信可ESP32-A1S开发板适配百度dueros例程实现在线语音功能

Posted 小小河神纠结多

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安信可ESP32-A1S开发板适配百度dueros例程实现在线语音功能相关的知识,希望对你有一定的参考价值。


前言

       针对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

以上是关于安信可ESP32-A1S开发板适配百度dueros例程实现在线语音功能的主要内容,如果未能解决你的问题,请参考以下文章

安信可ESP32-A1S开发板适配百度dueros例程实现在线语音功能

用安信可ESP32-G开发板制作一个简易路由器

求一个安信可ESP8266模块调试工具

二次开发应用安信可ESP32/ESP8266模组入网阿里生活物联网平台

安信可ESP-12F(ESP8266)介绍与使用

乐鑫Esp32学习之旅 安信可 ESP32-Cam 摄像头开发板二次开发 C SDK编程,拍照图片通过有线串口传到上位机PC端。(附带设备端+PC端源码)