środa, 27 listopada 2019

[37] Arduino - Nano - Lora SX1278

W tym poście chciałbym opisać sposób wykonania komunikacji pomiędzy dwoma urządzeniami wyposażonymi w moduły Lora.


Podłączenie:


Wykorzystywany przeze mnie moduł LORA RC-SM1276-868 oparty na układzie Semtech SX1276.

Dokumentację do układu można znaleźć pod tym linkiem.


Sposób podłączenia pod Ardunio Nano wygląda następująco:
  • Arduino 3v3 - VDD -Pin 2,
  • Arduino GND  - GND - Pin 3,4,
  • Arduino D10 - NSS - Pin 15,
  • Arduino D2 - DIO0 - Pin 6,
  • Arduino D13 - SCK - Pin 12,
  • Arduino D12 - MISO - Pin 13,
  • Arduino D11 - MOSI - Pin 14,
  • Arduino D9 - NRESET - Pin 5;

Programowanie:


Na samym początku należy pobrać odpowiednią bibliotekę. Ja wykorzystuje bibliotekę LORA przedstawioną na obrazku poniżej:


W celu przetestowania układu można się posłużyć prostym przykładem nadajnika/odbiornika (LoRaReceiver oraz LoRaSender).

Dokładny opis biblioteki można znaleźć pod tym linkiem.

Poniżej zmodyfikowany program nadajnika/odbiornika:

  1. #include <SPI.h>
  2. #include <LoRa.h>
  3. int counter = 0;
  4. int loopVal = 0;
  5. void setup() {
  6.   Serial.begin(9600);
  7.   while (!Serial);
  8.   Serial.println("LoRa Receiver");
  9.   if (!LoRa.begin(866E6)) {
  10.     Serial.println("Starting LoRa failed!");
  11.     while (1);
  12.   }
  13. }
  14. void loop() {
  15.   // try to parse packet
  16.   int packetSize = LoRa.parsePacket();
  17.   if (packetSize) {
  18.     // received a packet
  19.     Serial.print("Received packet '");
  20.     // read packet
  21.     while (LoRa.available()) {
  22.       Serial.print((char)LoRa.read());
  23.     }
  24.     // print RSSI of packet
  25.     Serial.print("' with RSSI ");
  26.     Serial.println(LoRa.packetRssi());
  27.   }
  28.   if(loopVal >= 5000)
  29.   {
  30.     Serial.print("Sending packet: ");
  31.     Serial.println(counter);
  32.    
  33.     loopVal = 0;
  34.     //SendPacket
  35.     LoRa.beginPacket();
  36.     LoRa.print("test ");
  37.     LoRa.print(counter);
  38.     LoRa.endPacket();
  39.     counter++;
  40.   }
  41.   loopVal++;
  42.   delay(1);
  43. }