文章

[模組] 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 濾波器,用來消除雜訊的干擾,並根據過去的動態來預估未來的...

[心得] 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         市面常見...

[模組] 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 程式管理列表     ...

[應用] 關於 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,後台系統透過計算機制得出流量的報酬,便會在這台機器上...

[工具] 中文自然語言處理 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...