LoRa Sender 傳送端程式與封包建構解析

Datalogger IoT 實戰教學:
LoRa_Sender 傳送端程式與封包建構解析

掌握資料打包邏輯,成功發送遠距通訊的第一聲招呼!

在 LoRa 的點對點通訊 (P2P) 架構中,我們需要一台設備作為「傳送端 (Sender)」,負責將感測數據或訊息打包成無線電波向外廣播。今天我們將解析 Datalogger 官方提供的 LoRa_Sender_Counter 範例,帶您一步步看懂如何設定核心參數,並將計數器數值發送出去!

💻 第一部分:LoRaSender 範例程式碼

請將第一套 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

int counter = 0; // 建立計數器變數

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() {
  Serial.print("正在發送計數器: ");
  Serial.println(counter);

  // === 封包發送三部曲 ===
  LoRa.beginPacket();      // 步驟一:開啟封包
  LoRa.print("Counter: "); // 步驟二:寫入字串
  LoRa.print(counter);     // 步驟二:寫入變數
  LoRa.endPacket();        // 步驟三:結束並送出封包

  counter++;   // 計數器遞增
  delay(1000); // 延遲一秒鐘後再次發送
}

🔍 第二部分:程式碼與關鍵參數完全解析

1. 硬體腳位定義 setPins()

為了讓 Datalogger 主板能透過 SPI 介面正確與疊加在上面的 LoRa 擴展板溝通,我們必須明確定義控制腳位。在 Datalogger 的硬體設計中,NSS (片選) 為 10,RST (重置) 為 9,DIO0 (中斷) 為 5。

2. 通訊頻率與密語 (Frequency & Sync Word)

要讓發送端與接收端成功連線,有兩個參數必須完全一致

  • 通訊頻率 LoRa.begin(470E6)決定無線電波的物理頻率(單位為 Hz)。程式中設定為 470MHz (470E6),請將此處與接收端一同修改為 470E6
  • 同步訊號字 setSyncWord(0x13)這是資料封包的「通關密語」,範圍從 0x000xFF。接收端只會接收 Sync Word 相同的封包,可用來區隔不同的設備網路並抵抗干擾。
傳送端 Sender Freq: 470 MHz Sync: 0x13 無線廣播封包 接收端 Receiver 必須: 470 MHz 必須: 0x13

▲ 圖 1:傳送端向外廣播,雙方必須在「通訊頻率」與「同步訊號字 (Sync Word)」完全匹配下才能建立通訊。

3. 資料封包建構三部曲

loop() 迴圈中,發送 LoRa 封包的語法非常直覺,就像把物品裝進紙箱寄出一樣,遵循標準的三個步驟:

  1. LoRa.beginPacket()準備開啟一個新的無線電封包。這相當於「打開紙箱」。
  2. LoRa.print()將要傳送的資料寫入緩衝區。你可以連續呼叫多次 print(),將文字或變數依序塞入封包中(例如寫入 "Counter: " 字串,再寫入 counter 變數)。這相當於「將物品放進紙箱」。
  3. LoRa.endPacket()結束資料寫入,並觸發底層硬體將無線電波發送出去。這相當於「封箱並交給郵差寄出」。
1. 開啟封包 beginPacket() 2. 寫入資料 (Payload) print("Counter: ") print(counter) 3. 結束並送出 endPacket()

▲ 圖 2:LoRa 發送資料的標準三部曲,就像打包紙箱寄送一樣直覺簡單。

💡 執行測試小叮嚀:
將程式燒錄完畢後,開啟 Arduino IDE 的「序列埠監控窗」,您將會看到每隔一秒鐘印出 正在發送計數器: X,代表設備已開始將無線電波向外輻射!
此時,只要將另一台燒錄好 LoRa_Receiver 程式的 Datalogger 上電,就能成功攔截並印出這些遠端傳來的計數器數值囉!