Mmuhamad Abdul Aziz
Published © Apache-2.0

How To Use LoRa_02 With Arduino

Hi, friends ! This time I got an interesting combination of Arduino uno + LoRa 02 + Relay. We will use Blynk to find out the message

BeginnerProtip7 hours1,726
How To Use LoRa_02 With Arduino

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×2
LoRa Rapid Development Kit
AllThingsTalk LoRa Rapid Development Kit
×2
LED (generic)
LED (generic)
×1
Grove - 2-Channel SPDT Relay
Seeed Studio Grove - 2-Channel SPDT Relay
×1
Through Hole Resistor, 560 ohm
Through Hole Resistor, 560 ohm
×1
Breadboard (generic)
Breadboard (generic)
×2
Jumper wires (generic)
Jumper wires (generic)
×1
Rocker Switch, Non Illuminated
Rocker Switch, Non Illuminated
×2

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free

Story

Read more

Custom parts and enclosures

LED

Relay 250VAC

Relay 250VAC

LED

Kabel Jumper

tombol ON/OF

RESISTOR

BREADBOARD

Module Ra_02

Arduino Uno

Arduino Uno

Schematics

LoRa_Rec.txt.ino

LoRa in Range with transmitter indicator LED

LoRa_Tra.txt

LoRa Transmitter ON/OFF

Code

LoRa_Tra.txt

Arduino
A simple project to receive message on Arduino through LoRa and display it on a Blynk app.
#include <LoRa.h> 
//int pot = A0;
const int SW1 = 3;
const int SW2 = 4;


int SyncWord = 0x22;
 
void setup() {
  Serial.begin(9600);
  pinMode(SW1,INPUT_PULLUP);
  pinMode(SW2,INPUT_PULLUP);

  cli();                                    //stop interrupts
                                            //set timer1 interrupt at 1Hz = 1sec
  TCCR1A = 0;                               // set entire TCCR1A register to 0
  TCCR1B = 0;                               // same for TCCR1B
  TCNT1  = 0;                               // initialize counter value to 0
                                            // set compare match register for 1hz increments
  OCR1A = 15624;                            // = (16*10^6) / (1*1024) - 1 (must be <65536)
                                            
  TCCR1B |= (1 << WGM12);                   // turn on CTC mode                                      
  TCCR1B |= (1 << CS12) | (1 << CS10);      // Set CS10 and CS12 bits for 1024 prescaler                                          
  TIMSK1 |= (1 << OCIE1A);                  // enable timer compare interrupt

  sei();                                    //allow interrupts
  
  while (!Serial);  
  Serial.println("LoRa Sender");
  if (!LoRa.begin(433E6)) { // or 915E6, the MHz speed of yout module
    Serial.println("Starting LoRa failed!");
    while (1);
  }
  
  LoRa.setSpreadingFactor(12);           // ranges from 6-12,default 7 see API docs
  LoRa.setSignalBandwidth(62.5E3 );           // for -139dB (page - 112)
  LoRa.setCodingRate4(8);                   // for -139dB (page - 112)
  LoRa.setSyncWord(SyncWord);
/*
  Serial.print("current spreading factor : ");
  Serial.println(LoRa.getSpreadingFactor());
  Serial.print("current bandwidth : ");
  Serial.println(LoRa.getSignalBandwidth());
  Serial.println("LoRa init succeeded.");
  */
}

int priviousSwitchValue1 = 1;
int priviousSwitchValue2 = 1;
int liveSwitchValue1 = 0;
int liveSwitchValue2 = 0;
bool switchPressFlag1 = false;
bool switchPressFlag2 = false;
bool gLedPin = 0;

int data = 1;

