文章

顯示從 2022 起發佈的文章

[模組] ESP32 C3 無線模組帶有 OLED 顯示

圖片
        本周收到 ESP32C3 模組帶有 OLED 顯示模組,如下圖一所示,晶片的尺寸比一個銅板還小。ESP32 核心採用的是頻率 160MHz 的 RISC-V,我們從編譯過程就能看到 riscv32-gcc 的編譯工具,推斷內核是 RISC-V。之前,我常使用的 ESP32 內核晶片是 xtensa 核心,不過今年已經看到不少 MCU 核心改成 RISC-V 架構了,大概與中美科技對抗有關,參考先前的文章  "以 RISC-V 架構的 MCU" https://han-ya.blogspot.com/2022/05/risc-v-mcu.html 。這個無線模組上面的 SSD1306 OLED 尺寸是 0.42吋,72 x 40 點。 圖1-1:ESP32C3 模組正面圖 圖1-2:ESP32C3 模組背面圖         如何開發這個模組?很容易上手,只要在 Arduino IDE 上面就能編譯程式碼。首先,設定開發板的安裝網址 https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json,然後到 "開發板管理員" 下載安裝 ESP32 的套件,最後開發板的選項中,選 " ESP32C3 Dev Module "。        再來就是 OLED 模組的顯示,需要下載 u8g2 的函數庫,如下圖二,安裝到 IDE 環境裡。接著,到 github 網站下載程式碼 https://github.com/01Space/ESP32-C3-0.42LCD ,範例程式碼便能成功編譯了。 圖二:使用的 OLED 函數庫         題外話,近期市面上越來越多以 RISC-V 為架構的 MCU,可預期在中低端的成熟晶片將替換掉 ARM 架構,畢竟 ARM 架構需要授權金,RISC-V 目前是開放的架構,在成本上會比 ARM 架構更為有競爭力。

分析 Keyes 自動平衡車的原理

圖片
        將 Keyes 平衡車套件組裝起來後,系統的核心控制器是 Arduino 的核心晶片,搭配三軸加速度感測器以及馬達驅動模組,組合成一套自動平衡車的系統。首先,三軸感測器負責偵測出車子動態的情況,當偵測到車子有前傾或後仰的情況時,立刻輸出馬達驅動讓輪子往前進或往後退來達到車子的動態平衡。         系統在尋求動態平衡的過程中,採用 PID (Proportional Integral Derivative) 機制,將一個偏差的比例透過積分與微分的線性組合構成一個控制量,用這一控制量對被控制的對象進行控制。以平衡車的系統,透過 "傾斜的角度" 與 "角速度" 的變化量來控制馬達驅動。底下開始分析每個細節與操作。 MPU6050         平衡車上面有一顆三軸加速度感測元件 MPU6050,用於偵測 X, Y, Z 三軸的角速度與角度的變化,它們之間的關係如下圖一所示。圖一中的右手邊代表車子前進的方向,也就是 Y 軸的方向,車子朝上方就是 Z 軸方向,而我們眼睛正視車輪的輪軸就是 X 軸的方向。從 MPU6050 感測器可以讀取到每一軸的角速度,以及每一軸的重力加速度數值,參考前面文章的說明 https://han-ya.blogspot.com/2015/12/gyro-accelerometer.html 。我們從 Y 與 Z 軸的重力加速度 g 值,可以計算出傾斜的角度,如下圖二所示。 圖一:三軸感測器的角速度與角度之關係         假設車子往前傾斜了, Z 軸往 Y 軸順時針旋轉了一個角度後,依據物理分量的觀念,重力加速度可看成具有  gy  和  g z 的分量,而這兩個分量分別可從晶片量測而得到。再根據三角函數的定義,我們可以計算出旋轉的角度,如下圖二所示,因此角度等於 atan( gy / gz)。 圖二:傾斜角度的計算 Kalman濾波器         前段我們從 MPU6050 感測器計算出角度與角速度之後,這裡需要加上一個 Kalman 濾波器,用來消除雜訊的干擾,並根據過去的動態來預估未來的動態。網上有不少 Kalman Filter 的介紹  卡爾曼濾波 (Kalman Filter) , 【演算法】卡爾曼濾波器 Kalman Filter ,等文章供參考。        

[心得] Ideas Hatch 專訪漢亞科技的文章

