前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[ 物联网篇 ] ESP32 开发板测试亚马逊语音助手Alexa

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

作者头像
程序手艺人
发布2019-03-20 10:35:26
3.1K0
发布2019-03-20 10:35:26
举报
文章被收录于专栏:程序手艺人程序手艺人

首先需要了解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 平台下载

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

代码语言:javascript
复制
export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"
  • Github下载源码

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

  • 设置 ESP-IDF 路径

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

代码语言:javascript
复制
在 ~/.profile 文件中加入以下指令,创建 IDF_PATH:

export IDF_PATH=~/esp/esp-idf
  • 编译示例代码
代码语言:javascript
复制
cp -r $IDF_PATH/examples/get-started/hello_world .
cd ~/esp/hello_world
// 配置方法和Linux Kernel 方法很像
make menuconfig
  • 下载固件
代码语言:javascript
复制
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相关的部分只能以原厂更新为主,自己也改动不了,失望之一。

如下:

代码语言:javascript
复制
➜  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

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

下载源码步骤

代码语言:javascript
复制
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

打补丁

代码语言:javascript
复制
$ 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而已

代码语言:javascript
复制
memset(finish_desc->buf, 0, finish_desc->size);

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

编译

代码语言:javascript
复制
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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
├── [2.6M]  alexa.bin
├── [ 22K]  bootloader.bin
└── [3.0K]  partitions.bin

以上的步骤详细见文档 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硬件方案选型

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年03月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开发环境搭建
  • Alexa方案验证
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档