開發板介紹
安信可公司(Ai-Thinker)基於 ESP32 晶片推出一塊具有語音功能的 ESP32 Audio Kit 開發板,簡稱 ESP32-A1S,它與原廠的 ESP32 Lyrat 開發板都使用同一套 ESP-ADF SDK 軟體,但是開發板的電路有些差異,底層的驅動程式需要替換才能順利開發。
首先,最大的差異在 ESP32-A1S 語音編碼晶片採用 AC101,不過晶片被封裝在 ESP32 模組上,所以我們在開發板上面看不到這顆晶片,然而 ESP32 Lyrat 板採用 ES8388 晶片,因此在 ESP-ADF 中語音編碼的驅動程式需要更替。另外,其他不一樣的地方都在 GPIO 接腳的連接上,整理後,如下表所示,我們需要調整 ADF 底層的 HAL 和 Board 的配置,SDK 才能正常使用。
| 表一:ESP32-Lyrat 與 Audio Kit 開發板的差異 |
第一步,下載 ESP-ADF。在 VS Code 開發環境下[1],按 F1 後,選取 "Install ESP-ADF",VS Code 會自動從 GitHub 下載,並安裝 ADF 開發套件。如果是使用 ESP32-Lyrat 板子,可以直接跳到第四步,創建範例開始開發了。使用 ESP32-A1S 板子前,需要調整一下底層代碼,接續前面動作,我們從 GitHub 下載 A1S 的驅動程式,ESP32-A1S-AudioKit 程式碼,其目錄結構與 ADF 一樣,方便我們相互比對兩者差異。
第二步,到 \esp-adf\components\audio_hal\driver 目錄下,將下載 A1S 裡的 AC101 驅動程式放進來。接著,要將 ac101 目錄和 ac101.c 加到 CMakeLists.txt 文件,同樣也要加到 component.mk 文件裡,這樣編譯過程就會把 AC101 驅動程式加進來編譯了。
第三步,我們再到 \esp-adf\components\audio_board\lyrat_v4_3 目錄下(因為我們沒想要在 menuconfig 裡新增 A1S 配置,打算借用 lyrat 原配置),將 board.c、board.h、board_def.h、board_pins_config.c 更換成 A1S 的,其中 board_def.h 裡面是 GPIO 腳位的對應,請比對上面圖表的對應,修改成正確的 IO 編號。在 INPUT_KEY 結構中定義按鈕的型態,分 BUTTON 和 TOUCH,我們在未來使用一些範例時要改為 BUTTON (對於 A1S 而言),因為可能之後使用 VoIP 範例時會遇上問題。
第四步,我們要驗證上面更換的動作無誤,從 ADF 裡創建一個範例來驗證驅動程式能運作。按 F1 後,選取 "Show Examples Projects",找 play_mp3_control 這個範例來試試看。編譯並燒錄後,我們從耳機孔能聽到音樂的話,代表驅動程式更換成功。開發板上的 Key2~Key6 按鈕對應的功能分別為 Mode、Set、Play、Vol+、Vol-,我們也可以檢驗按鈕功能是否正常,代表 GPIO 腳位對應正確了。
範例 VoIP
在 ESP-ADF 提供了 VoIP 範例程式碼,按 F1 後,選取 "Show Examples Projects",找到 VoIP 這個範例後並創建目錄。VS Code 載入這個範例後,我們先打開 menuconfig 配置,如下圖所示,設定欲連線 WiFi AP 的名稱與密碼,Audio_HAL 選定 "Lyrate 4.3",前段我們說過借用這個配置, 底層的驅動程式已經被更換了。
接下來,SIP URI 設定開發板的 SIP 帳號將會註冊到哪一個服務器上,註冊成哪個分機與註冊的密碼。這裡的SIP URI 格式為 transport://user:password@serverIP:port,transport 指的是 SIP 連線方式是 UDP 或 TCP,user:password 指的是註冊的分機號和密碼,serverIP 指的是欲註冊的服務器 IP 位址,port 指的是服務器上監聽 SIP 的端口。我在這邊設定 udp://1002:1234@192.168.1.205:5060,代表 SIP 通訊協定採用 UDP 連線方式,監聽端口為 5060,註冊到服務器 192.168.1.205 上面的分機 1002,註冊密碼為 1234。
| 圖一:menuconfig 配置 |
當我們設定 menuconfig 配置後,可以首次編譯,看看是否成功。如果成功,燒錄 .bin 到板子上。另外,第一次載入 VoIP 這個範例時,還要燒錄一個音檔(audio-esp.bin)到板子上,這個音檔的內容主要是鈴聲、服務器連接的提示音....等,VoIP 應用程式會撥放這個音檔裡的內容,至於燒錄的指令,請參考 README.md。
在 VoIP 這個應用,開發板上的 Key1~Key6 按鈕對應的功能分別為 Mute、Mode、Set、Play、Vol+ 和 Vol-,不過 Mute 按鍵的功能似乎在 A1S 板並不成功。Mode 鍵是掛斷或取消,Play 鍵是接聽或呼叫,Vol+ 和 Vol- 就是音量鍵。圖二說明 Play 按鍵可當接聽或撥號,目前程式碼設定的撥號分機號為 101,這個部分可以自行修改調整。
| 圖二:Play 按鍵的功能代碼 |
最後,我們需要準備一個 SIP PBX 服務器和另一個手機 SIP app,這樣才能完成 VoIP 的系統測試。服務器可以選擇安裝 FreeSwitch 或 Asterisk (這裡我安裝的是 FreeSwitch 1.8.7),在手機安裝一個 Linphone APP,並註冊到服務器上。從 Linphone 撥打 1002,ESP-A1S 板子會聽到鈴聲,按下 Key4 (Play) 接聽,VoIP 通訊雙向就連通了。
參考資料
文章標籤
全站熱搜
