文章

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

[應用] 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++