• Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
Selasa, Mei 20, 2025
mikroavr.com
No Result
View All Result
  • Login
  • Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
  • Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
No Result
View All Result
mikroavr
No Result
View All Result
Home Arduino

ESP32 Lora Gateway Arduino dengan 2 Node Lora Uno di frequency 923Mhz

Jimmi Sitepu by Jimmi Sitepu
Oktober 11, 2019
0 0
0
ESP32 Lora Gateway Arduino dengan 2 Node Lora Uno di frequency 923Mhz

PCB esp32 lora

67
SHARES
3.9k
VIEWS
Share on FacebookShare on Twitter

Pengertian

Lora adalah Sebuah perangkat yang menggunakan teknik modulasi spektrum dengan konsumsi daya yang kecil dan jarak jangkuan yang jauh, setidak nya pengertian ini bisa kita dapat kan dari sebuah situs resmi lora, yaitu https://www.semtech.com/lora/what-is-lora.

  • desain lora custome
  • Arduino Lora Custome

Dulu kita mungkin mengenal yang nama nya infrared untuk sebuah komunikas data dengan jarak yang sangat dekat, setelah itu muncul lagi komunikasi yang lebih jauh dengan menggunakan bluetooth. Lagi-lagi jarak nya belum terlalu cukup, maka muncul wifi di freq 2.4Ghz, nah jarak ini juga tidak terlalu jauh maka muncul teknologi LoRa, yang memiliki jarak bervariasi. Bahkan ada jarak komunikasi nya sampai 40Km. Keren bukan?

READ ALSO

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

Manfaat Lora

Ketika kami mikroavr.com mencoba membuat modul Node Lora sendiri dan Lora Gateway, banyak pertanyaan muncul, apa sih manfaat dari LoRa itu sendiri?

Manfaat nya bisa di gunakan untuk controlling dan monitoring dengan jarak jauh. Sebagai contoh;

  1. monitoring suhu dan kelembaban di beberapa titik kemudian di kirim data ke gateway.
  2. Atau misal nya menghidupkan dan mematikan alat control dari jarak jauh.
  3. Monitoring variable listrik dari beberpa titik
  4. Monitoring PH, kelembaban tanah untuk pertanian,
  5. Dan monitoring lain nya

Untuk Lebih jelas nya bisa teman-teman lihat pada gambar di bawah ini,

  • Topology sederhana Lora

Contoh Multi Node Lora

Sekarang saat nya kita mencoba nih, bagaiaman cara nya agar esp32 lora gateway bisa menerima dari beberapa node. Di contoh percobaan kita ini, kita hanya menggunakan dua arduino Lora dan satu gateway. Data yang kita kirim adalah adalah millis, data millis yang di hasilkan setiap node dan dikirim ke gateway, Bagaiaman kah program nya? sebelum program, teman-teman download dulu library nya di link berikut di bawah ini https://github.com/sandeepmistry/arduino-LoRa

Node 1

#include <SPI.h>              // include libraries
#include <LoRa.h>

const long frequency = 923E6;  // LoRa Frequency

const int csPin = 10;          // LoRa radio chip select
const int resetPin = 9;        // LoRa radio reset
const int irqPin = 2;          // change for your board; must be a hardware interrupt pin

void setup() {
  Serial.begin(115200);                   // initialize serial
  while (!Serial);

  LoRa.setPins(csPin, resetPin, irqPin);

  if (!LoRa.begin(frequency)) {
    Serial.println("LoRa init failed. Check your connections.");
    while (true);                       // if failed, do nothing
  }

  Serial.println("LoRa init succeeded.");
  Serial.println();
  Serial.println("LoRa Simple Node");
  Serial.println("Only receive messages from gateways");
  Serial.println("Tx: invertIQ disable");
  Serial.println("Rx: invertIQ enable");
  Serial.println();

  LoRa.onReceive(onReceive);
  LoRa_rxMode();
}

void loop() {
  if (runEvery(2000)) { // repeat every 1000 millis
    String message = "001,"; // id
    message += millis(); // kirim data millis,
    message += "#"; // tanda akhir data
    LoRa_sendMessage(message); // send a message
  }
}

void LoRa_rxMode(){
  LoRa.enableInvertIQ();                // active invert I and Q signals
  LoRa.receive();                       // set receive mode
}

void LoRa_txMode(){
  LoRa.idle();                          // set standby mode
  LoRa.disableInvertIQ();               // normal mode
}
void LoRa_sendMessage(String message) {
  LoRa_txMode();                        // set tx mode
  LoRa.beginPacket();                   // start packet
  LoRa.print(message);                  // add payload
  LoRa.endPacket();                     // finish packet and send it
  LoRa_rxMode();                        // set rx mode
}

