ESP32-Audio-Kit

来自丢石头百科
ESP32-Audio-Kit
ESP32-Audio-Kit.jpg
基本信息

分类: WiFi 音频 Espressif ESP32

品牌: 安信可

功能简介
特性

无特性,不解释

接口

UART接口 SDIO接口

相关产品
ESP32
ESP32-S2

产品概述

ESP32-Audio-Kit 是基于 ESP32-A1S 模组开发的小型音频开发板。大多数音频外设分布在开发板两侧,支持TF卡,耳机输出,两路麦克风输入和两路喇叭输出。方便开发人员迅速开发。

板载资源

  • 耳机口(earphone):插入3.5mm耳机插口,支持左右声道输出。
  • 左右声道扬声器(left channel of speaker/right channel of speaker):支持最大输出4Ω3W喇叭输出,同时支持双声道输出。
  • SD卡:最大支持64G SD卡读写
  • 按键(KEY):支持6路按键输入,默认出厂以下接入方式
名称 IO
KEY1 IO36
KEY2 IO13
KEY3 IO19
KEY4 IO23
KEY5 IO18
KEY6 IO5
  • 麦克风:两路模拟麦克风,分别作为音频输入。
  • 耳麦输入(LINEIN):支持耳机麦克风输入。
  • 锂电池(battery):支持3.7伏锂电池输入。
  • 电源输入(POWER):最大支持5V2A电源输入,支持同时锂电池充电。
  • 串口(UART):支持micro usb串口输入输出,最大支持921600波特率。
  • 下载按钮(BOOT):下载时请拉低。由于IO0提供codec时钟,程序正常运行时请勿按下,否则影响codec工作。
  • 复位按钮(EN):按此按钮可以重置系统。
  • 供电方式:1.Micro USB端口 5V/2A;2.锂电池供电。

使用说明

下面将讲解如何使用 ESP32-Audio-Kit (ESP32-A1S开发板)轻松的实现离线语音控制LED灯。

离线语音框架

1. 算法模型 WakeNet 和 识别模型 MultiNet

既然是语音唤醒,本地识别,就离不开算法模型和识别模型,而ESP32-A1S是基于乐鑫一个仓库esp_sr为基础的。而 esp_sr 提供语音识别相关方向算法模型,目前主要包括三个模块:

  • 唤醒词识别模型 WakeNet
  • 语音命令识别模型 MultiNet
  • 声学算法:集成了回声消除 AEC(Acoustic Echo Cancellation),自动增益调节 AGC(automatic_gain_control),噪声抑制 NS(Noise Suppression),语音活动检测 VAD(Voice Activity Detection) 和麦克风阵列算法(Mic Array Processing)。

2. 唤醒词识别

唤醒词模型 WakeNet,致力于提供一个低资源消耗的的高性能模型,支持类似“Alexa”,“天猫精灵”,“小爱同学”等唤醒词的识别。

目前,ESP32的唤醒词仅仅开放了如下几个:“Hi,乐鑫”,“你好小智”,“你好小鑫”,“hi,Jeson”等唤醒词。

3. 语音命令识别

命令词识别模型 MultiNet,致力于提供一个灵活的离线语音命词识别框架。用户可方便根据需求自定义语音命令,无需重新训练模型。

目前模型支持类似“打开空调”,“打开卧室灯”等中文命令词识别,自定义语音命令词最大个数为 100。

英文命令词定义将在下一版提供支持。

编译步骤

固件是基于ESP32的SDK开发为基础,仓库代码已经开发了支持ESP32-A1S开发板简单控制的demo。

参考资料:ESP32 Linux开发环境搭建教程

1. 下载源代码

git clone 方式:

git clone --recursive https://github.com/Ai-Thinker-Open/Ai-Thinker-Open_ESP32-A1S_ASR_SDK.git

如果速度较慢,可以直接下载:

2. 把 esp-skainet-AI 和 ESP IDF 依赖路径加入环境变量中。

export IDF_PATH=~/esp32/esp-skainet-AI/esp-idf/

路径应以实际情况为准。或者写入 .bashrc 中。

3. 把编译需要的工具链写入 .bashrc 中。

ESP32-Audio-Kit 2.png

4. 打开工程里的 examples/Smart_home_scene_AI,通过 make menuconfig 配置,选择开发板为 ESP32-A1S。

ESP32-Audio-Kit 3.gif

5. 通过串口连接电脑之后,给串口赋予 777 权限,并开始编译。

sudo chmod 777 /dev/ttyUSB0
make flash monitor -8j

6. 编译成功。

ESP32-Audio-Kit 4.png

7. 然后,对开发板说 “你好,小智” ,这时候,红色指示灯会亮起来,说明唤醒成功,然后接着说 “打开客厅的灯”,客厅的灯就会亮起。

代码分析

本地能识别的词语列表,可以看到是一个一个词语的拼音:

