失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > [ 物联网篇 ] ESP32 开发板测试亚马逊语音助手Alexa

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

时间:2020-01-02 09:32:55

相关推荐

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

首先需要了解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 /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-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 conversationAlexa dialogues and multi-turnAudio Streaming and Playback: Saavn, Amazon music, TuneIn (Only limited stations are supported as of now)Audio Book Support: Kindle, AudibleVolume control via Alexa commandSeek support for AudibleAlerts/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 /espressif/esp-idf.git$ cd esp-idf; git checkout release/v3.1; cd ..$ git clone /espressif/esp-avs-sdk.git //文档中是这样的,但是github官方仓库是esp-va-sdk,应该是文档没有来得及更新。git clone /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.)elsePROJECT_NAME := alexaCPPFLAGS += -DALEXAendif

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

├── [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-gccToolchain version: crosstool-ng-1.22.0-80-g6c4433aCompiler version: 5.2.0Python requirements from esp-idf/requirements.txt are satisfied.App "alexa" version: ESP-VA-v1.0b1r7-2-g063d26fesp-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.6Serial port /dev/ttyUSB0Connecting......Chip is ESP32D0WDQ5 (revision 1)Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, BLK3 partially reserved, Coding Scheme 3/4MAC: 30:ae:a4:cb:d5:c0Uploading stub...Running stub...Stub running...Changing baud rate to 921600Changed.Configuring flash size...Auto-detected Flash size: 16MBFlash params set to 0x024fCompressed 26544 bytes to 15789...Wrote 26544 bytes (15789 compressed) at 0x00001000 in 0.2 seconds (effective 912.0 kbit/s)...Hash of data pressed 2850816 bytes to 1925437...Wrote 2850816 bytes (1925437 compressed) at 0x00010000 in 31.3 seconds (effective 729.7 kbit/s)...Hash of data pressed 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-idf 和esp-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硬件方案选型

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

如果觉得《[ 物联网篇 ] ESP32 开发板测试亚马逊语音助手Alexa》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。