欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[ 物联网篇 ] ESP32 开发板测试亚马逊语音助手Alexa

程序员文章站 2022-06-09 08:55:44
...

首先需要了解ESP32是什么?

ESP32 是一套 Wi-Fi (2.4 GHz) 和蓝牙 (4.2) 双模解决方案,集成了高性能的 CPU 内核、超低功耗协处理器和丰富的外设。ESP32 采用 40 nm 工艺制成,具有最佳的功耗性能、射频性能、稳定性、通用性和可靠性,适用于各种应用和不同功耗需求。

乐鑫为用户提供完整的软、硬件资源进行 ESP32 设备的开发。乐鑫所研发的软件开发环境 ESP-IDF 能够帮助用户快速开发物联网 (IoT) 应用,满足用户对于 Wi-Fi、蓝牙、低功耗等性能的需求。

ESP32靠着硬件成本低,模块性能稳定,在市场上占有率还是很高的,虽然ESP32只是一个模块,但是集成的Wi-Fi (2.4 GHz) 和蓝牙 (4.2) 双模的解决方案值得去学。里面涉及的Wi-Fi (2.4 GHz) 和蓝牙 (4.2)相关知识可以去深入了解。

目标

最近使用ESP32的目标主要是公司项目需求,需要评估一些方案,需要前期做一些调查。这里把调查过程中遇到的问题点记录下

开发环境搭建

ESP32的官方文档写的真的是是很详细,不得不配置,小白都可以入手了。

  • 工具链搭建

ESP32并不是ARM内核,但是安装编译工具链的方法方法是一样的

64-bit Linux 平台下载

解压之后,路径添加到环境变量中

export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"
  • Github下载源码

git clone --recursive https://github.com/espressif/esp-idf.git

  • 设置 ESP-IDF 路径

设置源代码的环境路径这步骤最重要,无法编译通过。

在 ~/.profile 文件中加入以下指令,创建 IDF_PATH:

export IDF_PATH=~/esp/esp-idf
  • 编译示例代码
cp -r $IDF_PATH/examples/get-started/hello_world .
cd ~/esp/hello_world
// 配置方法和Linux Kernel 方法很像
make menuconfig
  • 下载固件
make flash 

详细步骤可以查看官方文档,这里只是记录的笔记/框架,望读者知晓。

另外一个目的主要是验证方案的可行性


Alexa方案验证

[ 物联网篇 ] ESP32 开发板测试亚马逊语音助手Alexa
开发板的硬件资源:

  • ESP32-LyraTD-MSC 基于支支持蓝牙牙/Wi-Fi 双模的 ESP32-WROVER-B 模组和一一个数
    字信号处理理器器 (DSP) 实现,具备一一个三⻨麦克⻛风阵列列,用用于降噪、回波消除等功能。

  • ESP32-WROVER-B 是通用型 Wi-Fi+BT+BLE MCU 模组,主要用于低功耗传感器网络和要求极高的任务,例如语音编码、音频流和 MP3 解码等。配置了 4 MB SPI flash 和 8 MB SPI PSRAM

  • 模组采用 ESP32 系列的 ESP32-D0WD *。芯片具有可扩展、自适应的特点。两个 CPU 核可以被单独控制。CPU 时钟频率的调节范围为 80 MHz 到 240 MHz

  • 集成了传统蓝牙、低功耗蓝牙(BLE) 和 Wi-Fi。支持极大范围的通信连接,也支持通过路由器直接连接互联网;而蓝牙可以让用户连接手机或者广播 BLE Beacon 以便于信号检测。

  • 芯片的睡眠电流小于 5 μA。模组支持的数据传输速率高达 150 Mbps,天线输出功率达到 20 dBm。

  • ESP32 的操作系统是带有 LwIP(小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用) 的 freeRTOS,还内置了带有硬件加速功能的 TLS 1.2。芯片同时支持 OTA 加密升级

采用ESP32-LyraTD-MSC开发板跑通Amzeon Alexa 语音助手,并实际测试效果。

官方已经支持的功能,基本常用的功能已经支持。

Alexa:

  • Basic Alexa conversation
  • Alexa dialogues and multi-turn
  • Audio Streaming and Playback: Saavn, Amazon music, TuneIn (Only limited stations are supported as of now)
  • Audio Book Support: Kindle, Audible
  • Volume control via Alexa command
  • Seek support for Audible
  • Alerts/Timers, Reminders, Notifications

主要代码已经在GitHub 开源,大概浏览了一下代码,发现其中Amzeon Alexa 主要是以库的方式提供的。这就限制了平台的拓展性,Alexa相关的部分只能以原厂更新为主,自己也改动不了,失望之一。

如下:

➜  esp-voice-assistant git:(master) tree
.
├── component.mk
├── include
│   ├── alerts.h
│   ├── alexa.h
│   ├── audio_player.h
│   ├── avs_config.h
│   ├── dialogflow.h
│   ├── equalizer_controller.h
│   ├── gva.h
│   ├── playback_controller.h
│   ├── speaker.h
│   ├── speech_recognizer.h
│   ├── tone.h
│   ├── voice_assistant_app_cb.h
│   └── voice_assistant.h
└── lib
    ├── libalexa.a    // 亚马逊的Alexa 
    ├── libdialogflow.a
    └── libgva.a     // 谷歌的语音助手
