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):這是資料封包的「通關密語」,範圍從0x00到0xFF。接收端只會接收 Sync Word 相同的封包,可用來區隔不同的設備網路並抵抗干擾。
▲ 圖 1:傳送端向外廣播,雙方必須在「通訊頻率」與「同步訊號字 (Sync Word)」完全匹配下才能建立通訊。
3. 資料封包建構三部曲
在 loop() 迴圈中,發送 LoRa 封包的語法非常直覺,就像把物品裝進紙箱寄出一樣,遵循標準的三個步驟:
LoRa.beginPacket():準備開啟一個新的無線電封包。這相當於「打開紙箱」。LoRa.print():將要傳送的資料寫入緩衝區。你可以連續呼叫多次print(),將文字或變數依序塞入封包中(例如寫入 "Counter: " 字串,再寫入 counter 變數)。這相當於「將物品放進紙箱」。LoRa.endPacket():結束資料寫入,並觸發底層硬體將無線電波發送出去。這相當於「封箱並交給郵差寄出」。
▲ 圖 2:LoRa 發送資料的標準三部曲,就像打包紙箱寄送一樣直覺簡單。
💡 執行測試小叮嚀:
將程式燒錄完畢後,開啟 Arduino IDE 的「序列埠監控窗」,您將會看到每隔一秒鐘印出正在發送計數器: X,代表設備已開始將無線電波向外輻射!
此時,只要將另一台燒錄好LoRa_Receiver程式的 Datalogger 上電,就能成功攔截並印出這些遠端傳來的計數器數值囉!