สร้าง LoRa Receiver ด้วย Pico 2 รับข้อมูลไกลราว 1.5 km
ถ้าอุปกรณ์ตรวจจับอยู่กลางพื้นที่ห่างไกล ไม่มี Wi-Fi และยังต้องส่งข้อมูลกลับมายัง Base Station จะทำอย่างไร? โปรเจกต์ LoRa Receiver ของ Gavindu ใช้ Raspberry Pi Pico 2 จับคู่กับ SX1278 เพื่อสร้างเครื่องรับข้อมูลแบบพกพา พร้อมจอสี แบตเตอรี่ Custom PCB และ Enclosure ของตัวเอง
Receiver ตัวนี้ถูกสร้างขึ้นเพื่อทำงานร่วมกับโปรเจกต์ WildLife AI โดยฝั่ง Remote Monitoring Unit ส่ง Packet ผ่าน LoRa แล้วเครื่องรับจะนำข้อมูลมา Process และแสดงผลบนหน้าจอ รวมถึง Parse ข้อมูลตำแหน่งในรูปแบบ LAT / LON จาก Message ที่รับเข้ามา
- ใช้ Raspberry Pi Pico 2 เป็น Controller หลักของ Receiver
- ใช้ SX1278 Ai-Thinker เป็น LoRa Transceiver
- Firmware ตั้ง LoRa ที่ 433 MHz, SF7, Bandwidth 125 kHz และ Coding Rate 4/5
- เปิด CRC และทำงานใน Continuous Receive Mode
- ใช้จอ IPS ขนาด 1.14 นิ้ว ความละเอียด 135×240 พร้อม ST7789 Driver ใน Firmware
- ใช้แบตเตอรี่ 3.7 V 1000 mAh โดยผู้สร้างรายงาน Runtime ราว 4–5 ชั่วโมงเมื่อเปิดจอตลอด
- ผู้สร้างรายงานระยะสื่อสารราว 1.5 km ด้วยเสาอากาศพื้นฐาน
- มีทั้ง Source Code, KiCad Project, Schematic และไฟล์ STEP ของ Enclosure ให้ศึกษา
LoRa Receiver ตัวนี้คืออะไร?
Project นี้เป็น Receiver หรือ Base Station สำหรับระบบ WildLife AI โดยฝั่ง Remote Unit ทำหน้าที่เก็บข้อมูลภาคสนาม แล้วส่ง Packet แบบไร้สายผ่าน LoRa กลับมายังเครื่องรับ
GitHub ของผู้สร้างอธิบายว่า Receiver รุ่นปัจจุบันพัฒนาต่อจาก Prototype แบบ Breadboard มาเป็น Custom PCB เพื่อรวม Interface สำหรับ Pico 2, LoRa Module, Display และ Battery ไว้ใน Board เดียว
Hardware ข้างในมีอะไรบ้าง?
| Hardware | หน้าที่ | ข้อมูลจาก Source |
|---|---|---|
| Raspberry Pi Pico 2 | Controller หลัก ประมวลผล Packet และควบคุม Display | ใช้ MCU ตระกูล RP2350 |
| SX1278 Ai-Thinker | รับข้อมูลผ่าน LoRa | Firmware ใช้ที่ 433 MHz |
| 1.14" IPS Display | แสดงสถานะ Message และ Location | 135×240, ใช้ ST7789 ใน Firmware |
| 3.7 V 1000 mAh Battery | จ่ายไฟให้ Receiver แบบพกพา | ผู้สร้างระบุ Runtime ราว 4–5 ชั่วโมงเมื่อเปิด Display ตลอด |
| Custom PCB | รวม Interface ของ Pico 2, LoRa, Display และ Power | ออกแบบด้วย KiCad ตาม GitHub Repository |
| Enclosure | Housing สำหรับชุด Receiver | มีไฟล์ STEP ให้ดาวน์โหลด |
Architecture ของระบบ
Flow ของ Receiver ค่อนข้างตรงไปตรงมา: Remote Unit ส่งข้อมูลออกทาง LoRa แล้ว SX1278 ฝั่ง Base Station รับ Packet ก่อนส่งต่อให้ Pico 2 จัดการ
เก็บข้อมูลจากพื้นที่ภาคสนาม
ส่ง Packet แบบไร้สายมายัง Receiver
รับ LoRa Packet และเก็บ Payload ใน FIFO
อ่าน Packet ตรวจ CRC และ Process Message
ตรวจหา LAT: และ LON: ใน Payload
แสดง Alert, Location และจำนวน Packet ที่ได้รับ
SX1278 ถูกตั้งค่าอย่างไร?
จุดที่น่าสนใจของ Firmware คือไม่ได้ใช้ LoRa Library ระดับสูง แต่เขียนฟังก์ชันสำหรับอ่านและเขียน Register ของ SX1278 ผ่าน SPI โดยตรง
| Setting | ค่าที่ Firmware ใช้ |
|---|---|
| Frequency | 433 MHz |
| Bandwidth | 125 kHz |
| Spreading Factor | SF7 |
| Coding Rate | 4/5 ตาม Comment ใน Source Code |
| CRC | เปิดใช้งาน |
| Preamble | 8 |
| Sync Word | 0x12 |
| Receive Mode | Continuous Receive |
setFrequency(433000000);
writeRegister(REG_MODEM_CONFIG1, 0x72); // BW=125kHz, CR=4/5
writeRegister(REG_MODEM_CONFIG2, 0x74); // SF7 + CRC
writeRegister(REG_MODEM_CONFIG3, 0x04);
writeRegister(REG_PREAMBLE_MSB, 0x00);
writeRegister(REG_PREAMBLE_LSB, 0x08);
writeRegister(REG_SYNC_WORD, 0x12);
writeRegister(REG_IRQ_FLAGS, 0xFF);
writeRegister(
REG_OP_MODE,
LONG_RANGE_MODE | MODE_RX_CONTINUOUS
);
Pinout ระหว่าง Pico 2, LoRa และ Display
เนื่องจาก Source Code ระบุ GPIO ไว้โดยตรง เราสามารถสรุป Pin Mapping ของ Project นี้ได้โดยไม่ต้องเดาจากภาพ
SX1278 LoRa Module
| LoRa Signal | GPIO บน Pico 2 |
|---|---|
| SCK | GPIO2 |
| MOSI | GPIO3 |
| MISO | GPIO4 |
| CS | GPIO5 |
| RST | GPIO6 |
| DIO0 | GPIO7 |
ST7789 Display
| Display Signal | GPIO บน Pico 2 |
|---|---|
| SCK | GPIO10 |
| MOSI | GPIO11 |
| CS | GPIO17 |
| DC | GPIO20 |
| RST | GPIO21 |
| Backlight | GPIO22 |
เมื่อ Packet เข้ามา Firmware ทำอะไร?
Firmware อ่าน IRQ Flag ของ SX1278 ก่อน ถ้ายังไม่มี RX Done ก็ยังไม่ทำอะไร แต่เมื่อมี Packet เข้ามาแล้ว จะตรวจ CRC ก่อนอ่าน Payload จาก FIFO
ตรวจว่า SX1278 รับ Packet เสร็จแล้วหรือยัง
ถ้า Packet เสีย จะแสดง CRC ERROR
อ่านจำนวน Byte และดึง Message ออกจาก SX1278
ตรวจหา Field LAT: และ LON:
แสดง Alert และ Location บนจอ
การ Parse Location
Firmware ตรวจหา Text LAT: และ LON: ภายใน Message แล้วตัดค่าที่อยู่หลัง Field เหล่านั้นออกมาแสดงบนหน้าจอ
int latIndex = message.indexOf("LAT:");
int lonIndex = message.indexOf("LON:");
if (latIndex != -1 && lonIndex != -1) {
int latStart = latIndex + 4;
int latEnd = message.indexOf(' ', latStart);
if (latEnd == -1)
latEnd = message.length();
latitude = message.substring(latStart, latEnd);
latitude.trim();
int lonStart = lonIndex + 4;
int lonEnd = message.indexOf(' ', lonStart);
if (lonEnd == -1)
lonEnd = message.length();
longitude = message.substring(lonStart, lonEnd);
longitude.trim();
hasLocation = true;
}
Source ไม่ได้ระบุ Message Protocol ฉบับเต็ม ดังนั้นบทความนี้จะไม่สร้าง Field หรือ Packet Format อื่นเพิ่มจากสิ่งที่เห็นใน Firmware
Receiver แสดงอะไรบนจอ?
Firmware ใช้ Adafruit GFX และ Adafruit ST7789 เพื่อสร้าง UI บนจอในแนวนอน 240×135
จาก Source Code หน้าจอสามารถแสดงข้อมูล เช่น:
- LORA RECEIVER
- สถานะรอ Message
- ALERT
- PERSON DETECTED
- Latitude
- Longitude
- GPS: NO FIX หากไม่มีข้อมูล Location
- จำนวน Packet ที่ได้รับ
- 433MHz / SF7 / BW125
- CRC ERROR เมื่อรับ Packet ที่ตรวจสอบไม่ผ่าน
ตรงนี้ทำให้เห็นว่า Receiver ถูกออกแบบให้ทำงานกับ Use Case ของ WildLife AI มากกว่าเป็น LoRa Terminal ทั่วไป
จาก Breadboard สู่ Custom PCB
GitHub README ระบุว่า Board รุ่นปัจจุบันถูกออกแบบมาแทน Receiver Prototype แบบ Breadboard เพื่อให้ชุดรับข้อมูลมีโครงสร้างกระชับและมี Connection Point ที่ชัดเจนมากขึ้น
PCB มี Interface สำหรับ:
- Raspberry Pi Pico 2
- LoRa Transceiver
- Display
- Battery
- Onboard Power Switch
- External Module Headers
Repository ยังเปิดไฟล์ KiCad ต้นฉบับ ได้แก่ Project, Schematic และ PCB Layout ทำให้ผู้ที่ต้องการศึกษาหรือพัฒนาต่อสามารถเปิด Board ใน KiCad ได้โดยตรง
ระยะราว 1.5 km ต้องเข้าใจอย่างไร?
ผู้สร้างระบุใน Hackster ว่า Receiver สามารถสื่อสารได้ประมาณ 1.5 km ด้วย Basic Antenna และระยะสามารถเพิ่มขึ้นได้อีกเมื่อใช้เสาอากาศที่เหมาะสมกว่า
แต่ตัวเลขนี้ไม่ควรถูกตีความว่า SX1278 ทุกระบบจะได้ระยะ 1.5 km เท่ากัน เพราะ Source ไม่ได้ให้รายละเอียดเงื่อนไขการทดสอบครบถ้วน
แบตเตอรี่ 1000 mAh ใช้ได้ 4–5 ชั่วโมงจริงไหม?
Main Source ระบุว่าอุปกรณ์ใช้แบตเตอรี่ 3.7 V 1000 mAh และให้ Runtime ราว 4–5 ชั่วโมง เมื่อเปิด Display ตลอดเวลา
อย่างไรก็ตาม Source ไม่ได้ให้ Current Measurement, Display Brightness, Regulator Efficiency หรือ Discharge Curve ของ Battery ดังนั้นจึงไม่สามารถคำนวณย้อนกลับไปเป็น Power Consumption ที่แม่นยำได้
Enclosure มีไฟล์ STEP ให้ดาวน์โหลด
Hackster ระบุ Autodesk Fusion เป็นหนึ่งใน Software ที่ใช้ และ Project มีไฟล์ Enclosure ในรูปแบบ STEP สำหรับศึกษาหรือพัฒนาต่อ
จุดสำคัญคือ Source ให้ไฟล์ CAD จริง แต่ไม่ได้ระบุ 3D Printing Settings เช่น Layer Height, Infill, Nozzle, Support, Material หรือ Temperature
Source Code, Schematic และไฟล์ Project
Project นี้มี Resource ค่อนข้างครบสำหรับคนที่อยากศึกษา Architecture ต่อ ทั้ง Firmware, PCB Source, Schematic และ Enclosure
Maker ได้อะไรจาก Project นี้?
1. LoRa ไม่จำเป็นต้องเริ่มจาก Library สำเร็จรูปเสมอไป
Firmware ตัวนี้ควบคุม SX1278 ผ่าน Register โดยตรง ทำให้เห็นชัดว่าการตั้ง Frequency, Modem Config, IRQ และ FIFO เกิดขึ้นอย่างไรในระดับ Hardware
2. ใช้ SPI มากกว่าหนึ่งชุดช่วยแยก Peripheral ได้
LoRa และ Display มี Traffic ของตัวเอง Project จึงแยก Interface ของทั้งสองส่วนออกจากกัน แทนการรวมทุกอุปกรณ์ไว้บน Bus เดียว
3. Packet ที่รับมาไม่มีประโยชน์จนกว่าจะถูกแปลงเป็นข้อมูลที่คนใช้ได้
Firmware ไม่ได้จบที่การพิมพ์ Payload ลง Serial Monitor แต่ Parse Location แล้วสร้าง UI บน Display เพื่อให้เครื่องรับใช้เป็นอุปกรณ์ภาคสนามได้จริงมากขึ้น
4. Breadboard เป็นจุดเริ่ม ไม่จำเป็นต้องเป็นจุดจบ
GitHub แสดง Journey จาก Prototype ไปสู่ Custom PCB ซึ่งลดความซับซ้อนของ Wiring และทำให้ Device รวมเป็นชิ้นงานเดียวมากขึ้น
5. Range ต้องมองเป็น System Problem
การพูดว่า LoRa “ได้กี่กิโลเมตร” จาก Module เพียงตัวเดียวไม่พอ เพราะเสาอากาศ สภาพพื้นที่ RF Configuration และสภาพแวดล้อมทั้งหมดมีผลต่อ Link จริง
FAQ: คำถามที่พบบ่อย
1. LoRa Receiver นี้ใช้บอร์ดอะไร?
ใช้ Raspberry Pi Pico 2 เป็น Controller หลัก โดย Board ใช้ MCU ตระกูล RP2350
2. ใช้ LoRa Module รุ่นไหน?
Main Source ระบุว่าใช้ SX1278 Ai-Thinker
3. Firmware ใช้ Frequency เท่าไร?
Source Code ตั้ง Frequency ไว้ที่ 433 MHz
4. ใช้ Spreading Factor เท่าไร?
Firmware ใช้ SF7
5. Bandwidth เท่าไร?
Source Code ระบุ Bandwidth 125 kHz
6. Receiver ใช้ LoRa Library หรือไม่?
Firmware ที่เผยแพร่ควบคุม SX1278 ผ่าน SPI Register โดยตรง และไม่ได้ใช้ LoRa Library ระดับสูงใน Code.ino ที่ตรวจสอบ
7. จอเป็นรุ่นอะไร?
Main Source ระบุจอ IPS 1.14 นิ้ว ความละเอียด 135×240 และ Firmware ใช้ Adafruit ST7789 Driver
8. Receiver รับข้อมูล Location ได้อย่างไร?
Firmware ตรวจหา Text LAT: และ LON: ภายใน Payload แล้วดึงค่าที่ตามหลัง Field เหล่านั้นมาแสดง
9. รับได้ไกล 1.5 km จริงหรือไม่?
ผู้สร้างรายงานระยะประมาณ 1.5 km ด้วย Basic Antenna แต่ Source ไม่ได้ให้ Test Condition ครบ จึงไม่ควรใช้เป็น Guaranteed Range ของ SX1278 ทุกระบบ
10. ใช้แบตเตอรี่อะไร?
Main Source ระบุแบตเตอรี่ 3.7 V 1000 mAh
11. Battery Runtime เท่าไร?
ผู้สร้างรายงานประมาณ 4–5 ชั่วโมงเมื่อเปิด Display ตลอด แต่ไม่ได้ให้ข้อมูล Current Measurement หรือ Discharge Test แบบละเอียด
12. มี PCB Source หรือไม่?
มี Repository ให้ไฟล์ KiCad Project, Schematic และ PCB Layout สำหรับศึกษาหรือพัฒนาต่อ
13. มีไฟล์ Enclosure หรือไม่?
มีไฟล์ STEP ของ Tracker Box ให้ดาวน์โหลด แต่ Source ไม่ได้ระบุ Print Settings
14. ใช้ Arduino IDE ได้หรือไม่?
Hackster ระบุ Arduino IDE เป็น Software ที่ใช้ใน Project และ Firmware ถูกเผยแพร่เป็นไฟล์ .ino
15. 433 MHz ใช้ได้ทุกประเทศหรือไม่?
Source ไม่ได้ระบุข้อกำหนด RF ของแต่ละประเทศ Frequency และเงื่อนไขการส่งสัญญาณควรตรวจสอบตามกฎของพื้นที่ใช้งานจริง
16. Project นี้ใช้ทำอะไรใน WildLife AI?
GitHub ระบุว่า Board ทำหน้าที่เป็น Receiver / Base Station สำหรับรับ Packet ที่ส่งมาจาก Remote Wildlife Monitoring Device
References / แหล่งข้อมูลต้นฉบับ
จาก LoRa Module สู่ Receiver ที่ใช้งานเป็น Device จริง
Project นี้เป็นตัวอย่างที่ดีของการนำ Raspberry Pi Pico, Wireless Module, Display และ Custom Hardware มารวมกันจนกลายเป็นระบบรับข้อมูลภาคสนามแบบพกพา
หากกำลังทำ Project ด้วย Raspberry Pi Pico, LoRa, Development Board, Display หรือ Module ต่าง ๆ สามารถสอบถามทีม Globalbyte เรื่องอุปกรณ์ที่เหมาะกับ Project ได้ รวมถึงส่งไฟล์ Enclosure เพื่อประเมินงาน Prototype / 3D Printing