ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

     ESP-Skainet包是乐鑫针对语音唤醒和命令词的一个专用软件包,地址:https://github.com/espressif/esp-skainet,我们先看下这个包的目录:

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

componets文件夹里面是一些模块组件,这个项目里只有三:esp-sr,esp-tts,hardware_driver。

docs文件夹里是一些文档。

esp-idf文件夹是这套框架的核心idf,后面的143d26a对应着对应的貌似是v3.3.2,虽然后面备注的是3.3.1,这个文件夹的内容也是克隆时最缓慢的,需要耐心等待,需要说明的是ESP-Skainet包和esp-adf包一样,只支持v3.3.1和v3.3.2版的IDF。

examples里面是例程,提供了6个例程。

img里面5张图片帮助你理解语音识别的过程和配置流程。

tools里面是编译工具链。

   接下来我们我们尝试下examples里的get_started例程,所用开发板是ESP32-LyraTv4.3开发板,本例程推荐的是 ESP32-LyraT-Mini 和 ESP32-Korvo V1.1两款开发板,那么这两开发板和ESP32-LyraTv4.3有何区别?区别主要是来自音频处理,ESP32-LyraT采用的集中式的音频编解码,用的ES8288芯片,ESP32-LyraT-Mini 和 ESP32-Korvo V1.1不是采用这种模式,音频输入端多了一颗ADC芯片,整个驱动流程有所差异。

    

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

   先make menuconfig配置编译信息:

1.唤醒词和命令词可以默认即可。

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

2.flash模式

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

3.板卡选择

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

4.分区表,可以用例程目录下的CSV文件,也可以自己定义

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

5.编译选项,这个例程需要选择Release

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

6.RAM芯片选择,选auto

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

    确认后保存退出,就可以make了,编译可能要差不多20分钟,用烧录工具烧录:

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

    编译出来的三个文件都在例程的build目录里,bootloader在build文件夹下的bootloader文件夹内,按照分区表的地址填右边的烧录地址,然后开发板上电,填好串口和波特率,同时按住boot和RST键,点击烧录软件下面的ATART,看到开始烧录松开RST键,可以看见下面的烧录进度条开始移动,烧录开始,可以松开boot键了。等待烧录完成,打开串口终端,填好串口号和波尔率,记住这个串口监视波特率有可能和刚才的烧写波特率不一样,这个是你在配置时要注意的:

ESP32语音交互之二----------------------ESP32-LyraTv4.3开发板运行ESP-Skainet包中的get_started 例程

上面的是烧录波特率,下面的是监视波特率,你也可以设置成一样,以免忘记。上电开发板,按RST键,打印信息就出来了:

