LoRaMessenger
LoRaMessenger是配備 LoRa 的 ESP32 節點之間的離網聊天工具,具有簡單的無線網路介面。
ESP32 託管一個 Wi-Fi 網絡,該網絡將提供一個簡單的類似聊天的介面,該介面將顯示線上節點、接收和發送的訊息,以及一些用於設定節點名稱、目標節點和訊息的文字方塊。
由於LoRa通訊協定用於發送和接收訊息,因此可以設定兩個或多個模組來發送和接收訊息,最遠距離可達幾公里。
大多數 ESP32 LoRa 模組(例如 TTGO LoRa32 或 Heltec Wifi LoRa 32)都配備顯示屏,因此您可以獨立使用它們來像尋呼機一樣接收訊息。
節點可以輕鬆地安裝在帶有電池的小盒子內,從而創建一個即使在沒有電話信號的區域也可以進行通訊的通訊系統。
網頁介面
ESP32 啟動後,會建立一個名為LoRaMessenger [number] 的新 Wi-Fi 網路。
當裝置連接到網路時,Web 介面應會自動打開,如果沒有任何反應,可以透過開啟 Web 瀏覽器並導航至 ESP32 IP(預設為 1.1.1.1)來存取該介面。
在 Android 上,連接到 Wi-Fi 網路後會開啟包含 Web 介面的 wifi 登入頁面。這樣,即使使用LoRaMessenger也能維持後台 4g 網路連線。通知面板中應顯示登入網路的通知,並且可以隨時開啟以再次顯示介面。
Web 介面現已顯示在您的瀏覽器上,聊天具有以下功能:
- 在頁面頂部,可以輸入節點名稱,以便收件人知道誰在寫信。按更新後,名稱將被儲存並傳送到所有可到達的節點。
- 線上部分顯示檢測到的所有可用節點,以及一些附加訊息,例如接收節點正在使用的中繼節點(如果存在)、接收 RSSI、中繼之間的跳數以及自上次聯繫以來經過的時間。
- 訊息部分按時間順序顯示最近 5 條(預設情況下,使用者可設定)發送和接收的訊息。每個訊息下方都會標明所有正確接收到該訊息的節點的名稱。
- 頁面底部有兩個文字框,第一個用於設定目的節點,第二個用於寫入訊息。
預設情況下,目標欄位包含廣播值。這樣訊息就會傳送到所有可用的節點。您也可以完全按照線上部分中報告的方式編寫節點名稱,以僅將訊息傳送給特定收件人。
請注意,截至目前,需要刷新頁面才能更新收到的訊息和已讀回執。
LoRa協議
LoRaMessenger使用自訂通訊協議,發送的每個資料包均由標頭和負載組成。
標頭提供了網路和資料包路由正常工作所需的信息,標頭中包含的參數如下:
- NETID:網路ID,在config.h中指定。這允許創建多個獨立網路。
- TTL:封包生存時間,在 config.h 中指定。該值用於了解資料包已經完成了多少跳,並且是路由演算法所需要的。
- 接收器:接收器節點號。
- SENDER:傳送方節點號。
- LAST NODE:發送方節點號碼或中繼資料包的最後一個節點。
- 下一個節點:接收器節點號碼或將資料包中繼到接收器節點所需的下一個節點。
- ID:資料包ID,從相同節點發送的每個資料包都有其唯一的4位元組長ID。這需要丟棄已經接收到的資料包並發送接收到的確認。
- PAYLOAD TYPE:有效負載類型,用於正確解釋有效負載。可能的有效負載類型有:訊息、確認和公告。
訊息負載:
- MESSAGE SIZE:訊息讀取所需的訊息大小(以位元組為單位)。
- 訊息:訊息內容。目前以純文字形式發送!
確認有效負載:
- 接收到的資料包 ID:接收的訊息資料包的 ID。這將被發送回發送者,讓他知道資料包已收到。
公佈有效負載:
- NAME SIZE:名稱讀取所需的節點名稱大小(以位元組為單位)。
- 節點名稱:節點名稱。這顯示在每個節點 Web 介面上,並且可以寫入目標欄位以僅向特定節點發送訊息。
資料包中繼和路由
LoRaMessenger創建了一個節點網絡,能夠將訊息轉發到發送者無法直接到達的節點。
為此,每個節點都使用一個自動路由表,其中包含目標節點和到達這些節點的最佳路由。此表透過定期發送的公告資料包或在所有節點更改名稱時進行更新。
目前的路由演算法非常簡單,並且喜歡較少的跳數,在兩條路由具有相同跳數的情況下,選擇與下一個最強節點連接的路由。
安裝
透過在 platformio 中匯入專案、更新設定並將其上傳到開發板,可以輕鬆安裝程式。
配置
在包含資料夾中,存在一個名為 config.h 的設定檔。該檔案包含LoRaMessenger運行所需的所有設定。
洛拉配置:
- LORABAND:LoRa 晶片頻率。頻率取決於您的主機板和當地允許的頻率,請確保僅使用您所在國家/地區允許的頻率,更多資訊請參閱此處。
可能的值:433E6、866E6、915E6。 - SPREADINGFACTOR:LoRa 擴頻因子。使用高於 7 的值時要小心,因為LoRaMessenger尊重傳輸佔空比。高值會大幅減慢傳輸之間的等待時間,並可能影響正確操作,可能需要進行其他調整,例如防衝突時間。可能的值:7 - 12。
- TXDBM:LoRa晶片的傳輸功率。
可能的值:1 - 20 - LORADUTY:傳輸佔空比。請務必僅使用您所在國家/地區允許的值。可能的值:1 - 99。
- NETID: LoRaMessenger網路 ID。這允許創建多個獨立網路。
可能的值:0 - 255。
L1配置:
- L1BUFFER:傳輸資料包佇列。如果使用大型節點網路或使用高擴頻因子,則增加。
- TTL:資料包生存時間。設定封包在過期之前可以進行的最大跳數。
可能的值:1(僅直接訊息,無中繼),>1。 - BROADCASTADDR:廣播地址號碼。
三層配置:
- NODENUMBER:本地節點號。每個節點需要不同的節點號!您可以將其視為相當於常規網路的 IP 位址。
可能的值:1 - 255。 - MAXNODES:網路中預期的最大節點數。
- ANNOUNCEMINS:節點存在公告和名稱更新。需要此訊息來通知所有節點所有其他節點的存在。如果使用靜態節點、高擴散因子或大型網絡,則可以增加間隔以防止垃圾郵件。
- INACTIVEMINS:節點被視為離線所需的不活動時間。注意至少使用 ANNOUNCEMINS 值的 2-3 倍,如果接收效果不佳,則使用較大的值。
- INACTIVESECONDSREMOVECHECK:檢查離線節點刪除的時間間隔。
訊息配置:
- SHOWNMESSAGES:要在 Web 介面上顯示的訊息數。
- KEEPNMESSAGES:要保留在記憶體中的訊息數。
顯示配置:
- DISPLAYSTBYSECS:顯示器關閉後的秒數。
網路配置:
- WIFI 已啟用:Wi-Fi 已啟用。這可以用於減少部署節點僅用於中繼訊息的情況下所使用的功率。
- NODENAMEOVERRIDEEN:節點名稱覆蓋啟用。用於將預設節點名稱(節點 [編號])覆寫為 NODENAMEOVERRIDE 中指定的字串。
- NODENAMEOVERRIDE:Nome 名稱覆蓋。這可用於設定節點名稱,而無需在 Web 介面上修改它。在設定僅中繼節點時很有用。
- WIFISSID:Wi-Fi 網路名稱前綴( LoRaMessenger [數位])
- DNSPORT:DNS 連接埠。
引腳排列:
- SCK:SPI時脈。
- 味噌:SPI味噌。
- MOSI:SPI MOSI。
- SS:SPI 從機選擇。
- RST:LoRa 晶片重設。
- DI0:LoRa 接收回呼。
- I2CSCL:I2C 時鐘。
- I2CSDA:I2C 資料。
- LCDRESET:液晶屏復位。
如果使用其他板,可能需要編輯引腳定義(引腳定義基於 TTGO LoRa32 V2)。
未來的改進/修復
未來計劃的其他功能包括:
- 訊息加密,從右側開始,所有訊息均未加密發送。
- 自動訊息刷新。
- 路由演算法的測試和改進。
執照
麻省理工學院許可證。