void onReceive(int packetSize) {
  String message = "";
  while (LoRa.available()) {
    message += (char)LoRa.read();
  }
  Serial.print("Node Receive: ");
  Serial.println(message);
}
boolean runEvery(unsigned long interval)
{
  static unsigned long previousMillis = 0;
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval)
  {
    previousMillis = currentMillis;
    return true;
  }
  return false;
}

Node 2

#include <SPI.h>              // include libraries
#include <LoRa.h>

const long frequency = 923E6;  // LoRa Frequency

const int csPin = 10;          // LoRa radio chip select
const int resetPin = 9;        // LoRa radio reset
const int irqPin = 2;          // change for your board; must be a hardware interrupt pin

void setup() {
  Serial.begin(115200);                   // initialize serial
  while (!Serial);

  LoRa.setPins(csPin, resetPin, irqPin);

  if (!LoRa.begin(frequency)) {
    Serial.println("LoRa init failed. Check your connections.");
    while (true);                       // if failed, do nothing
  }

  Serial.println("LoRa init succeeded.");
  Serial.println();
  Serial.println("LoRa Simple Node");
  Serial.println("Only receive messages from gateways");
  Serial.println("Tx: invertIQ disable");
  Serial.println("Rx: invertIQ enable");
  Serial.println();

  LoRa.onReceive(onReceive);
  LoRa_rxMode();
}

void loop() {
  if (runEvery(2000)) { // repeat every 1000 millis
    String message = "002,"; // id node
    message += millis(); // kirim data millis
    message += "#";
    LoRa_sendMessage(message); // send a message
  }
}

void LoRa_rxMode(){
  LoRa.enableInvertIQ();                // active invert I and Q signals
  LoRa.receive();                       // set receive mode
}

void LoRa_txMode(){
  LoRa.idle();                          // set standby mode
  LoRa.disableInvertIQ();               // normal mode
}

void LoRa_sendMessage(String message) {
  LoRa_txMode();                        // set tx mode
  LoRa.beginPacket();                   // start packet
  LoRa.print(message);                  // add payload
  LoRa.endPacket();                     // finish packet and send it
  LoRa_rxMode();                        // set rx mode
}

void onReceive(int packetSize) {
  String message = "";
  while (LoRa.available()) {
    message += (char)LoRa.read();
  }

  Serial.print("Node Receive: ");
  Serial.println(message);

}

boolean runEvery(unsigned long interval)
{
  static unsigned long previousMillis = 0;
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval)
  {
    previousMillis = currentMillis;
    return true;
  }
  return false;
}

ESP32 Gateway

  • esp32 lora gateway

Program node di atas memiliki id masing-masing 001 dan 002, kemudian frequency nya di setting di 923Mhz, bisa di perhatikan di program nya. Program terakhir adalah program di gateway, di esp32 nya, yuk, seperti ini program nya

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(20, 4);


#include <SPI.h>              // include libraries
#include <LoRa.h>

const long frequency = 923E6;  // LoRa Frequency

const int csPin = 5;          // LoRa radio chip select
const int resetPin = 25;        // LoRa radio reset
const int irqPin = 33;          // change for your board; must be a hardware interrupt pin
String id, Data, Data1, Data2;

void setup() {
  
  lcd.autoAddress();
  lcd.begin();
  Serial.begin(115200);                   // initialize serial
  while (!Serial);

  LoRa.setPins(csPin, resetPin, irqPin);

  if (!LoRa.begin(frequency)) {
    Serial.println("LoRa init failed. Check your connections.");
    while (true);                       // if failed, do nothing
  }

  Serial.println("LoRa init succeeded.");
  Serial.println();
  Serial.println("LoRa Simple Gateway");
  Serial.println("Only receive messages from nodes");
  Serial.println("Tx: invertIQ enable");
  Serial.println("Rx: invertIQ disable");
  Serial.println();

  LoRa.onReceive(onReceive);
  LoRa_rxMode();
   
}

void loop() {
  if (runEvery(2500)) { // repeat every 5000 millis
    lcd.clear();
    lcd.setCursor(3,0);
    lcd.print("me gateway");
    lcd.setCursor(0,2);
    lcd.print("01: ");
    lcd.print(Data1);
    lcd.setCursor(0,3);
    lcd.print("02: ");
    lcd.print(Data2);
        
  }
}

void LoRa_rxMode(){
  LoRa.disableInvertIQ();               // normal mode
  LoRa.receive();                       // set receive mode
}

void LoRa_txMode(){
  LoRa.idle();                          // set standby mode
  LoRa.enableInvertIQ();                // active invert I and Q signals
}

void LoRa_sendMessage(String message) {
  LoRa_txMode();                        // set tx mode
  LoRa.beginPacket();                   // start packet
  LoRa.print(message);                  // add payload
  LoRa.endPacket();                     // finish packet and send it
  LoRa_rxMode();                        // set rx mode
}

