LoRaReceiver 接收端程式與關鍵參數解析

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 的設備在發送訊號,我們的接收端會直接將其忽略,有效避免訊號混淆。
接收端 Receiver 設定: 0x13 發送端 A (我們的) Sync: 0x13 發送端 B (別人的) Sync: 0x12

▲ 圖 1:Sync Word 過濾機制。接收端只會解碼通關密語 (0x13) 相同的封包,將雜訊與其他網路阻擋在外。

3. 封包解析邏輯 parsePacket()readString()

loop() 迴圈中,接收端必須不斷「輪詢」是否有新的訊號抵達:

  • LoRa.parsePacket():檢查是否有合法的封包進入。如果有,會回傳該封包的位元組大小 (大於 0)。
  • LoRa.available():當確認有封包後,透過這個指令確認緩衝區內還有多少資料可以讀取。
  • LoRa.readString():這是一個非常方便的函式,它會直接將接收到的位元組資料轉換成人類可讀的字串 (String) 並印出。
主迴圈 loop() parsePacket() 有收到封包嗎? 否 (Size=0) 是 (Size > 0) while (available()) 執行 readString() 印出

▲ 圖 2:接收端資料讀取邏輯。透過 parsePacket 不斷輪詢,抓到封包後立刻轉換字串顯示。

💡 進階優化小叮嚀:
將程式燒錄完畢後,開啟「序列埠監控窗」,您就能看到來自發送端的 收到訊息: Counter: X
在實務應用中,我們還會加入讀取 RSSI (訊號強度) 的指令(例如 LoRa.packetRssi()),藉由觀察 RSSI 數值的變化,來評估設備在不同距離與環境下的訊號衰減狀況!