[0;32mI (321) MN: ---------------------SPEECH COMMANDS---------------------
[0;32mI (328) MN: Command ID0, phrase 0: da kai yi hao deng
[0;32mI (333) MN: Command ID1, phrase 1: da kai er hao deng
[0;32mI (339) MN: Command ID2, phrase 2: da kai san hao deng
[0;32mI (345) MN: Command ID3, phrase 3: da kai si hao deng
[0;32mI (351) MN: Command ID4, phrase 4: da kai wu hao deng
[0;32mI (356) MN: Command ID5, phrase 5: da kai ke ting de deng
[0;32mI (363) MN: Command ID6, phrase 6: guan bi ke ting de deng
[0;32mI (369) MN: Command ID7, phrase 7: da kai wo shi de deng
[0;32mI (375) MN: Command ID8, phrase 8: guan bi wo shi de deng
[0;32mI (381) MN: Command ID9, phrase 9: da kai chu fang de deng
[0;32mI (387) MN: Command ID10, phrase 10: guan bi chu fang de deng
[0;32mI (393) MN: Command ID11, phrase 11: da kai zou lang de deng
[0;32mI (400) MN: Command ID12, phrase 12: guan bi zou lang de deng
[0;32mI (406) MN: Command ID13, phrase 13: da kai ce suo de deng
[0;32mI (412) MN: Command ID14, phrase 14: guan bi ce suo de deng
[0;32mI (419) MN: Command ID15, phrase 15: da kai wei sheng jian de deng
[0;32mI (425) MN: Command ID16, phrase 16: guan bi wei sheng jian de deng
[0;32mI (432) MN: Command ID17, phrase 17: da kai quan bu de deng
[0;32mI (439) MN: Command ID18, phrase 18: guan bi quan bu de deng
[0;32mI (445) MN: Command ID19, phrase 19: quan bu da kai
[0;32mI (450) MN: Command ID20, phrase 20: quan bu guan bi
[0;32mI (457) MN: Command ID83, phrase 21: quan bu
[0;32mI (461) MN: Command ID84, phrase 22: guan bi wu hao deng
[0;32mI (467) MN: Command ID85, phrase 23: guan bi si hao deng
[0;32mI (473) MN: Command ID86, phrase 24: guan bi san hao deng
[0;32mI (479) MN: Command ID87, phrase 25: guan bi er hao deng
[0;32mI (485) MN: Command ID88, phrase 26: guan bi yi hao deng
[0;32mI (491) MN: Command ID89, phrase 27: guan bi tai deng
[0;32mI (497) MN: Command ID90, phrase 28: da kai tai deng
[0;32mI (502) MN: Command ID91, phrase 29: guan bi shu fang de deng
[0;32mI (509) MN: Command ID92, phrase 30: da kai shu fang de deng
[0;32mI (515) MN: Command ID93, phrase 31: guan bi
[0;32mI (520) MN: Command ID94, phrase 32: da kai
[0;32mI (525) MN: Command ID95, phrase 33: da kai shi hao deng
[0;32mI (531) MN: Command ID96, phrase 34: da kai jiu hao deng
[0;32mI (537) MN: Command ID97, phrase 35: da kai ba hao deng
[0;32mI (543) MN: Command ID98, phrase 36: da kai qi hao deng
[0;32mI (549) MN: Command ID99, phrase 37: da kai liu hao deng
---------------------------------------------------------

处理代码如下:

bool speech_commands_action(int command_id)
{
    printf("Commands ID: %d.\n", command_id);
    switch (command_id)
    {
    case 5:
        printf("打开客厅的灯\n");
        open_light(50000);
        break;
    case 6:
        printf("关闭客厅的灯\n");
        close_light(50000);
        break;
    case 7:
        printf("打开卧室的灯\n");
        open_light(50001);
        break;
    case 8:
        printf("关闭卧室的灯\n");
        close_light(50001);
        break;
    case 9:
        printf("打开厨房的灯\n");
        open_light(50002);
        break;
    case 10:
        printf("关闭厨房的灯\n");
        close_light(50002);
        break;
    case 11:
        printf("打开走廊的灯\n");
        open_light(50003);
        break;
    case 12:
        printf("关闭走廊的灯\n");
        close_light(50003);
        break;
       
  
    case 19:
        printf("全部打开\n");
        open_light(50000);
        vTaskDelay(50 / portTICK_PERIOD_MS);
        open_light(50001);
        vTaskDelay(50 / portTICK_PERIOD_MS);
        open_light(50002);
        vTaskDelay(50 / portTICK_PERIOD_MS);
        open_light(50003);

        break;
   
    case 20:
        printf("全部关闭\n");
        close_light(50000);
        vTaskDelay(50 / portTICK_PERIOD_MS);
        close_light(50001);
        vTaskDelay(50 / portTICK_PERIOD_MS);
        close_light(50002);
        vTaskDelay(50 / portTICK_PERIOD_MS);
        close_light(50003);
        break;

    default:
        return false;
        break;
    }
    return true;
}

资源下载

ESP32-A1S ASR SDK

git clone https://github.com/Ai-Thinker-Open/Ai-Thinker-Open_ESP32-A1S_ASR_SDK

或通过

FAQ

问题:
ESP32-S,ESP-WROOM-32,ESP32-A1S 模组有什么区别?
答复:
ESP32-S 与 ESP32-WROOM-32 为通用类型的模组,软硬件部分,除了天线形式有差异,其他部分都一样,ESP32-A1S 模组内置的是 AC101 音频解码芯片,可以进行音频相关的开发,支持播放音乐和录音。


问题:
ESP32-S,ESP32-A1S 能否外接天线,如果需要外接天线需要怎么操作?
答复:
ESP32-A1S FAQ 1.png


问题:
ESP32-A1S 模组主要应用哪个领域,内置音频解码芯片是哪一个型号,出厂默认固件是哪一个,支不支持二次开发?
答复:
主要应用于家庭智能设备、车载智能设备、智能音箱等方案,内置音频解码芯片为 AC101,出厂默认烧录测试固件,工作状态分为两种模式:TF 卡模式和蓝牙模式,两种模式通过按键进行切换,当没有插入 TF 卡时只能切入到蓝牙模式,当插入 TF 卡后可以使用两种任一模式,TF 卡检测只在程序启动时进行,当程序启动后不在检测 TF 卡插入。不支持 AT 指令。更多教程请参考 ESP-ADF API文档 里面Ai-example例子进行固件二次开发。


Icon-mail.png 联系 丢石头

我们的工作时间是: 09:00-18:00 (UTC+8 周一到周六)