Datalogger IoT 實戰教學:
LoRaReceiver 接收端程式與關鍵參數解析
掌握接收端解碼邏輯,完成點對點通訊的最後一塊拼圖
在 LoRa 的點對點通訊(P2P)中,有了持續廣播數據的「發送端 (Sender)」後,我們需要另一台設備扮演「接收端 (Receiver)」來攔截並解碼這些空中飄送的訊號。今天我們將以 Datalogger IoT 搭配 LoRa 擴展板,帶您深入解析 LoRaReceiver 範例程式的核心邏輯與必備參數!
💻 第一部分:LoRaReceiver 範例程式碼
以下是完整的接收端範例程式,請將第二套 Datalogger 開發板接上 UPC-01 上傳工具,並透過 Arduino IDE 進行燒錄:
#include <SPI.h>
#include <LoRa.h>
// LoRa 引腳定義 (Datalogger 擴展板對應腳位)
#define LORA_NSS 10
#define LORA_RST 9
#define LORA_DIO0 5
void setup() {
Serial.begin(115200);
while (!Serial);
// 1. 初始化 LoRa 引腳
LoRa.setPins(LORA_NSS, LORA_RST, LORA_DIO0);
// 2. 啟動 LoRa 模組並設定通訊頻率 (此處設定為 470MHz)
if (!LoRa.begin(470E6)) {
Serial.println("LoRa 初始化失敗!");
while (1);
}
// 3. 設定同步訊號字 (Sync Word)
LoRa.setSyncWord(0x13);
Serial.println("LoRa 接收端已啟動");
}
void loop() {
// 檢查是否有接收到的數據包
int packetSize = LoRa.parsePacket();
if (packetSize) {
// 讀取數據包內容並轉換為字串
while (LoRa.available()) {
String message = LoRa.readString();
Serial.print("收到訊息: ");
Serial.println(message);
}
}
}
🔍 第二部分:程式碼與關鍵參數完全解析
1. 頻率設定必須一致 LoRa.begin(470E6)
在 LoRa 通訊中,發送端與接收端的頻率必須完全相同才能成功溝通。在範例中我們使用了 470E6 (即 470MHz)。如果您的發送端是設定為 433MHz,請務必將此處改為 433E6!
2. 網路過濾機制:同步訊號字 setSyncWord(0x13)
Sync Word(同步字)是 LoRa 資料封包前導碼之後的一個特定位元序列。它就像是通訊的「通關密語」。預設值為 0x12,但在本範例中被改為 0x13。
- 抗干擾與網路分隔:接收端只會解析 Sync Word 符合的封包。若空中有其他 Sync Word 為 0x12 或 0x34 的設備在發送訊號,我們的接收端會直接將其忽略,有效避免訊號混淆。
▲ 圖 1:Sync Word 過濾機制。接收端只會解碼通關密語 (0x13) 相同的封包,將雜訊與其他網路阻擋在外。
3. 封包解析邏輯 parsePacket() 與 readString()
在 loop() 迴圈中,接收端必須不斷「輪詢」是否有新的訊號抵達:
LoRa.parsePacket():檢查是否有合法的封包進入。如果有,會回傳該封包的位元組大小 (大於 0)。LoRa.available():當確認有封包後,透過這個指令確認緩衝區內還有多少資料可以讀取。LoRa.readString():這是一個非常方便的函式,它會直接將接收到的位元組資料轉換成人類可讀的字串 (String) 並印出。
▲ 圖 2:接收端資料讀取邏輯。透過 parsePacket 不斷輪詢,抓到封包後立刻轉換字串顯示。
💡 進階優化小叮嚀:
將程式燒錄完畢後,開啟「序列埠監控窗」,您就能看到來自發送端的收到訊息: Counter: X!
在實務應用中,我們還會加入讀取 RSSI (訊號強度) 的指令(例如LoRa.packetRssi()),藉由觀察 RSSI 數值的變化,來評估設備在不同距離與環境下的訊號衰減狀況!