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

  1. http://www.lilygo.cn/prod_view.aspx?TypeId=50003&Id=1133&FId=t3:50003:3
  2. https://randomnerdtutorials.com/ttgo-lora32-sx1276-arduino-ide/
  3. https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436
  4. https://github.com/josephpal/esp32-LoraWAN/blob/master/ESP32-LoRa-Setup.md
  5. https://github.com/sandeepmistry/arduino-LoRa
  6. https://github.com/LilyGO/TTGO-LORA32
  7. https://www.instructables.com/Introduction-to-ESP32-WiFi-LoRa/
  8. https://learn.sparkfun.com/tutorials/esp32-lora-1-ch-gateway-lorawan-and-the-things-network/all
  9. https://cdn-shop.adafruit.com/product-files/3179/sx1276_77_78_79.pdf
  10. https://heltec.org/project/wifi-lora-32/
  11. https://github.com/HelTecAutomation/Heltec_ESP32
  12. https://heltec-automation-docs.readthedocs.io/en/latest/esp32/quick_start.html
  13. https://how2electronics.com/interfacing-sx1278-lora-module-with-arduino/
  14. https://how2electronics.com/esp32-lora-sensor-data-monitoring-web-server/
  15. https://resource.heltec.cn/download/WiFi_LoRa_32/WIFI_LoRa_32_V2.pdf