ets Jun  8 2016 00:22:57[2020-05-21 11:12:52.793]
[2020-05-21 11:12:52.793]
rst:0x1 (POWERON_RESET),boot:0x3f (SPI_FAST_FLASH_BOOT)[2020-05-21 11:12:52.800]
flash read err, 1000[2020-05-21 11:12:52.800]
ets_main.c 371 [2020-05-21 11:12:52.800]
ets Jun  8 2016 00:22:57[2020-05-21 11:12:53.175]
[2020-05-21 11:12:53.175]
rst:0x10 (RTCWDT_RTC_RESET),boot:0x3f (SPI_FAST_FLASH_BOOT)[2020-05-21 11:12:53.181]
configsip: 0, SPIWP:0xee[2020-05-21 11:12:53.181]
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00[2020-05-21 11:12:53.186]
mode:DIO, clock div:1[2020-05-21 11:12:53.191]
load:0x3fff0018,len:4[2020-05-21 11:12:53.191]
load:0x3fff001c,len:6764[2020-05-21 11:12:53.196]
load:0x40078000,len:11116[2020-05-21 11:12:53.196]
ho 0 tail 12 room 4[2020-05-21 11:12:53.196]
load:0x40080400,len:6004[2020-05-21 11:12:53.202]
entry 0x40080704[2020-05-21 11:12:53.202]
[0;32mI (61) boot: Chip Revision: 1[0m[2020-05-21 11:12:53.208]
[0;32mI (69) boot_comm: chip revision: 1, min. bootloader chip revision: 0[0m[2020-05-21 11:12:53.215]
[0;32mI (40) boot: ESP-IDF v3.3.2-107-g722043f73-dirty 2nd stage bootloader[0m[2020-05-21 11:12:53.221]
[0;32mI (40) boot: compile time 16:56:23[0m[2020-05-21 11:12:53.227]
[0;32mI (70) boot: Enabling RNG early entropy source...[0m[2020-05-21 11:12:53.246]
[0;32mI (70) boot: SPI Speed      : 80MHz[0m[2020-05-21 11:12:53.251]
[0;32mI (70) boot: SPI Mode       : DIO[0m[2020-05-21 11:12:53.256]
[0;32mI (72) boot: SPI Flash Size : 4MB[0m[2020-05-21 11:12:53.262]
[0;32mI (76) boot: Partition Table:[0m[2020-05-21 11:12:53.262]
[0;32mI (80) boot: ## Label            Usage          Type ST Offset   Length[0m[2020-05-21 11:12:53.273]
[0;32mI (87) boot:  0 factory          factory app      00 00 00010000 003c0000[0m[2020-05-21 11:12:53.279]
[0;32mI (94) boot:  1 nvs              WiFi data        01 02 003d0000 00004000[0m[2020-05-21 11:12:53.284]
[0;32mI (102) boot: End of partition table[0m[2020-05-21 11:12:53.290]
[0;32mI (106) boot_comm: chip revision: 1, min. application chip revision: 0[0m[2020-05-21 11:12:53.297]
[0;32mI (113) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f400020 size=0x15fc2c (1440812) map[0m[2020-05-21 11:12:53.311]
[0;32mI (523) esp_image: segment 1: paddr=0x0016fc54 vaddr=0x3ffb0000 size=0x003bc (   956) load[0m[2020-05-21 11:12:53.705]
[0;32mI (524) esp_image: segment 2: paddr=0x00170018 vaddr=0x400d0018 size=0x266d8 (157400) map[0m[2020-05-21 11:12:53.716]
[0;32mI (574) esp_image: segment 3: paddr=0x001966f8 vaddr=0x3ffb03bc size=0x01db4 (  7604) load[0m[2020-05-21 11:12:53.758]
[0;32mI (576) esp_image: segment 4: paddr=0x001984b4 vaddr=0x40080000 size=0x00400 (  1024) load[0m[2020-05-21 11:12:53.767]
[0;32mI (581) esp_image: segment 5: paddr=0x001988bc vaddr=0x40080400 size=0x0c2b4 ( 49844) load[0m[2020-05-21 11:12:53.778]
[0;32mI (614) boot: Loaded app from partition at offset 0x10000[0m[2020-05-21 11:12:53.800]
[0;32mI (614) boot: Disabling RNG early entropy source...[0m[2020-05-21 11:12:53.812]
[0;32mI (614) psram: This chip is ESP32-D0WD[0m[2020-05-21 11:12:53.812]
[0;32mI (619) spiram: Found 32MBit SPI RAM device[0m[2020-05-21 11:12:53.812]
[0;32mI (623) spiram: SPI RAM mode: flash 80m sram 80m[0m[2020-05-21 11:12:53.812]
[0;32mI (629) spiram: PSRAM initialized, cache is in low/high (2-core) mode.[0m[2020-05-21 11:12:53.827]
[0;32mI (636) cpu_start: Pro cpu up.[0m[2020-05-21 11:12:53.827]
[0;32mI (640) cpu_start: Application information:[0m[2020-05-21 11:12:53.840]
[0;32mI (645) cpu_start: Project name:     get_started[0m[2020-05-21 11:12:53.840]
[0;32mI (650) cpu_start: App version:      v0.3.0-12-g125c0a8-dirty[0m[2020-05-21 11:12:53.840]
[0;32mI (656) cpu_start: Compile time:     May 21 2020 16:57:19[0m[2020-05-21 11:12:53.860]
[0;32mI (662) cpu_start: ELF file SHA256:  3282421d813b9c3f...[0m[2020-05-21 11:12:53.860]
[0;32mI (668) cpu_start: ESP-IDF:          v3.3.2-107-g722043f73-dirty[0m[2020-05-21 11:12:53.873]
[0;32mI (675) cpu_start: Starting app cpu, entry point is 0x400811dc[0m[2020-05-21 11:12:53.873]
[0;32mI (0) cpu_start: App cpu up.[0m[2020-05-21 11:12:53.873]
[0;32mI (1155) spiram: SPI SRAM memory test OK[0m[2020-05-21 11:12:54.331]
[0;32mI (1155) heap_init: Initializing. RAM available for dynamic allocation:[0m[2020-05-21 11:12:54.343]
[0;32mI (1156) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM[0m[2020-05-21 11:12:54.357]
[0;32mI (1162) heap_init: At 3FFB32A8 len 0002CD58 (179 KiB): DRAM[0m[2020-05-21 11:12:54.357]
[0;32mI (1168) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM[0m[2020-05-21 11:12:54.374]
[0;32mI (1175) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM[0m[2020-05-21 11:12:54.374]
[0;32mI (1181) heap_init: At 4008C6B4 len 0001394C (78 KiB): IRAM[0m[2020-05-21 11:12:54.374]
[0;32mI (1187) cpu_start: Pro cpu start user code[0m[2020-05-21 11:12:54.395]
[0;32mI (1192) spiram: Adding pool of 4096K of external SPI memory to heap allocator[0m[2020-05-21 11:12:54.395]
[0;32mI (94) cpu_start: Starting scheduler on PRO CPU.[0m[2020-05-21 11:12:54.395]
[0;32mI (0) cpu_start: Starting scheduler on APP CPU.[0m[2020-05-21 11:12:54.410]
[0;32mI (95) spiram: Reserving pool of 32K of internal memory for DMA/internal allocations[0m[2020-05-21 11:12:54.410]
[0;32mI (95) I2S: DMA Malloc info, datalen=blocksize=1200, dma_buf_count=3[0m[2020-05-21 11:12:54.426]
[0;32mI (105) I2S: DMA Malloc info, datalen=blocksize=1200, dma_buf_count=3[0m[2020-05-21 11:12:54.426]
[0;32mI (115) I2S: APLL: Req RATE: 16000, real rate: 15999.986, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 4095996.500, SCLK: 511999.562500, diva: 1, divb: 0[0m[2020-05-21 11:12:54.442]
[0;32mI (145) gpio: GPIO[21]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 [0m[2020-05-21 11:12:54.457]
[0;32mI (145) MEDIA_HAL: I2S_OUT_VOL_DEFAULT[60][0m[2020-05-21 11:12:54.457]
[0;32mI (145) MEDIA_HAL: CONFIG_CODEC_CHIP_IS_ES8388[0m[2020-05-21 11:12:54.479]
Quantized wakeNet5: wakeNet5_v1_nihaoxiaozhi_6_0.983_0.95, mode:0 (Mar 30 2020 20:16:38)[2020-05-21 11:12:54.479]
SINGLE_RECOGNITION: 2_0 MN1_4; core: 0; (Apr 26 2020 17:05:05)[2020-05-21 11:12:54.479]
SHIFT: 8, 12, 17, 17, 19, 17, 6, 16, 15, 14, [2020-05-21 11:12:54.492]
[0;32mI (165) MN: ---------------------SPEECH COMMANDS---------------------[0m[2020-05-21 11:12:54.492]
[0;32mI (175) MN: Command ID0, phrase 0: da kai kong tiao[0m[2020-05-21 11:12:54.492]
[0;32mI (185) MN: Command ID1, phrase 1: guan bi kong tiao[0m[2020-05-21 11:12:54.509]
[0;32mI (185) MN: Command ID2, phrase 2: zeng da feng su[0m[2020-05-21 11:12:54.509]
[0;32mI (195) MN: Command ID3, phrase 3: jian xiao feng su[0m[2020-05-21 11:12:54.509]
[0;32mI (195) MN: Command ID4, phrase 4: sheng gao yi du[0m[2020-05-21 11:12:54.509]
[0;32mI (205) MN: ---------------------------------------------------------[2020-05-21 11:12:54.524]
[0m[2020-05-21 11:12:54.524]
chunk_num = 133[2020-05-21 11:12:54.524]
-----------awaits to be waken up-----------[2020-05-21 11:12:54.524]
可见我的唤醒词是:你好小智,然后5句命令词:

1打开空调,2关闭空调,3增大风速,4减小风速,5升高一度

对着开发板说唤醒词,可见串口打印出:

141.72: nihaoxiaozhi DETECTED.[2020-05-21 11:15:16.280]
-----------------LISTENING-----------------[2020-05-21 11:15:16.291]
[2020-05-21 11:15:16.291]

然后说出命令词:打开空调,打印出命令词对应的ID

Commands ID: 0.[2020-05-21 11:15:19.264]
[2020-05-21 11:15:19.264]
-----------awaits to be waken up-----------[2020-05-21 11:15:19.264]

还好,这个例程ESP32-LyraTv4.3开发板完全没问题,运行OK!