[模組] 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 選單上,我們點選範例,便會列出所有支援這塊開發板的範例程式,然後我們再依照實作的需求開啟範例。不過,我們最好也要知道這些範例程式存放在電腦的哪個地方,或許哪天可能需要修改到底層的程式碼,下圖四是範例程式碼被安裝的目錄。如果使用者有興趣,目錄底下包含 *.cpp 和 *.h 檔案,可以仔細研究 Heltec LoRa 程式封裝的結構。
圖四:ESP32 LoRa 範例程式存放的目錄

CubeCell

        這塊開發板由 MCU 加上 SX1262 LoRa 核心所組成,另外還搭載一個 GPS 模組與 MCU 介面相接,因此具有 LoRa + GPS 的功能。開發設計方面,它也是從 Arduino IDE 環境下進行編譯,同樣地,在 IDE 的配置中填入開發板管理員的網址 https://github.com/HelTecAutomation/CubeCell-Arduino/releases/download/V1.4.0/package_CubeCell_index.json
,這樣 IDE 便會從網址下載板子的相關範例與函數庫
,如果下載成功的話,能在 IDE 看到下圖五的畫面,然後選擇 "CubeCell-GPS"。
圖五:CubeCell 開發板的管理員

        選定開發板之後,從 IDE 選單上,點選範例,便會列出所有支援這塊開發板的範例程式,然後我們再依照實作的需求開啟範例。同樣地,我們最好也要知道這些範例程式存放在電腦的哪個目錄,或許哪天我們需要修改到底層的程式碼,下圖六是範例程式碼被安裝的目錄。範例中,LoRa 和 GPS 是我們開發時所需要的,將會參考範例的寫法。
圖六:CubeCell 範例程式存放的目錄

實作測試

        實作過程中,CubeCell 節點當作 LoRa 的發射端,傳送 GPS 經緯度的數據;而 ESP32 節點當作 LoRa 的接收端,接收 GPS 的數據,並顯示在 OLED 螢幕上。通訊傳輸的首要觀念,通訊收發兩端的通訊格式通訊方式通訊參數...都要一致,LoRa 也有幾個參數需要雙方配置妥當後才能成功傳輸,如下圖七所示。第一個 LoRa 頻段,這個頻段跟所在地區允許開放的頻率有關,比如美洲是 915MHz台灣是 923MHz歐洲是 868MHz,雖然我們私底下測試可以任意選定頻段,但最好還是以當地的法規為優先。第二是 LoRa 頻寬 (bandwidth),這會影響傳輸率,頻寬越大,傳輸率越高,但是可能受外界干擾的程度也會越多,所以測試時我們選用最小的頻寬 125k。第三是 LoRa preamble 長度,這個也是得雙方設定好才行,在測試中我們設定為 8。其餘的參數,請參考圖中,或者下載測試的程式原始碼 [1][2],如果兩邊參數設定不正確,通訊就會不通。

圖七:收發兩端的 LoRa 參數配置

        測試過程,CubeCell 開發板所取得的 GPS 數據,透過 LoRa 傳送到 EPS32 開發板上,如圖八所示。圖中 GPS 經度為 120.3280,緯度為 22.6381,為了節省傳輸字串長度,將經緯度轉換成 hex 方式,所以底下看到 16.18ED 和 78.CD0。另一端,ESP32 接收到經緯度的數據,與發送端一樣。
圖八:GPS 數據傳送的結果

        最後,ESP32 具有 WiFi 連線的功能,所以我們將來會把 GPS 數據往雲端資料庫上傳,這樣就能實現出一個 GPS tracker 的功能。

參考資料

留言

此網誌的熱門文章

[筆記] Raspberry Pi 樹莓派的軟體開發

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Visual Studio 遠端偵錯的設定步驟

[筆記] Android APP 藍芽範例說明 -- BluetoothChat

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

[模組] LD3320 離線語音辨識晶片與 ESP32 無線傳輸