文章

顯示從 4月, 2022 起發佈的文章

[應用] 藍芽 BLE client/server 架構:BLE remote controller

圖片
實作目的         本文要實現一個藍芽 BLE client/server 的架構,以 Filogic 130A 開發板做為智慧音箱的 BLE server 端,另外 ESP32 的藍芽遙控器做為 BLE client 端,架構圖如下所示。在先前的文章 https://han-ya.blogspot.com/2022/04/smart-speaker-on-filogic-130a-kit.html  已經實現智慧音箱的功能,不只是聲控方式,我們還希望能再增加無線遙控的功能。然而, MT7933 晶片(Cortex-M33)本身有語音運算且具有藍芽連接的能力,所以採用 BLE 來達到這項目的。本文的最後一段,有影片呈現實現的結果。         架構中,做為 BLE server 的設備,就是等待其他周邊設備的連接請求,所以連線之前需要發出廣播與配對 (advertising) 的訊號到空中。另一方面,做為 BLE client 的設備,本身要進入掃描模式,查看空中有哪些 server 設備,然後再對特定的 server 提出連線的請求。等連線成功後,client 便可以取得 server 端的 GATT 各種屬性。 圖一:BLE client / server 架構圖 ESP32 client         在 Arduino IDE 開發環境中,ESP32 提供不少範例程式,其中打開範例 ESP32 BLE Arduino\BLE_client,這是一個 client 端的應用,它會開啟 scan 模式,掃描周圍能提供服務的藍芽設備,並將名稱顯示在 COM port 上,如下圖所示,這個範例能掃描到藍芽位址,設備名稱,以及服務的 UUID。一般來說,client 設備上會有顯示資訊,讓我們選擇連線哪一個藍芽設備,在 ESP32 BLE 模組就先用 COM port 充當顯示囉! 圖二:BLE client 掃描設備的結果         如果 client 端要連線某一指定的設備,要先知道設備名稱,比如我們這個實驗打算連線的是 Filogic 130A 開發板,它廣播的名稱為 " BLE_SMTCN ",那 client 端的程式被我改寫成,只要一掃瞄到這個名稱後,便向這設備進行連線的請求。連線成功後,我們看到 COM por

智慧音箱 (Smart speaker) on Filogic 130A Kit

圖片
        聯發科在2021年發表 MT7931 / MT7933 晶片,高度集成了無線網路 、 藍芽 、 語音處理於單晶片上,再提供一塊開發板( Filogic 130/130A )做為設計評估之用。先前,我們已經研究開發工具和 SDK 一段時間,並且將操作紀錄成教學影片,請參考 聯發科 Filogic 130A(MT7933) 教學影片 https://han-ya.blogspot.com/2022/03/mt7933.html ,分享給後進的開發人員,以縮短摸索的時間。目前,在這個平台的應用方面,智慧音箱或智能語音助手(Voice Assistant)是解決方案之一,本文將介紹如何在該平台實現智慧音箱這個應用,其影片可參考底下的連結。 系統介紹         下圖一是 Filogic 130A 開發板的方塊示意圖,中心是一顆 MT7933 晶片核心,其包含兩個處理器,一個是 ARM Cortex M33 核心,另一個是 DSP 核心。M33 的工作負責周邊的 I/O 介面,如:SPI / I2C / ADC / UART / SDIO...等通訊介面,而 DSP 負責語音的處理,比如:play / record / VAD / AEC...等。這兩個內部的核心處理器之間有一套通訊的介面,名為 IPI (Internal Process Interface),做為兩邊的命令、event、回應...的溝通橋樑。         做為智慧音箱的解決方案,在喇叭播放的部分,可以提供雙聲道的聲音輸出。在麥克風的部分,可以接兩路音源的輸入,具有陣列的效果 (far-end / near-end)。因此,喇叭與麥克風之間所產生的回音,這顆晶片的 DSP 能藉由 AEC (Acoustic Echo Canceling) 運算來消除,再者, VAD (Voice Activity Detection) 的算法能分辨出音源是屬於環境噪音或是來自人聲,最後才能進行語音識別 ASR (Acoustic Speech Recognition) 的運算。ASR 計算後的結果,如果偵測到符合預設的指令集,則將結果傳遞給 ARM Cortex 處理,ARM 便會控制周邊 I/O 的動作,完成智能化的行為。 圖一:Filogic 130A 開發板的方塊圖 SDK 函數