void loop() {
  //static int data = 1;
  
  liveSwitchValue1 = digitalRead(SW1);
  if( (liveSwitchValue1 == 0) and (switchPressFlag1 == false) )
  {
    delay(50);
    data = 11;
    Serial.println("11");
    switchPressFlag1 = true;
    priviousSwitchValue1 = !priviousSwitchValue1;

    LoRa.beginPacket();  
    LoRa.print(data);
    LoRa.endPacket();
  }
  if( (liveSwitchValue1 == 1) and (switchPressFlag1 == true) )
  {
    delay(50);
    data = 22;
    Serial.println("22");
    switchPressFlag1 = false;
    LoRa.beginPacket();  
    LoRa.print(data);
    LoRa.endPacket();
  }
  
  liveSwitchValue2 = digitalRead(SW2);
  if( (liveSwitchValue2 == 0) and (switchPressFlag2 == false))
  {
    delay(50);
    data = 33;
    Serial.println("33");
    switchPressFlag2 = true;
    priviousSwitchValue2 = !priviousSwitchValue2;
    LoRa.beginPacket();  
    LoRa.print(data);
    LoRa.endPacket();
  }
  if( (liveSwitchValue2 == 1) and (switchPressFlag2 == true) )
  {
    delay(50);
    data = 44;
    Serial.println("44");
    switchPressFlag2 = false;
    LoRa.beginPacket();  
    LoRa.print(data);
    LoRa.endPacket();
  }

  
  if(gLedPin == 1)
  {
    data = 55;
    Serial.println("55");
    gLedPin = 0;
    LoRa.beginPacket();  
    LoRa.print(data);
    LoRa.endPacket();
  }
  
  // LoRa.beginPacket();  
  // LoRa.print(data);
  // LoRa.endPacket();
}

ISR(TIMER1_COMPA_vect){//timer1 interrupt 1Hz toggles pin 13 (LED)
//generates pulse wave of frequency 1Hz/2 = 0.5kHz (takes two cycles for full wave- toggle high then toggle low)
  static volatile int ledFlag = 0;
  if(++ledFlag >= 5)
  {
    gLedPin = 1;
    ledFlag = 0;
  }
}

LoRa_Rec.txt.ino

Arduino
#include <LoRa.h> 

const int LED1 = 3;   // indicator LED
const int RLY1 = 4;   // relay 1
const int RLY2 = 5;   // relay 2

String inString = "";    // string to hold input
int val = 0;
int SyncWord = 0x22;
 
void setup() {
  Serial.begin(9600);
  pinMode(LED1,OUTPUT);
  pinMode(RLY1,OUTPUT);
  pinMode(RLY2,OUTPUT);
  
  digitalWrite(LED1 , LOW);
  digitalWrite(RLY1 , HIGH);
  digitalWrite(RLY2 , HIGH);
  
  while (!Serial);
  Serial.println("LoRa Receiver");
  if (!LoRa.begin(433E6)) { // or 915E6
    Serial.println("Starting LoRa failed!");
    while (1);
  }
   LoRa.setSpreadingFactor(12);           // ranges from 6-12,default 7 see API docs
   LoRa.setSignalBandwidth(62.5E3);           // for -139dB (page - 112)
   LoRa.setCodingRate4(8);                   // for -139dB (page - 112)
   LoRa.setSyncWord(SyncWord);           // ranges from 0-0xFF, default 0x12, see API docs
/*
  Serial.print("current spreading factor : ");
  Serial.println(LoRa.getSpreadingFactor());
  Serial.print("current bandwidth : ");
  Serial.println(LoRa.getSignalBandwidth());
  Serial.println("LoRa init succeeded.");
  */
}
bool i=0;
int priviousValue = 0;
int liveValue = 0;

void loop() { 
  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) { 
    // read packet    
    while (LoRa.available())
    {
      int inChar = LoRa.read();
      inString += (char)inChar;
      val = inString.toInt();  
      digitalWrite(LED1 , HIGH);
      delay(10);
      digitalWrite(LED1 , LOW);
      delay(10);     
    }
    inString = "";     
    LoRa.packetRssi();    
  }
  
  Serial.println(val);  
  liveValue = val;
    
  if(priviousValue != liveValue)
  {
    priviousValue = liveValue;
  
    if(val == 11)
    {
      digitalWrite(RLY1 , LOW);
    }
    
    if(val == 22)
    {
      digitalWrite(RLY1 , HIGH);
    }
  
    if(val == 33)
    {
      digitalWrite(RLY2 , LOW);
    }
    
    if(val == 44)
    {
      digitalWrite(RLY2 , HIGH);
    }
  }
  delay(50);
}

/*
 * 1. when switch 1 is pressed turn ON RLY1 & RLY2
 * 2. if 
 */

LoRa_Tra.txt

code as the sender to be received by the program from the recipient

LoRa_Rec.txt.ino

code as the recipient to be received by the program from the sender as the recipient of the data sent over the distance

Credits

Mmuhamad Abdul Aziz

Mmuhamad Abdul Aziz

1 project • 1 follower

Comments