圖片
八月中,資策會來漢亞造訪,想深入了解目前國內物聯網開發的生態 ,花了一個半小時的互動專訪,我也述說過去使用國產 IC 的情況,最後由資策會人員整理成一篇文章。 分享一篇刊登自 ideas Hatch 智造基地的專訪文章,底下是連結內容。 https://www.ideas-hatch.com/news_detail.jsp?id=364&type_id=4

[模組] 開箱 Filogic Arduino SDK 開發板

圖片
        拿到最新的 Filogic 開發板,晶片核心是聯發科的 MT7933,由群登科技(AcSip)封裝成模組,再製作成開發板,如下圖一所示。之前下載的 Filogic SDK 是 Linux 環境的版本,對初學者的操作上確實是相對困難,這次釋出 Arduino SDK 的版本,在設計開發方式會比較容易上手。本文將介紹如何 燒錄 板子的韌體,以及如何配置每根腳位 IO mux 的功能。 圖一:Filogic 130A 開發板         這套 Arduino SDK 必須上大聯大的網站 (大大通) 下載最新出爐的版本(1.0.0),下圖二所示。下載後,發現它是一個 zip 壓縮包,要怎麼與 Arduino IDE 一起套用呢?要先在電腦上安裝 Tomcat 軟體,然後把下載的 SDK 檔案放到 Tomcat 的目錄底下: \Tomcat 8.5\webapps\ROOT ,此時執行 Tomcat 後,再開啟 Arudino IDE。接著,在 IDE 裡面設定 "開發板管理員網址" (其實網址就是本機 localhost:8080),Arduino IDE 就會自動下載 Filogic 相關的 SDK 了,細節請參考最底下的文章連結。 圖二:Filogic SDK 網站 上傳燒錄 接上 USB 後,試著從電腦上傳韌體到開發板上,首先我們開啟一個範例程式,在 Arduino IDE  上面編譯並上傳。當編譯時,需先按住板子上的  SW1 (Reset)  鈕,然後觀察  IDE  的下方訊息欄,直到我們看到 “ INFO: Goto open COM xx ” 這段訊息時,再放開板子上的  SW1 鈕, IDE  工具便會進入燒錄韌體的階段,開始上傳。最後,上傳成功後,我們會看到 “ Finished! ” 的訊息。 每次上傳成功後,我們必須再按一次板子上的  SW1 (Reset)  鈕,這樣板子才會重新啟動我們的程式碼。因為,它並不像  Arduino UNO  開發板會自動重新啟動。 IO Mux         市面常見  MCU  上的 IO 接腳功能是可以當作多重用途的,一根 IO 腳可能是  GPIO ,也可能是 analog input ,也可以是某通訊介面的腳位。在  MT7933  晶片上的每根腳位也都具有多重功

[模組] ESP32 LoRa 與 CubeCell AB02S 相連做為 GPS tracker

圖片
        本文主要介紹 LoRa 節點之間的通訊傳輸,我們使用 Heltec 公司製造的 ESP32 LoRa 和另一個 CubeCell AB02S 的節點,如下圖一所示。 在前一文  https://han-ya.blogspot.com/2022/06/helium-lora-wan-hnt.html  已經介紹過 LoRa 的公眾網路 Helium 的連線操作,這兒我們希望實作一套 LoRa 節點間的收發通訊連線,由於 CubeCell 具有 GPS 功能,在實作上將 GPS 的經緯度數據透過 LoRa 連線傳送給 ESP32 節點,並在 OLED 螢幕上顯示出 GPS 經緯度數據。接下來,就將 LoRa 傳輸與開發的過程詳述於後,在未來計畫,利用 ESP32 WiFi 的功能,實現出 LoRaWAN 的架構,也就是將 ESP32 做為 LoRa gateway 的角色。 圖一:兩種 LoRa 節點 ESP32 LoRa         這塊開發板是由 ESP32 為核心具有 WiFi 連網功能,再搭配 SX1276 LoRa 晶片所組成,所以這板子能當作 LoRa 轉 WiFi 的路由設備,也可視為 Hotspot 的系統架構。開發它需要從 Arduino IDE 環境下進行編譯,首先在 IDE 的配置中填入開發板管理員的網址 http://resource.heltec.cn/download/package_heltec_esp32_index.json ,這樣 IDE 便會從網址下載板子的相關範例與函數庫,如果下載成功的話,應該能在 IDE 看到下圖二的畫面,然後選擇 "WiFi LoRa 32 (V2)",開發板的硬體版本是V2。 圖二:Arduino IDE 開發板管理員         接著,我們點選程式庫,在程式管理員畫面中將會列出各類開發板的函數庫與程式碼,基本上還未被安裝到電腦上。我們輸入 "heltec" 關鍵字過濾一下,如下圖所示,列出所有與 Heltec 相關的板子與程式,其中只要安裝圖中紅色標示的程式範例版本就可以了。 圖三:Heltec 程式管理列表         從 IDE 選單上,我們點選範例,便會列出所有支援這塊開發板的範例程式,然後我們再依照實作的需求開啟範例。不過,我們最

