最近拿到了一組智慧喇叭 (Smart Speaker) 的平台,是深圳公司 Espressif 出的 ESP32-LyraTD-MSC。Espressif 的產品在我之前的 Maker 專案 WiFi995中,就是用他們的 ES8266 WiFi 模組,所以一拿到這個平台,就有種看到老朋友的感覺。
這次是同事拿給我,請我看一下怎麼把這塊看起來普普通通的板子,弄的 smart 一點,就接受了這個挑戰。由於 Maker 是沒有原廠 support 的,只能靠網路上的不可靠訊息,和到處 Google 網頁,所以這種徬徨無助的經驗真的很深刻。為了讓大家不要也有我這種痛苦,就成了這篇文章的原由。
官網的介紹有兩塊名字很像的板子,ESP32 LyraT 和 ESP32 LyraTD-MSC 基本上就是形狀看起來不一樣,軟體基本上大概相容。印象上是差別在於 LyraTD-MSC 有一個 DSP,所以可以用來做一些訊號處理,諸如降噪、多相麥克風音源處理,所以要當 Smart Speaker 的話,請用MSC這一款。官方說明請參考這裡
這個文章預計會分成3篇:
- ADF SDK 使用: ADF SDK 的功能是比較一般的撥放 MP3, 錄音, media streaming 之類的功能。ADF 是 Audio Development Framework, 它是基於更基本的 IDF (IoT development framework),所以在原始碼會看到 ADF 裡怎麼還有 IDF,就是這個原因。
- AVS SDK 使用:AVS 是 Amazon Voice Service, 簡單的說就是 Amazon 的 Alexa 智慧喇叭。這個 SDK 功能比較單一,內建的例子只有幾個語音控制的,沒看到太多撥放 Local File 的部份,這部份可能要從 ADF 搬 sample code 過來試。
- AVS Provisioning Android APP 與 LWA 帳號申請:第三個部份則是要讓智慧喇叭可以動,需要一個 APP 來啟用它,還需要申請 Amazon 的服務金鑰和帳號。APP本身編譯沒什麼問題,比較難的還是 Amazon 帳號申請…非記下來不可啊。
廢話完了,開始吧
本文是用 Ubuntu 16.04 64bits 完成的,若中間編譯有問題可以試著也換成同一個版本看看。另外,Espressif 上其實有提供在 Windows 下利用msys編譯的方式,但速度很慢,也會碰到其它問題,不建議使用。
安裝 Ubuntu 套件
中間會需要一些套件,按照官方的列表,和我自己的需求,直接安裝下面的套件。
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 |
將 Linux 帳號加入 dialup 群組
這個平台是利用 USB Virtual Com Port 來做為 console 和 firmware update,在 Linux 非 root 身份要存取的 comport 的話,需要加入 dialup 群組。用下面的命令,將使用者加入此群組。
1 |
sudo usermod -a -G dialout $USER |
為了讓設定生效,記得要從新登入。
安裝 Toolchain
依照官方的文件,我們所有的操作都會在 ~/esp下。所以 toolchain 也是裝在此處,請依照下列命令安裝與設定。
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 # 抓取 Toolchain 壓縮檔 tar zvfx ~/esp/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 # 將 toolchain 執行檔加入 PATH echo "export ADF_PATH=\$HOME/esp/esp-adf" >> ~/.bashrc # 設定 ADFPATH, SDK會看這個變數 . ~/.bashrc # 讓變數設定立刻生效 |
取得 ADF SDK
ADF SDK 都放在 github 上 (該搬去 gitlab 了吧…),所以都可以抓到最新的 release。
1 2 3 4 |
cd ~/esp git clone --recursive https://github.com/espressif/esp-adf.git cd ~/esp/esp-adf git submodule update --init |
編譯 Example
接下來就使用 ADF SDK 內的 example 來驗証安裝有沒有問題。在編 example 時, 就會一併編譯所有的東西, 包含 FreeRTOS, codec, wifi supplicants 等等,所以第一次編會稍微久一點。最後一步會進行燒錄,所以請在執行前就板子都插好,這樣才能燒。
這塊板比較麻煩的是 console 和燒錄是同一個 port,所以在燒錄時 console 就不能連接。因此 espressif 提供了一個內建的 console terminal,也就是在 「make flash monitor」的這個 monitor 就會在編譯完進入 terminal 模式,要跳出來再編譯就按「 Ctrl+] 」離開。
1 2 3 4 5 6 7 8 9 10 |
cd ~/esp cp -r $ADF_PATH/examples/get-started/play_mp3 . # 複製播放 MP3 的例子 cd ~/esp/play_mp3 make menuconfig # 把 Audio HAL 設定成 LyraTD-MSC v2.2 # Serial flasher config 預設是 /dev/ttyUSB0,若有不同請修改 # 離開 menuconfig 後,先讓板子進入燒錄模式 # 按著 BOOT 鈕不放,再按 RESET 鍵後放開,就會進入燒錄模式。 # 此時就可以開始編譯 make flash monitor |
檢驗成果
當一切都完成後,將喇叭接上板子上的 3.5mm 耳機孔,然後按下 RESET。重開後就會撥放一個內建的 MP3 檔案,若有聽到音樂,這樣就算大功告成了。
這篇雖然只是算小菜,沒做什麼大事業。不過 ADF 的範例其實是比較豐富的,大家可以試試其它的範例,可以播放 SDCard 內的東西,也可以播放網路串流。對於學習這個平台的軟體開發,是比較有幫助的。
下一篇,會為大家展示如果編譯出 AVS 的智慧喇叭功能。
其它
ADF SDK 內有其它的諸如撥放 http 串流音樂的例子,但試起來雜音很嚴重。參考了 playmp3 的範例程式後,發現它有一段註解是說 LyraTD-MSC 上的 Codec 只支援 48KHZ 的格式,所以它有做一個 resampling 的動作。這方面我是沒有將 resample 的動作加到其它例子試過,這個還請讀者注意一下。
參考資料
官方參考資料:https://docs.espressif.com/projects/esp-adf/en/latest/get-started/index.html
Latest Comments