สร้าง 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 ที่รับเข้ามา

LoRa Receiver แบบพกพาที่ใช้ Raspberry Pi Pico 2 และจอสี
LoRa Receiver แบบพกพาที่ผู้สร้างพัฒนาขึ้นสำหรับรับข้อมูลจากระบบ WildLife AI ผ่าน LoRa
Key Takeaways
  • ใช้ 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 เดียว

จุดที่น่าสนใจ: นี่ไม่ใช่แค่ Demo ให้ SX1278 รับ Packet ได้ แต่เป็นการพัฒนาต่อไปจนกลายเป็น Portable Device ที่มี UI, Power System, PCB และ Enclosure ครบเป็นระบบ

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 ให้ดาวน์โหลด
ภาพเพิ่มเติมของอุปกรณ์ LoRa Receiver ในโปรเจกต์
ภาพเพิ่มเติมจากโปรเจกต์ LoRa Receiver ของผู้สร้าง ซึ่งพัฒนาขึ้นเป็นอุปกรณ์แบบพกพา

Architecture ของระบบ

Flow ของ Receiver ค่อนข้างตรงไปตรงมา: Remote Unit ส่งข้อมูลออกทาง LoRa แล้ว SX1278 ฝั่ง Base Station รับ Packet ก่อนส่งต่อให้ Pico 2 จัดการ

1. Remote Wildlife Monitor
เก็บข้อมูลจากพื้นที่ภาคสนาม
↓
2. LoRa Transmission
ส่ง Packet แบบไร้สายมายัง Receiver
↓
3. SX1278
รับ LoRa Packet และเก็บ Payload ใน FIFO
↓
4. Raspberry Pi Pico 2
อ่าน Packet ตรวจ CRC และ Process Message
↓
5. Message Parser
ตรวจหา LAT: และ LON: ใน Payload
↓
6. IPS Display
แสดง 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
SX1278 Configuration จาก Source Code
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
);
RF Warning: Firmware ของ Project ตั้งไว้ที่ 433 MHz แต่ Frequency, กำลังส่ง และเงื่อนไขการใช้งานคลื่นวิทยุแตกต่างกันตามประเทศและพื้นที่ ควรตรวจสอบข้อกำหนด RF ที่เกี่ยวข้องก่อนใช้งานระบบส่งสัญญาณจริง

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
อีกจุดที่น่าสนใจ: Firmware แยก LoRa และ Display ออกเป็นคนละ SPI Path โดย LoRa ใช้ SPI หลัก ส่วน Display ใช้ SPI1 ทำให้แต่ละอุปกรณ์มีชุดสัญญาณของตัวเอง

เมื่อ Packet เข้ามา Firmware ทำอะไร?

Firmware อ่าน IRQ Flag ของ SX1278 ก่อน ถ้ายังไม่มี RX Done ก็ยังไม่ทำอะไร แต่เมื่อมี Packet เข้ามาแล้ว จะตรวจ CRC ก่อนอ่าน Payload จาก FIFO

RX Done
ตรวจว่า SX1278 รับ Packet เสร็จแล้วหรือยัง
↓
CRC Check
ถ้า Packet เสีย จะแสดง CRC ERROR
↓
Read FIFO
อ่านจำนวน Byte และดึง Message ออกจาก SX1278
↓
Parse Message
ตรวจหา Field LAT: และ LON:
↓
Update Display
แสดง Alert และ Location บนจอ

การ Parse Location

Firmware ตรวจหา Text LAT: และ LON: ภายใน Message แล้วตัดค่าที่อยู่หลัง Field เหล่านั้นออกมาแสดงบนหน้าจอ

LAT / LON Parsing จาก Source Code
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 ได้โดยตรง

ภาพจากขั้นตอนพัฒนา LoRa Receiver ของผู้สร้าง
ภาพเพิ่มเติมจากกระบวนการพัฒนา LoRa Receiver ซึ่งถูกต่อยอดจาก Prototype ไปสู่ชุด Receiver แบบ Custom
Maker Journey ที่น่าสนใจ: Project ไม่ได้หยุดที่ Breadboard ใช้งานได้ แต่พัฒนาต่อไปถึง PCB, Enclosure และ Portable Device ซึ่งเป็นอีกขั้นของการเปลี่ยน Prototype ให้จัดการและใช้งานง่ายขึ้น

ระยะราว 1.5 km ต้องเข้าใจอย่างไร?