[應用] 關於 Helium LoRa WAN 物聯網路 (HNT挖礦機)

圖片
        在前一篇介紹 LoRa 的公眾網路(TTN)  https://han-ya.blogspot.com/2022/05/lora-thethingsnetwork-helium.html ,本文打算再介紹由 LoRa 通訊協定所建構的物聯網路,這網路稱為 Helium 網,而當下仍以擴展網路網,提升覆蓋率為主 。該系統網主要由 Hotspot ( 熱點 )路由器與各類 LoRa 終端設備(或稱為 節點 )所構成,目前全球 Hotspot 裝機量已超過 86 萬台,就我個人看法,Helium 應該還在尋找商業應用的目標階段,不過我會從技術與操作的角度去了解這個 LoRa  公網,底下分別介紹這兩個系統成員 。 Helium Hotspots         就運作角色而言,這個 Hotspots 熱點路由器的功能是做為連接 LoRa 網路與 Internet 網的橋樑,類似一個 IP 分享器的概念。負責接收來自 LoRa 終端設備的連線請求,並轉傳資料到 Internet 網路。另外,每個 Hotspots 涵蓋的範圍大約是方圓 500 公尺,因此整個 LoRa 網則由各地無數個 Hotspots 所形成的覆蓋網,如下圖一的蜂巢狀,我們可以連上  https://explorer.helium.com/  ,從這個網站就能看到全球 Hotspots 分布的情況,圖一是顯示高雄市三民區附近的路由器,蜂巢上面的數字代表這個區域內有多少台 Hotspots 路由器。 圖一:Hotspots 熱點路由器的蜂巢圖         目前 Hotspot 機器由不同的廠商所製造[1][2],並沒有特定的專屬廠商,也就是大家都能製造這台設備的戰國時代,我手上測試的機器是 Linxdot 礦機。為何它稱為挖礦機?在前一篇文章有說明,Helium 網路為了提高覆蓋率,利用加密貨幣的區塊鏈技術,設計一套補貼的商業模式,藉由這誘因以便建構一個全球的 LoRa 物聯網路。當資料流量通過這個 Hotspots,後台系統透過計算機制得出流量的報酬,便會在這台機器上記錄 reward,也就是 HNT 幣,如下圖二所示。HNT 幣也有市場換算成美元的價格,可以從上述的網站查詢到市價 、 市值 、流通量....等資訊,這個幣也能支付我們本身使用  LoRa  資料傳輸量的費用,換句話

[工具] 中文自然語言處理 NLP 的開發套件

圖片
        自然語言處理 ( NLP - Nature Language Processing) 主要能讓機器分析對話文字,進而理解對話的意思,這項技術其實已經發展很多很多年了,但在近年來,拜高速網路 、 海量數據 、 智能發展之賜,有機會廣泛地應用到實際生活之中,比如聊天機器人 、 文件資料搜索 、演講內容分析...等 。開發 NLP 技術的含量很高,需要建立模型 、收集 大量語料 、 訓練與 運算,一般的開發人員其實很難短時間就能將 NLP 的語意功能實現出來。目前幾個雲端平台的大廠(微軟 、 谷歌 、 阿里 、 百度)有提供 NLP 相關的服務,但所幸在中文自然語言處理領域中有幾個學術單位開發出不錯的模型,並且提供 SDK 工具包給工程人員進行二次開發,常見的中文 NLP 模型有:哈爾濱工業大學的 LTP 、中科院的 NLPIR 、清華大學的 THULAC ...等等,其中以哈工大和中科院的 NLP 模型效果比較佳 (根據網路使用者的比較後,這兩家的 CP 值較高),中科院的 SDK 提供 C# / C++ / Java 這些程式語言的介面,對我們開發者更為便利 。本文將介紹中科院的 NLPIR SDK 開發和操作的結果。         首先,我們到 github 網站下載 NLPIR, https://github.com/NLPIR-team/NLPIR ,當中有一個 SDK 目錄,裡面存放了 20 種自然語言處理的組件,各個組件的功能說明,如下圖一所示。雖然這套 SDK 提供便利的介面讓大家進行二次開發,但是它有 license 的限制,對於短期測試的開發人員而言,github 上面會定期提供一個月期限的 license,我們只要下載並更新 license 後就能繼續使用 SDK。如果有商業需求的話,則需要購買商業 license,取得長期使用權。下圖中以藍色標示的組件是我實際測試操作過的部分,當中的 NLPIR-ICTCLAS 組件為系統的核心,可以做到中文分詞,將一段句子或文章經過這組件的分析後,切出一個一個詞並標示出名詞 、 動詞 、 形容詞 、 副詞....等詞性,這一刀切的精不精準就代表這套系統優不優秀了。除了處理中文分詞之外, NLPIR-ICTCLAS  同時也能找出句子的關鍵字或有無發現新詞。         另外其他組件,像 K