2 directories, 17 files

先下载源码,运行起来,看效果:

下载源码步骤

Clone all the repositories

$ git clone --recursive https://github.com/espressif/esp-idf.git

$ cd esp-idf; git checkout release/v3.1; cd ..

$ git clone https://github.com/espressif/esp-avs-sdk.git  //文档中是这样的,

但是github官方仓库是esp-va-sdk,应该是文档没有来得及更新。 

git clone https://github.com/espressif/esp-va-sdk.git

打补丁

$ cd esp-idf

$ git apply ../esp-avs-sdk/esp-idf-patches/memset-i2s-dma-buffers-zero.patch

$ git apply ../esp-avs-sdk/esp-idf-patches/esp-tls-Add-support-for-global-CA-store.-All-mbedtls.patch

详细看下补丁memset-i2s-dma-buffers-zero.patch的提交记录,应该是修复bug而已

memset(finish_desc->buf, 0, finish_desc->size);

重点的是这个esp-idf-patches/esp-tls-Add-support-for-global-CA-store.-All-mbedtls.patch补丁,
涉及CA加密通讯相关问题,

编译

cd esp-avs-sdk/examples/<example_board_directory>  // 这里选择的是examples/lyratd_msc_sr/

$ export IDF_PATH=/path/to/esp-idf // 设置源码的环境变量

$ export ESPPORT=/dev/cu.SLAB_USBtoUART (or /dev/ttyUSB0 or /dev/ttyUSB1 on Linux or COMxx on MinGW)

$ make -j 8 flash VOICE_ASSISTANT=<alexa/gva/dialogflow> monitor  // 通过编译时候的传参确定使用alexa还是gva

看到编译的Makefile

ifeq ("$(VOICE_ASSISTANT)","gva")
$(error GVA is not supported with lyratd_msc_sr app. Please use lyrat app.)
else ifeq ("$(VOICE_ASSISTANT)","dialogflow")
$(error DialogFlow is not supported with lyratd_msc_sr app. Please use lyrat app.)
else
PROJECT_NAME := alexa
CPPFLAGS += -DALEXA
endif

编译完成之后,生成的固件进行烧录:

├── [2.6M]  alexa.bin
├── [ 22K]  bootloader.bin
└── [3.0K]  partitions.bin

烧录的时候注意: 长按开发板“Boot”键,同时按“RST”键进入入烧写模式

正常的烧录log :

Toolchain path: ESP32/Toolchain/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
Toolchain version: crosstool-ng-1.22.0-80-g6c4433a
Compiler version: 5.2.0
Python requirements from esp-idf/requirements.txt are satisfied.

App "alexa" version: ESP-VA-v1.0b1r7-2-g063d26f
esp-va-sdk/components/esp-voice-assistant/component.mk:7: warning: undefined variable 'VOICE_ASSISTANT'
esp-va-sdk/components/esp-voice-assistant/component.mk:9: warning: undefined variable 'VOICE_ASSISTANT'
Flashing binaries to serial port /dev/ttyUSB0 (app at offset 0x10000)...
esptool.py v2.6
Serial port /dev/ttyUSB0
Connecting......
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, BLK3 partially reserved, Coding Scheme 3/4
MAC: 30:ae:a4:cb:d5:c0
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 16MB
Flash params set to 0x024f
Compressed 26544 bytes to 15789...
Wrote 26544 bytes (15789 compressed) at 0x00001000 in 0.2 seconds (effective 912.0 kbit/s)...
Hash of data verified.
Compressed 2850816 bytes to 1925437...
Wrote 2850816 bytes (1925437 compressed) at 0x00010000 in 31.3 seconds (effective 729.7 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 105...
Wrote 3072 bytes (105 compressed) at 0x00008000 in 0.0 seconds (effective 9776.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

以上的步骤详细见文档 esp-va-sdk/README-Getting-Started.md


总结
  • ESP32官方提供的开发环境文档比较完善,开发环境同时也可以在Ubuntu 搭建起来,开发更便利。

  • ESP32提供的Amazon Alexa解决方案的的源码由esp-idfesp-va-sdk仓库构成。esp-idf为官方的IOT解决方案,esp-va-sdk为Alexa解决方案,两者有依赖关系,编译esp-va-sdk的时候回去调用esp-idf/components其中的一下库。

  • 源码中 Amazon alexa部分并没有开源,以动态库的方式提供给开发商。个人觉得,亚马逊官方已经开源avs-device-sdk,之前详细介绍过从零开始,搭建 AI 音箱 Alexa 语音服务,这一套主要跑在Linux平台,硬件成本也高。这也是ESP8266的优势所在。

  • 别人写的评估方案,值得一看 Amazon Alexa硬件方案选型

实际的测试效果和源码开发待续!!!