ESP32 LyraTD MSC 智慧喇叭平台建置 (1) – ADF SDK 使用

最近拿到了一組智慧喇叭 (Smart Speaker) 的平台,是深圳公司 Espressif 出的 ESP32-LyraTD-MSC。Espressif 的產品在我之前的 Maker 專案 WiFi995中,就是用他們的 ES8266 WiFi 模組,所以一拿到這個平台,就有種看到老朋友的感覺。

這次是同事拿給我,請我看一下怎麼把這塊看起來普普通通的板子,弄的 smart 一點,就接受了這個挑戰。由於 Maker 是沒有原廠 support 的,只能靠網路上的不可靠訊息,和到處 Google 網頁,所以這種徬徨無助的經驗真的很深刻。為了讓大家不要也有我這種痛苦,就成了這篇文章的原由。

Espressif ESP32-LyraT 與 ESP2-LyraTD-MSC

官網的介紹有兩塊名字很像的板子,ESP32 LyraT 和 ESP32 LyraTD-MSC 基本上就是形狀看起來不一樣,軟體基本上大概相容。印象上是差別在於 LyraTD-MSC 有一個 DSP,所以可以用來做一些訊號處理,諸如降噪、多相麥克風音源處理,所以要當 Smart Speaker 的話,請用MSC這一款。官方說明請參考這裡

這個文章預計會分成3篇:

  1. ADF SDK 使用: ADF SDK 的功能是比較一般的撥放 MP3, 錄音, media streaming 之類的功能。ADF 是 Audio Development Framework, 它是基於更基本的 IDF (IoT development framework),所以在原始碼會看到 ADF 裡怎麼還有 IDF,就是這個原因。
  2. AVS SDK 使用:AVS 是 Amazon Voice Service, 簡單的說就是 Amazon 的 Alexa 智慧喇叭。這個 SDK 功能比較單一,內建的例子只有幾個語音控制的,沒看到太多撥放 Local File 的部份,這部份可能要從 ADF 搬 sample code 過來試。
  3. AVS Provisioning Android APP 與 LWA 帳號申請:第三個部份則是要讓智慧喇叭可以動,需要一個 APP 來啟用它,還需要申請 Amazon 的服務金鑰和帳號。APP本身編譯沒什麼問題,比較難的還是 Amazon 帳號申請…非記下來不可啊。

廢話完了,開始吧

本文是用 Ubuntu 16.04 64bits 完成的,若中間編譯有問題可以試著也換成同一個版本看看。另外,Espressif 上其實有提供在 Windows 下利用msys編譯的方式,但速度很慢,也會碰到其它問題,不建議使用。

安裝 Ubuntu 套件

中間會需要一些套件,按照官方的列表,和我自己的需求,直接安裝下面的套件。

將 Linux 帳號加入 dialup 群組

這個平台是利用 USB Virtual Com Port 來做為 console 和 firmware update,在 Linux 非 root 身份要存取的 comport 的話,需要加入 dialup 群組。用下面的命令,將使用者加入此群組。

為了讓設定生效,記得要從新登入。

安裝 Toolchain

依照官方的文件,我們所有的操作都會在 ~/esp下。所以 toolchain 也是裝在此處,請依照下列命令安裝與設定。

 

取得 ADF SDK

ADF SDK 都放在 github 上 (該搬去 gitlab 了吧…),所以都可以抓到最新的 release。

編譯 Example

接下來就使用 ADF SDK 內的 example 來驗証安裝有沒有問題。在編 example 時, 就會一併編譯所有的東西, 包含 FreeRTOS, codec, wifi supplicants 等等,所以第一次編會稍微久一點。最後一步會進行燒錄,所以請在執行前就板子都插好,這樣才能燒。

這塊板比較麻煩的是 console 和燒錄是同一個 port,所以在燒錄時 console 就不能連接。因此 espressif 提供了一個內建的 console terminal,也就是在 「make flash monitor」的這個 monitor 就會在編譯完進入 terminal 模式,要跳出來再編譯就按「 Ctrl+] 」離開。

設定 Audio HAL,沒設好會沒聲音

設定要使用的 COMPORT

燒錄中

燒錄完進入 console terminal,按 Ctrl+] 可離開

檢驗成果

當一切都完成後,將喇叭接上板子上的 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

Leave a Reply