[應用] Public LoRa 網路:TheThingsNetwork (TTN) 和 Helium hotspots

圖片
        幾年前買了兩個 Arduino MKRWAN 1300 模組,當時測試 LoRa 的點對點通訊,參考前文 https://han-ya.blogspot.com/2018/07/lora-arduino-mkrwan-1300.html ,點對點的資料互傳是沒有問題。最近,想要將模組連上 TheThingsNetwork 和 Helium 公眾的 LoRa 網路,發現連不上 TheThingsNetwork,於是打開 TheThingsNetwork 地圖,如下圖一所示,圖中的每個點代表有多少個 LoRa gateway 在上面,我們能發現 LoRa 公眾網路在歐洲的密度較高,相較之下,亞洲密度也太低了。像我目前在南台灣就連不上 TheThingsNetwork,因為附近沒有 LoRa gateway,我的 Arduino LoRa 模組始終沒有成功上公網。 圖一:TheThingsNetwork 全球設備分布地圖         朋友介紹一個近年流行的 Helium 挖礦熱點 ,它也是一種 LoRa 物聯網,而我稍微了解它的經營模式,其目標是佈建一個低成本且通訊距離遠的物聯網,以補足部分 5G 網路覆蓋之不足的問題,所以覆蓋率便是 Helium 網布建的目的。為了增加布建 Helium hotspot (類似基地台) 誘因,團隊引入區塊鍊與加密貨幣的概念,只要安裝 Helium 設備並連上網後,便會給虛擬貨幣 HNT。在這種利益驅使下,越來越多人會買 Helium 設備 (簡稱為礦機) 布建,因此我們從下圖二能看出布建的熱點比起 TheThingsNetwork 的密度還要高出非常多,歐美地區相當熱絡。 圖二:Helium explore 全球熱點分布圖         將地圖拉近後,觀察地圖被切割成一小塊蜂巢式區域,如下圖。每個區域就是一個覆蓋點,如果這個區域內的 Helium 礦機太多的話,會影響 HNT 虛擬幣的分配,換句話說,每個區域的資金有分配上限,單位面的礦金是固定的,如果越多人來挖,每人分配到的利潤就降下。畢竟這種挖礦的誘因是為了提升網路的覆蓋率而驅動的,但是真正最終目標還是要以實體商業來使用這套 LoRa 網路傳輸,要有商業的流量,將覆蓋率轉成實體商業利潤。比如說,搭配一些商業交易,像停車格的空閒資訊 、 充電樁的資訊 、 智慧電表

[筆記] 以 RISC-V 架構的 MCU

圖片
        隨著開源的 RISC-V 架構開始熱絡起來,市場上逐漸出現以此架構設計的晶片,搭配類似 Eclipse 的開發環境 IDE,參考前文 https://han-ya.blogspot.com/2022/02/rt-thread-studio.html 。於是,購買了幾個 RISC-V 核心的開發板,正可對比 ARM Cortext-M 架構的 MCU。在晶片短缺之際,RISC-V 架構的晶片或許可做為另一項選擇。 CSM32RV20         南京中科微電子的 CSM32RV20 低功耗控制器,最高時脈 32MHz,操作電壓範圍 1.8 ~ 5V,內建 Flash 最多 40kB 和 4kB SRAM。這樣的運算等級相當於 ARM Cortex-M0 的控制器,如下圖。周邊介面包含 GPIO 、 I2C 、 SPI 、UART 、高精度的 ADC (up to 16-bit)...等等,這規格看起來滿吸引人的。         這塊開發板需要安裝自家的開發軟體 (CSM Studio) ,其實也是類似 Eclipse 的開發環境,專門接上自家的 debugger (或 JLink)並搭配這套軟體使用,如下圖一所示。安裝後,提供 BSP 驅動程式和範例,使用者就能測試看看晶片的功能。 圖一:CSM Studio 開發軟體 CH32V103         沁恆微電子的 CH32V103 控制器, 最高時脈 80MHz,操作電壓範圍 2.7 ~ 5.5V ,內建 Flash 最多 64kB 和 20kB SRAM,他們的 CH32V2x 系列的時脈可達到 144MHz。這樣的運算等級相當於 ARM Cortex-M3 的控制器,如下圖所示。其 周邊介面包含 GPIO 、 I2C 、 SPI 、UART 、 12-bit  ADC 、DMA、USB...等等,這規格正可對比意法半導體的 STM32F103 系列。 這塊開發板需要安裝一套名為 MounRiver 開發軟體 (MounRiver Studio) ,也是基於 Eclipse 平台所設計的 RISC-V 集成開發環境,我們還需要搭配一個 WCN-Link 的除錯器 (調試工具),才能下載韌體到開發板上。 圖二:開發板 CH32V103 vs. STM32F103 AB32VG1      

