[ 物联网篇 ] 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 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-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硬件方案选型

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

已标记关键词 清除标记
ESP32 蓝牙开发资料,用于了解ESP32内部的蓝牙实现。 本⼿册为 ESP32 的蓝⽛架构简介,主要分三个章节介绍了蓝⽛、经典蓝⽛和蓝⽛低功耗 ⽅⾯的整体架构。注意,本⼿册仅针对 ESP-IDF V2.1 及以下版本。 ⽬录 1. 蓝⽛ 1 ......................................................................................................................................... 1.1. 概述 ............................................................................................................................................1 1.1.1. 蓝⽛应⽤结构 ................................................................................................................1 1.1.2. HCI 接⼝选择 ................................................................................................................2 1.1.3. 蓝⽛运⾏环境 ................................................................................................................3 1.2. 框架 ............................................................................................................................................4 1.2.1. 控制器 ...........................................................................................................................4 1.2.2. BLUEDROID .................................................................................................................4 1.2.2.1. 主机架构 ................................................................................................................4 1.2.2.2. OS 相关适配..........................................................................................................6 1.2.3. 蓝⽛⽬录........................................................................................................................6 2. 经典蓝⽛ 9 ................................................................................................................................. 2.1. 概述 ............................................................................................................................................9 2.2. 协议和规范 ...................................................................................................
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页