ผู้สร้างระบุใน Hackster ว่า Receiver สามารถสื่อสารได้ประมาณ 1.5 km ด้วย Basic Antenna และระยะสามารถเพิ่มขึ้นได้อีกเมื่อใช้เสาอากาศที่เหมาะสมกว่า

แต่ตัวเลขนี้ไม่ควรถูกตีความว่า SX1278 ทุกระบบจะได้ระยะ 1.5 km เท่ากัน เพราะ Source ไม่ได้ให้รายละเอียดเงื่อนไขการทดสอบครบถ้วน

Range ไม่ใช่ค่าคงที่: Source ไม่ได้ระบุ Antenna Gain, TX Power, Antenna Height, Terrain, Line-of-sight, RSSI, SNR, Packet Loss หรือสภาพแวดล้อมระหว่าง Test ดังนั้น 1.5 km ควรอ่านเป็นผลที่ผู้สร้างรายงานจาก Project นี้ ไม่ใช่ Guaranteed Range ของ SX1278

แบตเตอรี่ 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 ที่แม่นยำได้

Battery Safety: Project ใช้แบตเตอรี่แบบพกพา แต่ Source ที่ใช้ในบทความนี้ไม่ได้ให้รายละเอียด Charger, Protection Circuit หรือ Charging Current จึงไม่ควรสร้าง Battery Wiring หรือวิธีชาร์จเพิ่มเติมจากการคาดเดา

Enclosure มีไฟล์ STEP ให้ดาวน์โหลด

Hackster ระบุ Autodesk Fusion เป็นหนึ่งใน Software ที่ใช้ และ Project มีไฟล์ Enclosure ในรูปแบบ STEP สำหรับศึกษาหรือพัฒนาต่อ

จุดสำคัญคือ Source ให้ไฟล์ CAD จริง แต่ไม่ได้ระบุ 3D Printing Settings เช่น Layer Height, Infill, Nozzle, Support, Material หรือ Temperature

มีไฟล์ CAD แล้วแต่ยังไม่มีเครื่องพิมพ์? สามารถส่งไฟล์ให้ทีม Globalbyte ช่วยประเมินงาน Prototype หรือบริการ 3D Printing ได้ โดยควรเลือกวัสดุและ Print Setting ตามลักษณะการใช้งานจริง เพราะ Source ไม่ได้กำหนดค่าพิมพ์มาให้

Source Code, Schematic และไฟล์ Project

Project นี้มี Resource ค่อนข้างครบสำหรับคนที่อยากศึกษา Architecture ต่อ ทั้ง Firmware, PCB Source, Schematic และ Enclosure

Project นี้มีหลายส่วน: หากต้องการสร้างตามจริง แนะนำเปิด Schematic, Source Code และ KiCad Project ควบคู่กัน แทนการใช้ Pin Table ในบทความนี้เพียงอย่างเดียว เพราะ Hardware Revision สามารถเปลี่ยนได้ในอนาคต

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 จริง

ภาพรวมของ Project นี้จึงไม่ใช่แค่ Pico 2 + LoRa แต่เป็นตัวอย่างของการรวม Wireless Communication, Embedded UI, Power, PCB และ Mechanical Enclosure ให้กลายเป็น Device ที่ใช้งานเป็นระบบเดียวกัน

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

Disclaimer: บทความนี้เป็นการสรุปและเรียบเรียงจากแหล่งข้อมูลภาษาอังกฤษ อาจมีความคลาดเคลื่อน กรุณาตรวจสอบ Source ต้นฉบับก่อนลงมือทำ ระยะสื่อสารประมาณ 1.5 km และ Battery Runtime ประมาณ 4–5 ชั่วโมง เป็นค่าที่ผู้สร้างรายงานจาก Project และไม่ใช่ Guaranteed Specification เพราะ Source ไม่ได้ให้เงื่อนไข RF, Antenna Gain, TX Power, RSSI, SNR, Current Measurement หรือ Battery Test แบบครบถ้วน Firmware ใช้ 433 MHz ซึ่งข้อกำหนดการใช้งานคลื่นวิทยุแตกต่างกันตามประเทศและพื้นที่ ควรตรวจสอบกฎที่เกี่ยวข้องก่อนส่งสัญญาณจริง นอกจากนี้ Source มีไฟล์ STEP แต่ไม่ได้ระบุ Material, Layer Height, Infill, Nozzle, Support หรือ Print Temperature จึงไม่ควรสร้างค่าพิมพ์ 3D จากการคาดเดา

 

แท็ก


Blog posts