Basics TTGO LoRa32 SX1278 433MHz (Lab1)

การทดลองที่ 1 นี้เป็นการทดลองเบื้องต้น ในลักษณะการสื่อสารแบบทางเดียว (Simplex Transmission) สำหรับการทดสอบการต่อบอร์ด และการใช้โปรแกรมแบบง่ายเพื่อสร้างความคุ้นเคยบอร์ดและไลบารี่ที่นำมาใช้ ซึ่งการทดลองจะเป็นการทดลองสื่อสารทางเดียว โดยให้ LoRa32 ตัวแรกเป็นตัวส่ง (Tx) และอีกหนึ่งตัวเป็นตัวรับ (Rx) จากนั้นก็จะใช้โปรแกรมตัวอย่างข้างล่างสำหรับตัวรับและตัว โปรแกรมให้แต่ละตัว และเราสามารถดูผลลัพธ์ที่เกิดขึ้นบนคอมพิวเตอร์ได้เลย
จากรูปข้างล่างจะเป็นบล็อกไดอะแกรมการทำงานของการทดลองครั้งที่ 1 ซึ่งการรับส่งสัญญาณจะเป็นคลื่นความถี่วิทยุย่านความถี่ 433MHz และรูปแบบของการเขียนโปรแกรมในการรับส่งข้อมูลไม่ยากนัก และสามารถค้นหาตัวอย่างโปรแกรมในลักษณะอื่นในอินเตอร์เน็ตได้มากมาย หรือข้อมูลอ้างอิงท้ายการทดลองนี้

โปรแกรมข้างล่างนี้ (Tx) จะเป็นการส่งข้อมูล 1 ตัวแปร (counter) และ 1 ชุดข้อความ (Text ) ไปยังตัวรับ โดยจะส่งข้อมูลทุกๆ 1 วินาที และข้อมูลของตัวแปร counter จะเพิ่มค่าขึ้นเรื่อยๆ เพื่อให้เห็นความแตกต่าง โดยคำสั่งที่สำคัญของการส่งข้อมูลจะอยู่ที่ LoRa.beginPacket (); และคำสั่ง LoRa.endPacket (); ในส่วนของการกำหนดขาใช้งานให้กับ LoRa32 SX1278 จะอยูที่คำสั่ง define SS, RST และ DI0 ตามลำดับครับ
(Tx) TTGO LoRa32 SX1278 433MHz
#include <SPI.h> #include <LoRa.h> define SS 18 // GPIO18 -- SX1278's CS define RST 14 // GPIO14 -- SX1278's RESET define DI0 26 // GPIO26 -- SX1278's IRQ (Interrupt Request) define BAND 433E6 unsigned int counter = 0; void setup() { Serial.begin(115200); while (!Serial); Serial.println(); Serial.println("LoRa Sender"); SPI.begin(SCK,MISO,MOSI,SS); LoRa.setPins(SS,RST,DI0); if (!LoRa.begin(BAND)) { Serial.println("Starting LoRa failed!"); while (1); } LoRa.setSyncWord(0xAA); Serial.println(" Tx LoRa init OK"); delay(1000); } void loop() { Serial.println(String("Sending, ") + String(counter)); LoRa.beginPacket(); LoRa.print(" Text : "); LoRa.print(counter); LoRa.endPacket(); counter++; delay(1000); }
โปรแกรมถัดมาข้างล่างนี้ (Rx) จะเป็นส่วนของบอร์ดรับข้อมูล ซึ่งโดยส่วนใหญ่แล้วโปรแกรมจะคล้ายกับการส่งมาก โดยมีส่วนที่แตกต่างที่คำสั่งการรับคือ เริ่มจากคำสั่ง int packetSize = LoRa.ParsePacket (); จนถึงคำสั่ง Serial.printIn(LoRa.PacketRssi()); โดยในกลุ่มคำสั่งเหล่านี้จะเป็นพื้นฐานสำคัญในการพัฒนาให้ใช้งานได้หลายรูปแบบต่อไป
(Rx) TTGO LoRa32 SX1278 433MHz
#include <SPI.h> #include <LoRa.h> define SS 18 // GPIO18 -- SX1278's CS define RST 14 // GPIO14 -- SX1278's RESET define DI0 26 // GPIO26 -- SX1278's IRQ (Interrupt Request) define BAND 433E6 void setup() { Serial.begin(115200); while (!Serial); Serial.println("LoRa Receiver"); SPI.begin(SCK,MISO,MOSI,SS); LoRa.setPins(SS,RST,DI0); while (!LoRa.begin(BAND)) { Serial.println("."); delay(500); } LoRa.setSyncWord(0xAA); Serial.println(" Rx LoRa init OK"); } void loop() { int packetSize = LoRa.parsePacket(); if (packetSize) { Serial.print("Received, ");while (LoRa.available()) {
String LoRaData = LoRa.readString();
Serial.print(LoRaData);}
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
} }
สำหรับการทดลองในครั้งที่ 1 นี้เป็นการเริ่มต้นการใช้งานของบอร์ด LoRa32 SX1278 กันก่อนนะครับ ซึ่งผลลัพธ์ของการส่งและการรับค่าเราสามารถดูได้จาก พอร์ต COMx ที่เรากำลังเชื่อมต่ออยู่ของบอร์ดนั้นๆ สำหรับการทดลองถัดไปเราจะมาเพิ่มชุดข้อมูลสำหรับการส่งที่มากกว่า 1 ตัวแปรกันต่อครับ ซึ่งบางครั้งเราอาจจะต้องใช้งานในลักษณะแบบนี้เช่น การส่งข้อมูลของพลังงานไฟฟ้า อย่างค่าแรงดัน กระแส และพลังงานไฟฟ้าที่ใช้ในระบบในครั้งเดียวกัน
Reference
- http://www.lilygo.cn/prod_view.aspx?TypeId=50003&Id=1133&FId=t3:50003:3
- https://randomnerdtutorials.com/ttgo-lora32-sx1276-arduino-ide/
- https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436
- https://github.com/josephpal/esp32-LoraWAN/blob/master/ESP32-LoRa-Setup.md
- https://github.com/sandeepmistry/arduino-LoRa
- https://github.com/LilyGO/TTGO-LORA32
- https://www.instructables.com/Introduction-to-ESP32-WiFi-LoRa/
- https://learn.sparkfun.com/tutorials/esp32-lora-1-ch-gateway-lorawan-and-the-things-network/all
- https://cdn-shop.adafruit.com/product-files/3179/sx1276_77_78_79.pdf
- https://heltec.org/project/wifi-lora-32/
- https://github.com/HelTecAutomation/Heltec_ESP32
- https://heltec-automation-docs.readthedocs.io/en/latest/esp32/quick_start.html
- https://how2electronics.com/interfacing-sx1278-lora-module-with-arduino/
- https://how2electronics.com/esp32-lora-sensor-data-monitoring-web-server/
- https://resource.heltec.cn/download/WiFi_LoRa_32/WIFI_LoRa_32_V2.pdf