首先需要了解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内核,但是安装编译工具链的方法方法是一样的
解压之后,路径添加到环境变量中
export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"
git clone --recursive https://github.com/espressif/esp-idf.git
设置源代码的环境路径这步骤最重要,无法编译通过。
在 ~/.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
详细步骤可以查看官方文档,这里只是记录的笔记/框架,望读者知晓。
另外一个目的主要是验证方案的可行性
开发板的硬件资源:
采用ESP32-LyraTD-MSC开发板跑通Amzeon Alexa 语音助手,并实际测试效果。
官方已经支持的功能,基本常用的功能已经支持。
Alexa:
主要代码已经在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
以上的步骤详细见文档 esp-va-sdk/README-Getting-Started.md
实际的测试效果和源码开发待续!!!