ระดับกลาง
สร้าง LoRa Sensor Node
ไร้สายIoTเซ็นเซอร์
สื่อสารกับเซ็นเซอร์ที่อยู่ห่างออกไป 1 ไมล์ โดยไม่ต้องใช้เราเตอร์, ซิมการ์ด และไม่มีค่าบริการรายเดือน -- ระบบไร้สายระยะไกลที่ใช้งานได้จริง ด้วยบอร์ดเพียงตัวเดียว
รวมชิ้นส่วนจริง 4 รายการ
ราคารวมชุดนี้: 1,521.00 ฿
ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน
สิ่งที่คุณต้องใช้
เป้าหมายของโครงการ
โครงการนี้ทำให้คุณมีวิทยุระยะไกลของแท้: โหนด LoRa ที่สามารถส่งและรับข้อมูลได้ในระยะทางหลายกิโลเมตร แทนที่จะเป็นเมตร โดยไม่ต้องพึ่งพา Wi-Fi, ซิมมือถือ หรือค่าบริการข้อมูลรายเดือน โปรดทำความเข้าใจขอบเขตให้ชัดเจนตั้งแต่แรก: ชุดนี้เป็นโหนดเดียว การเชื่อมโยง LoRa ต้องการปลายทางสองด้านเพื่อแสดงการสื่อสารจริง — ไม่ว่าจะเป็นบอร์ด LoRa ตัวที่สอง (LILYGO TTGO LoRa32 ตัวที่สอง หรือวิทยุ LoRa ที่เข้ากันได้) หรือเกตเวย์ LoRaWAN ที่ปลายทางรับ การสร้างนี้จะทำให้โหนดที่ทำงานได้อย่างสมบูรณ์ สามารถส่งและรับได้พร้อมสำหรับการพูดคุย การจับคู่กับโหนดตัวที่สองคือสิ่งที่ทำให้การเชื่อมโยงสมบูรณ์
สิ่งที่คอนโทรลเลอร์ทำ
LILYGO TTGO TZGO LoRa32 รวมไมโครคอนโทรลเลอร์ ESP32, วิทยุ LoRa ตระกูล SX127x และจอแสดงผล OLED ขนาดเล็กบนบอร์ดเดียว ESP32 รันโปรแกรมของคุณ ส่งข้อมูลไปยังวิทยุ LoRa เพื่อส่ง และอ่านข้อมูลที่วิทยุได้รับกลับมา — ในขณะที่ OLED ให้มุมมองสด ไม่ต้องใช้คอมพิวเตอร์ ว่าวิทยุกำลังทำอะไรอยู่
สิ่งที่วิทยุ LoRa ทำ
ต่างจาก Wi-Fi หรือ Bluetooth วิทยุ LoRa ในตัวใช้การมอดูเลตแบบ Chirp Spread Spectrum (CSS) — มันกระจายข้อมูลแต่ละบิตไปทั่วความถี่ chirp ที่กว้างและกวาดช้าๆ แทนที่จะเป็นการส่งข้อมูลสั้นๆ ที่มีความหนาแน่นสูง การแลกเปลี่ยนนี้คือสิ่งที่ทำให้ LoRa มีข้อได้เปรียบด้านระยะทาง: มันยอมเสียแบนด์วิดท์ (LoRa ช้า โดยทั่วไปต่ำกว่าไม่กี่กิโลบิตต่อวินาที) เพื่อแลกกับการเชื่อมโยงวิทยุที่ยังคงสามารถถอดรหัสได้ที่ระดับพลังงานและระยะทางที่ Wi-Fi หยุดทำงานไปนานแล้ว
สิ่งที่จอแสดงผล OLED ทำ
จอแสดงผลในตัวมีไว้เพื่อให้คุณเห็นสถานะของวิทยุโดยไม่ต้องเสียบ Serial Monitor — สถานะการเชื่อมต่อ, แพ็กเก็ตล่าสุดที่ส่งหรือรับ, ความแรงของสัญญาณ (RSSI) และอัตราส่วนสัญญาณต่อสัญญาณรบกวน (SNR) ล้วนมีประโยชน์ที่จะแสดงโดยตรงบนบอร์ดเอง โดยเฉพาะเมื่อคุณนำโหนดออกจากโต๊ะทำงานเพื่อทดสอบระยะทางในโลกจริง
แถบความถี่และข้อบังคับระดับภูมิภาค
วิทยุ LoRa ผลิตขึ้นสำหรับแถบความถี่เฉพาะ – โดยทั่วไปคือ 433MHz, 868MHz หรือ 915MHz ขึ้นอยู่กับภูมิภาค – และการเลือกนั้นไม่ใช่การสุ่ม: มันเป็นไปตามข้อบังคับสเปกตรัมวิทยุของแต่ละภูมิภาคสำหรับอุปกรณ์พลังงานต่ำที่ไม่มีใบอนุญาต ยืนยันว่าบอร์ดรุ่นเฉพาะของคุณครอบคลุมแถบความถี่ใด และตรวจสอบให้แน่ใจว่าตรงกับกฎของภูมิภาคของคุณ สิ่งนี้มีความสำคัญอีกครั้งในขณะที่คุณเพิ่มโหนดที่สอง: ปลายทั้งสองของการเชื่อมโยงต้องทำงานบนแถบความถี่เดียวกันจึงจะสามารถพูดคุยกันได้
แนวคิดซอฟต์แวร์และไลบรารี
ความสามารถในการส่ง/รับข้อมูลดิบของวิทยุ LoRa เป็นเพียง Physical Layer — มันเคลื่อนย้ายไบต์ผ่านอากาศเท่านั้น ไม่มีอะไรมากไปกว่านั้น หากต้องการสร้างสิ่งที่มีประโยชน์ คุณยังคงต้องมีโปรโตคอลข้อมูลอยู่ด้านบน: อาจจะง่ายๆ อย่างรูปแบบแพ็กเก็ตที่กำหนดเองพร้อมรหัสผู้ส่งและเพย์โหลด หรือเฟรมเวิร์กเต็มรูปแบบอย่าง LoRaWAN หากคุณต้องการการระบุที่อยู่ในตัว การรับรอง และ (สำหรับการตั้งค่าที่ใช้เกตเวย์) การรวมเข้ากับโครงสร้างพื้นฐานเครือข่าย LoRaWAN ที่มีอยู่ ไลบรารีของชุมชนสำหรับตระกูลวิทยุ SX127x จะจัดการการกำหนดค่าวิทยุระดับต่ำ โค้ดของคุณเองจะกำหนดความหมายของไบต์ที่คุณส่งและรับจริงๆ
การทดสอบและการแก้ไขปัญหา
- ไม่มีสัญญาณใดๆ ได้รับระหว่างสองโหนดเลย — ขั้นแรก ให้ยืนยันว่าบอร์ดทั้งสองถูกกำหนดค่าสำหรับแถบความถี่เดียวกัน โหนด 915MHz และโหนด 868MHz ไม่สามารถได้ยินกันได้ไม่ว่าทุกสิ่งทุกอย่างจะถูกเชื่อมต่อหรือเข้ารหัสได้ดีแค่ไหนก็ตาม
- ระยะทางดูน่าผิดหวังเมื่อทดสอบภายในอาคาร — นี่เป็นสิ่งที่คาดหวัง ไม่ใช่ข้อผิดพลาด ข้อได้เปรียบด้านระยะทางที่แท้จริงของ LoRa จะปรากฏขึ้นเมื่ออยู่กลางแจ้งโดยมีแนวสายตาที่ชัดเจน ผนัง พื้น และวัสดุก่อสร้างจะลดทอนสัญญาณอย่างมาก ดังนั้นอย่าตัดสินระยะทางจากการทดสอบภายในอาคารสั้นๆ
- แพ็กเก็ตมาไม่สม่ำเสมอหรือหายไปแบบสุ่ม — ตรวจสอบให้แน่ใจว่าขั้วต่อ SMA ของเสาอากาศเสียบแน่นดีแล้วบนบอร์ดทั้งสอง การเชื่อมต่อเสาอากาศที่ไม่แน่นหนาเป็นสาเหตุที่พบบ่อยที่สุดประการหนึ่งของประสิทธิภาพ LoRa ที่ไม่เสถียรในโลกจริง
- บอร์ดหนึ่งดูเหมือนจะส่งสัญญาณแต่ไม่เคยได้รับอะไรกลับมาเลย — ตรวจสอบว่าคุณมีโหนดที่สองทำงานและกำลังรับฟังอยู่จริง บอร์ดเดียวที่ไม่มีอะไรอีกฝั่งหนึ่งจะไม่แสดงแพ็กเก็ตที่เข้ามา โดยการออกแบบ
การอัปเกรดในอนาคต (ทางเลือก): การรวมเกตเวย์ LoRaWAN
เมื่อคุณมีสองโหนดที่พูดคุยกันโดยตรงด้วยรูปแบบแพ็กเก็ตที่กำหนดเองอย่างง่าย ขั้นตอนต่อไปคือการลงทะเบียนโหนดกับเกตเวย์ LoRaWAN และเซิร์ฟเวอร์เครือข่ายแทน ซึ่งจะเพิ่มการระบุที่อยู่ที่เป็นมาตรฐาน การเข้ารหัส และความสามารถในการส่งต่อข้อมูลเซ็นเซอร์ของคุณไปยังเครือข่ายที่กว้างขึ้น แทนที่จะส่งไปยังบอร์ดที่สองที่อยู่ข้างๆ
การเดินสาย
- การเชื่อมต่อทั้งหมดได้รับการเดินสายไว้ล่วงหน้าบนบอร์ด LILYGO TTGO LoRa32 V1 — ไม่ต้องใช้การเดินสายบนแผงวงจรสำหรับโครงการนี้ วิทยุ LoRa (SCK=GPIO5, MISO=GPIO19, MOSI=GPIO27, CS/SS=GPIO18, RST=GPIO14, DIO0=GPIO26) และ OLED (SDA=GPIO4, SCL=GPIO15, RST=GPIO16, ที่อยู่ I2C 0x3C) เป็นการเชื่อมต่อแบบตายตัวบนบอร์ด
- สาย USB-C → PC/แหล่งจ่ายไฟเท่านั้น สำหรับการเขียนโปรแกรมและการจ่ายไฟ
พินเอาต์นี้ใช้สำหรับบอร์ด TTGO LoRa32 V1 ทั่วไป — รุ่น V2/V2.1 จะต่อสาย OLED และโมดูล LoRa แตกต่างกันเล็กน้อย ดังนั้นให้ยืนยันกับเอกสารประกอบหรือสกรีนของบอร์ดเฉพาะของคุณ หากคุณมีรุ่นอื่น ก่อนที่จะสันนิษฐานว่าใช้พินเหล่านี้ คุณต้องตั้งค่า `LORA_FREQUENCY` ให้ตรงกับภูมิภาคของคุณและความถี่ที่โมดูล LoRa ทางกายภาพของคุณถูกสร้างขึ้นมา (เช่น 915MHz สหรัฐอเมริกา, 868MHz สหภาพยุโรป, 433MHz เอเชีย) — การส่งสัญญาณในย่านความถี่ที่ไม่ถูกต้องอาจผิดกฎหมายและแน่นอนว่าจะไม่ถูกรับฟังโดยฮาร์ดแวร์อื่น หากต้องการใช้ประโยชน์จากสิ่งนี้ ให้แฟลชบอร์ด LoRa32 ตัวที่สองด้วยโค้ดรับสัญญาณที่ตรงกัน (`LoRa.parsePacket()`/`LoRa.read()`) หรือจับคู่กับโครงการ "Solar-Powered Remote Sensor Node" ซึ่งเป็นคู่หูทางฝั่งรับสัญญาณตามธรรมชาติ
โค้ดเริ่มต้น
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// TTGO LoRa32 V1 onboard pinout - fixed on this board. V2/V2.1 boards wire
// these differently - check your specific board's docs/silkscreen if unsure.
#define LORA_SCK 5
#define LORA_MISO 19
#define LORA_MOSI 27
#define LORA_SS 18
#define LORA_RST 14
#define LORA_DIO0 26
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
#define OLED_ADDRESS 0x3C
// Set this to match your LoRa module's region/frequency band, e.g.
// 915E6 (US), 868E6 (EU), 433E6 (Asia) - the wrong band can be illegal
// in your region and won't talk to other hardware correctly.
#define LORA_FREQUENCY 915E6
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST);
uint32_t packetCounter = 0;
unsigned long lastSend = 0;
const unsigned long SEND_INTERVAL_MS = 5000;
void setup() {
Serial.begin(115200);
// The onboard OLED needs a manual reset pulse before Wire/display init
pinMode(OLED_RST, OUTPUT);
digitalWrite(OLED_RST, LOW);
delay(20);
digitalWrite(OLED_RST, HIGH);
Wire.begin(OLED_SDA, OLED_SCL);
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDRESS)) {
Serial.println("SSD1306 init failed");
while (true) delay(1000);
}
display.setTextColor(SSD1306_WHITE);
SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_SS);
LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0);
if (!LoRa.begin(LORA_FREQUENCY)) {
Serial.println("LoRa init failed - check wiring/frequency");
while (true) delay(1000);
}
Serial.println("LoRa Sensor Node ready");
}
void loop() {
if (millis() - lastSend < SEND_INTERVAL_MS) return;
lastSend = millis();
unsigned long uptime = millis() / 1000;
char packet[48];
snprintf(packet, sizeof(packet), "count=%lu,uptime=%lus", packetCounter, uptime);
LoRa.beginPacket();
LoRa.print(packet);
LoRa.endPacket();
Serial.printf("Sent packet #%lu, uptime %lus\n", packetCounter, uptime);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.println("LoRa TX");
display.setTextSize(1);
display.setCursor(0, 24);
display.printf("Packet: %lu\n", packetCounter);
display.printf("Uptime: %lus\n", uptime);
display.display();
packetCounter++;
}
ไม่แน่ใจขั้นตอนไหน?
ถามเรา