[功能] 在 Filogic 130A SDK 裡,如何使用 HTTP POST 的連線?

圖片
        前陣子與金屬中心執行工廠廠線的數據可視化案子,後來又在 DIY Maker 社團裡看到不少 IoT 數據可視化的影片,能想像在大數據的環境下,將各類數據可視化做成圖表是一件滿吸引眼球的事。於是,打算用聯發科的 Filogic 130A 開發板來實現雲端 IoT 數據的 dashboard,首先雲端的可視化展現將採用 ThingSpeak ( https://thingspeak.com/ )提供的服務,註冊一個屬於自己的 channel,如下圖所示。 圖一:在 ThingSpeak 網站創建自己的可視化         接著,研究看看數據用哪種方式上傳到該網站上,在 "Write Data to Channel" 內文提到採用兩種方式,一種是 REST API ,另一種是 MQTT API ,而本文將使用 REST API 的方式把 Filogic 130A 的數據上傳到雲端。         回到 Filogic 130A SDK 的部分,它提供了一個 httpclient 的模組程式碼,讓使用者自己實現 HTTP POST 的連結。這個模組只提供 HTTP 的連線,如果需要 SSL 的 HTTPS 連線,必須在編譯的 makefile 中開啟 " MTK_HTTPCLIENT_SSL_ENABLE " 這個定義,在 feature.mk 檔案裡,加上下列一行:                          MTK_HTTPCLIENT_SSL_ENABLE      = y 然後再進行編譯,此時 SDK 裡頭的 mbedtls 模組也會載入編譯,HTTPS 便能使用 SSL 認證連線了。程式設計方面,首先要呼叫  httpclient_connect( ) 函數建立連線, 設定  URL 為   https://api.thingspeak.com/update,連線成功後,再呼叫 httpclient_post( ) 函數,我們必須填入 API key 和欄位的數值,如下: 根據 ThingSpeak 的文件,返回的 response 可以是 text 或 Json 或是 Xml 格式,上面我們採用的是 text 格式,所以返回的訊息是 entry ID,也就是上傳第幾個點的數據。        

[工具] 在 Arduino IDE 環境下,也能編譯其他廠商的開發板

圖片
        Arduino 開發板發行多年了,也是 DIY maker 很喜歡拿來開發的板子之一,主要是板子的周邊介面讓入門者簡易明白,加上 IDE (Integrated Develop Environment) 這套工具介面簡潔且非常容易上手,這些優點讓 DIY maker 能夠很快驗證某些電路或功能和應用。另外,在教育方面,由於免費的開發工具以及初學者能負擔的板子價格,所以在理工科系也會拿 Arduino 做為課程,設計各類嵌入式系統的應用。不過,本文並不打算介紹 Arduino 開發板如何使用,而是介紹 Arduino IDE 這套工具如何編譯 ⌈非⌋ Arduino 板子,借用 IDE 來開發第三方的板子。         隨著 Arduino 這個生態系統發展多年後,使用者越來越多,在 DIY maker 的討論越來越火熱的情況下,吸引來自  ⌈非⌋ Arduino 生態的廠商也希望用 IDE 工具來編譯自家的板子 。既然 IDE 是編譯工具,能直接編譯其他  ⌈非⌋ Arduino  廠商的晶片嗎?答案當然是不行了,因為每家晶片的核心不見得相同 (Arduino 是 Atmel AVR 核心),不能用同一套 compiler tool-chain 工具,有興趣可以參考前面的  "漫談 ARM cross compiler 環境"  一文。因此,在 IDE 裡面提供一個欄位,讓使用者輸入網址,並自動下載第三方開發板的開發工具 (tool-chain),該工具會自動整合到 IDE 裡面,使用者也可以非常便利地在 Arduino IDE 開發第三方的程式。下圖一所示為支援 樂鑫 ESP32 的網址,以及 瑞昱阿米巴 Ameba 開發板的網址。 圖一:額外開發板的下載網址         IDE 自動下載並安裝後,我們在下圖的目錄中能找到第三方廠商的工具包,明顯看出工具包都包含了 hardware 和 tools 資料夾。其中, tools 裡面就是編譯的工具程式 (包括 compile 和 link...),還有燒錄韌體到板子的程式。以 EPS32 為例,這晶片的核心是 Xtensa 處理器,原廠用開源的 gcc 製作了一套屬於這顆處理器的編譯工具,在目錄底下就找到 " xtensa -esp32-elf-c++

[應用] 藍芽 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 函數  

Tutorial Video:聯發科 Filogic 130A(MT7933) 教學影片

圖片
        近期研究聯發科 Filogic 130A (MT7933) 的紀錄,如下,它是一套智慧音箱的解決方案。首先,核心晶片是採用聯發科 MT7931 / MT7933,集成了無線網路 WiFi 6、藍芽、語音處理 、DSP  ...等功能到一顆晶片裡 。另外,一般 MCU 常見的周邊介面,如:SPI / I2C / ADC / UART ...通訊介面也同樣支援,SDIO 資料儲存介面也具備。此外,開發板除了具有撥放音樂的介面,晶片核心還提供語音辨識的功能。         下表是 MT7933 晶片內部的規格,雙核心 ARM Cortex-M33 和 HiFi4 DSP 處理器,內建的 flash 容量高達 16MB,以及內部記憶體 SRAM,相較其他的 MCU 廠商,這容量真是佛心來的,不怕記憶空間不夠,適合語音控制方面的應用。除了這顆晶片之外,另一顆同等級的 MT7931 ,則是內建單核心 Cortex-M33,少了 HiFi4 DSP 處理器,但是做為常規的 MCU 控制器,性能也是很強大。由這兩顆晶片所設計出的開發板,分別稱為 Filogic 130 (MT7931) 和 Filogic 130A (MT7933)。 表一:MT7933 晶片規格 (取自 Acsip 網站)

WiFi Modbus 應用:在 Filogic 開發板, 實現無線連網的資料收集

圖片
        本文將在聯發科的 Filogic 130A 開發板上實現一個無線連網的資料收集方案, 利用工業常見的 Modbus 通訊協定收集產線設備的數據。隨著工廠智能化的發展,生產線上的設備,如:PLC 、 測儀器...都具有聯網的功能,並能提供即時的產線資訊輸出,因此後端需要一個資料收集的方案將產線資訊整合。Filogic 130A 這塊板子除了無線連網功能外,還有 SD 卡介面和 FAT 檔案管理系統,請參考影片連結: "Implement SD + FTP server on Filogic 130A" https://youtu.be/C8EW4fvFUds 。接下來,本文要介紹板子的 SDK [1] 所提供的 DNS (Domain Name System) 和 NTP (Network Time Procotol),並實現 Modbus 通訊功能,最後將數據資料依據當下的時間實時地記錄到 SD 卡裡面。完整的教學影片連結: https://youtu.be/TPryHb3H2oM DSN & NTP         關於數據收集,首先遇到第一個問題是時間,板子需要一個本地時間。因此,我們採用 NTP 協定取得網路時間,以便板子開機後能同步為本地時間。再者,另一個問題是 NTP 服務器常以 domain name 方式呈現,非 IP 位址方式。所以,我們還需要 DNS 的功能,將服務器的網域名稱轉成實體 IP 位址,這樣才能取得網路時間。這段正是要說明這塊 Filogic 開發板如何做到 DNS 和 NTP 的功能。         在 Filogic 提供的 SDK 裡頭,它整合了一個第三方開源碼,為 LwIP (Light Weight IP),是一個 TCP/IP protocol stack。DNS 正是裡面所支援的通訊協定之一,因此我們只要呼叫 LwIP 函數庫就可以使用 DNS 的服務,如下所示。調用 dns_gethostbyname 函數,再給定一個自己的 callback 函數,這樣就能取得 domain name 的 IP 位址了。                dns_init ();   // 初始化 DNS      ipaddr_aton("8.8.8.8", &