在上一篇 ESP32 LyraTD MSC 智慧喇叭平台建置 (1) – ADF SDK 使用 介紹了 ADF SDK 的基本建置步驟,透過建立起 ADF 的平台,可以播放 SDCard 內的MP3、播放串流的音樂,算是熟悉了 Espressif 的 ESP32 發展平台建置。本篇,將要跟大家展示如果編譯建置 AVS (Amazon Voice Service) 的 SDK,讓用戶可以透過「Alexa!」來做語音控制。
本文的內容跟 ADF 有些重複,這樣可以省去讀者在兩篇文章反覆參照。不過還是建議至少先參看一下前篇的文章,有些內容會比較容易瞭解。
Ubuntu 環境安裝
本篇是使用 Ubuntu 16.04 64bit 測試,需要安裝的套件,請依下列命令安裝
1 2 |
sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing sudo apt-get install minicom |
一般用戶存取 Serial Port
LradTD-MSC 的資料 USB Port 插入PC後,會顯示為 COMPORT。為了讓一般用戶可以透過 Serial Port 更新、查看 console 資訊,我們需要將用戶加入 dialup group,才可以進行此類的操作。
1 |
sudo usermod -a -G dialout $USER |
將用戶新增至 group dialout 後,記得需要重新登入後才會生效。
安裝 Toolchain
請依下列命令來安裝 Toolchain。所有的操作,都是在 ~/esp 目錄內,我們也順道將需要設置的 IDF_PATH 設置了,在編譯的過程中會參考到此變數。往後登入系統就會套用這些設置,我們在這透過命令 “. ~/.bashrc” 讓命令立刻生效。
1 2 3 4 5 6 7 8 |
cd ~ mkdir ~/esp cd ~/esp wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz tar zvfx ~/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz echo "export PATH=\$HOME/esp/xtensa-esp32-elf/bin:\$PATH" >> ~/.bashrc echo "export IDF_PATH=\$HOME/esp/esp-idf" >> ~/.bashrc . ~/.bashrc |
取得 IDF & AVS SDK
IDF 和 AVS 的 SDK 都是放在 github 上,透過 git 命令就可以下載到最新的程式碼。AVS SDK 是基於 IDF,所以此處也要下載它。
1 2 3 4 |
cd ~/esp 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 |
套用 IDF Patch
在文章寫作的這天, IDF 有2個 patch 需要 apply。將 SDK 下載後,請先上這2個 patch
1 2 3 4 |
cd ~/esp 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 |
清除 Flash 內容
AVS SDK 在燒錄後似忽會對一些非程式區的flash做判斷,只有這些區域是空的,才能將設定寫進去。所以在進行 AVS Image 燒錄前,要將其清空,才有辦法使用正常的 AVS Code。請讓 LyraTD-MSC 進入燒錄模式後,進行清除。這個動作只需要在第一次燒 AVS SDK Image 時,做一次就可以了。但如果往後有再燒過其它的 SDK Image, 需再次執行。
1 2 |
# 讓 Lyratd-MSC 進入燒錄模式 (按住 Boot-Key , 然後按下 Reset-Key) make erase_flash |
編譯 Alexa Sample Code
AVS SDK 裡面已經有 Alexa 的 sample code 了。編譯方式如下。請在 make flash monitor 命令前將板子進入 load mode
1 2 3 4 5 6 7 |
cd ~/esp cd esp-avs-sdk/examples/lyratd_msc_alexa_sr make app # 第一次編譯時會出現設定選單,請將 Serial Port 正確設置成 # Serial flasher config-->Default serial port = /dev/ttyUSB0 # Enter load mode again make flash monitor |
確認狀態
當編譯完成並燒錄後,將 LyraTD-MSC 重開,此時在 Console 應該會看到如下的類似訊息。此時,需要用 Android 的 Provisioning APP 來提供 WiFi 連線密碼給它,以便連上 Alexa 的服務。完成後,喇叭就可以順利連上 Amazon Voice Service 來進行語音對答了。文末有我自己編譯的 Android Provisioning App,請自己評估是否要直接使用,或自行編譯。
1 2 3 |
I (438) conn_mgr_prov: Provisioning started with : service name = ESP-Alexa-84B8 service key = |
ALEXA!
當一切都設定好後,就會從 Console 上看到 Alexa Ready 的訊息。此時,就可以開始用用語音控制,例如「I want to listen to BBC news」。
結語
到此,就完成 AVS 環境的建置了,此時已可以利用 ESP32 LyraTD-MSC 連上 Amazon 來進行語音操作。下一篇,就要介紹如何編譯 Android 的 Provisioning APP。
參考連結
- Toolchain 編譯環境建置
- AVS SDK Github
- AVS SDK Alexa example
- Android Provisioning App
- 我自己編譯的 Android Provisioning APP