void onReceive(int packetSize) {
  int len_ID, len_DT;
  String message = "";

  while (LoRa.available()) {
    message += (char)LoRa.read();
  }

  len_ID = message.indexOf(",");
  len_DT = message.indexOf("#");

  id = message.substring(0,len_ID); // parsing id
  Data = message.substring(len_ID+1, len_DT); // parsing data
  
  if(id == "001"){ 
    Data1 = Data;
    Serial.print("001, ");
    Serial.println(Data1);
  }
  if(id == "002"){
    Data2 = Data;
    Serial.print("002, ");
    Serial.println(Data2);
  }
}

boolean runEvery(unsigned long interval)
{
  static unsigned long previousMillis = 0;
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval)
  {
    previousMillis = currentMillis;
    return true;
  }
  return false;
}

Nah program di atas akan memparsing id dan data dari data node, untuk memilah yang mana data dari 001 dan 002. Kemudian data nya akan di tampilkan di LCD 20×4.

Teman-teman mikro kemungkinan besar akan error jika compile program di esp32 nya, karena kita menggunakan library i2c lcd auto scan, untuk dapatkan tutorial dan library nya bisa clik link di bawah ni

auto scan i2c lcd

Untuk video pengujian nya sebagai berikut,

Hal penting Lora

  1. Data yang dikirim kan sesungguh nya bebentuk public, semua bisa akses jika menggunakan LoRa dengan tipe dan frequecy yang sama
  2. Seberapa banyak kah Gataway Menampung Node? dari pengujian kami tergantung cepat nya durasi pengiriman data dari node, LoRa gateway bekerja secara interrupt, pin DIO0 akan aktif jika ada data baru, pin DIO0 ini terhubung ke pin interrupt, jadi gataway bener bener mendengar data baru, jika ada data baru langsung di proses oleh gataway, selama proses data, data baru nya tidak akan di terima. Seandai nya data dari dikirim per 5 menit, maka memungkinkan menerima data dari node jumlah yang lebih banyak. Untuk itu ESP32 sangat cocok di gunakan untuk gateway karena processor nya 32bit dengan speed 240Mhz.
  3. Tipe antenna akan sangat mempengaruhi jarak dari node ke gataway.

Semoga tulisan sederhana di atas bermanfaat, Thanks

Perlu Lora Custome dengan jumlah yang cukup? cukup clik link di bawah ini,

Order Lora Custome

Refrensi:

https://www.semtech.com/lora/what-is-lora

Tags: lora
Share67Tweet
Previous Post

Modul LoRa Arduino Dengan 3 Output Relay dan 3 Input Digital, LOS 10km-14km

Next Post

Jasa Desain PCB, Arduino Custome dan PCB lain

Jimmi Sitepu

Jimmi Sitepu

Hobbyist Embedded System, Robotic, IOT and write all about them. So we have nice quote "Learning and Sharing"

Related Posts

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega
Arduino

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G
IOT

Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

April 14, 2022
Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32
Arduino

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Maret 9, 2022
ethernet arduino
Arduino

Arduino Ethernet Tutorial, Project dengan Arduino Uno dan Mega

Februari 24, 2022
solder i2c arduino lcd
Arduino

Tutorial Program Arduino Lcd i2c dan Library nya

Februari 24, 2022
tft lcd arduino shield
Arduino

Tutorial Mudah TFT lcd Arduino untuk Membuat Jam Digital

Februari 24, 2022
Next Post
Jasa Desain PCB, Arduino Custome dan PCB lain

Jasa Desain PCB, Arduino Custome dan PCB lain

Macam-Macam Sensor Arus pada Rangkaian Elektronik

Membaca Sensor PZEM-004T v3 dengan ESP32

Please login to join discussion

Tulisan Terbaru

sensor URM14 Arduino

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
Mendapatkan Waktu Akurat dengan NTP GPS

Mendapatkan Waktu Akurat dengan NTP GPS

Mei 8, 2022
Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

April 14, 2022
Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Maret 9, 2022
ethernet arduino

Arduino Ethernet Tutorial, Project dengan Arduino Uno dan Mega

Februari 24, 2022

Browse by Category

  • Arduino
  • Ebook
  • ESP32
  • IOT
  • jasa
  • Komponen
  • PCB
  • Produk
  • program Arduino
  • Project
  • Rangkaian
  • Sensor
  • Tips
  • Uncategorized

Recent News

sensor URM14 Arduino

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
  • About US
  • Blog
  • MIKROAVR

© 2020 mikroavr.com - Learning and sharing.

Welcome Back!

Sign In with Google
OR

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist

No Result
View All Result
  • About US
  • Blog
  • MIKROAVR

© 2020 mikroavr.com - Learning and sharing.