• Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
Rabu, Mei 14, 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

Mengirim Data Sensor Suhu dengan Komunikasi LoRa

Jimmi Sitepu by Jimmi Sitepu
November 26, 2020
0 0
3
Mengirim Data Sensor Suhu dengan Komunikasi LoRa
0
SHARES
2.7k
VIEWS
Share on FacebookShare on Twitter

Teknologi LoRa Kini

LoRa kini semakin berkembang karena komunikasi antar perangkat yang terpisah jauh bisa menggunkanan chip ini. Chip LoRa yang low energy. Penerapan teknologi ini bisa di aplikasikan di berbagai bidang seperti:

  • Monitoring Banjir
  • Monitoring perternakan dan Pertanian
  • Drone
  • Alat nafigasi untuk petualang di hutan yang tidak ada koneksi internet
  • Dan di berbagai bidang lain nya

LoRa selalu di perhatikan karena dua hal, yaitu Jarak dan Low Energy ( Berapa lama tahan dengan batre yang ada ). Semakin jauh jarak yang di tempuh dan semakin lama habis nya konsumsi batre akan menunjukkan seberapa baik LoRa yang di design.

READ ALSO

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

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

Khusus jarak tempuh komunikasi LoRa ini, penulis belum banyak memiliki refrensi, apakah antenna, power dll.

Nah kali ini, kita akan mencoba mengirim data sensor suhu DS18b20 menggunakan LoRa. Lora yang kita gunakan adalah LoRa buatan kita sendiri ( Design hardware ), Satu nya menggunakan LoRa shield yang support Arduino Uno, dan satu nya lagi menggunakan LoRa esp32. Kebetulan mimin suka design hardware IOT ^_^.

Kelengkapan Praktek

Untuk mengirim data suhu ini, mimin berharap teman-teman sudah mempunya basic seperti,

  • add library ke Arduino IDE
  • add board ESP32 ke Arduino IDE
  • pemahaman dasar tentang pemrograman Arduino

Library yang penting di add di Arduino IDE nya adalah sebagai berikut,

  • Arduinojson ( https://github.com/bblanchon/ArduinoJson)
  • DallasTemperature.h ( https://github.com/milesburton/Arduino-Temperature-Control-Library )
  • Arduino Lora ( https://github.com/sandeepmistry/arduino-LoRa )

Kirim Data Suhu LoRa

Setelah semua di atas terpenuhi. Langkah selanjut nya adalah mengirim data sensor suhu DS18b20 dengan LoRa SX1276. Jika teman-teman menggunakan LoRa shield mikroavr. output Sensor DS18b20 di hubungkan ke pin D8 arduino Uno.

Konfig pin nya sebagai berikut

Arduino UnoDS18b20LoRa
D8output
D5RST
D6SS
D3DIO0
Config Pin LoRa Node

Program LoRa Kirim Suhu

// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

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

const long frequency = 923E6;  // LoRa Frequency

const int resetPin = 5;        // LoRa radio reset
const int csPin = 6;          // LoRa radio chip select
const int irqPin = 3;          // interrupt pin

#include <ArduinoJson.h>
StaticJsonDocument<200> doc;
String json_lora;

void setup(void)
{
  // start serial port
  Serial.begin(115200);
  sensors.begin();
  
  LoRa.setPins(csPin, resetPin, irqPin);
  while (!LoRa.begin(frequency)) {
    Serial.println("LoRa init failed.");
    delay(1000);// if failed, do nothing
  }
  Serial.println("LoRa sukses");

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

void loop(void)
{ 
  
  sensors.requestTemperatures(); // Send the command to get temperatures
  float tempC = sensors.getTempCByIndex(0);

  // Check if reading was successful
  if(tempC != DEVICE_DISCONNECTED_C) 
  {
    Serial.print("suhu: ");
    Serial.println(tempC);
    doc["id"] = "001";
    doc["suhu"] = tempC;
    serializeJson(doc, json_lora); 
    Serial.println(json_lora);
    LoRa_sendMessage(json_lora);
    json_lora = "";
  } 
  delay(1000);
}

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(true);                 // finish packet and send it
}

void onTxDone() {
  Serial.println("TxDone");
  LoRa_rxMode();
}

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

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

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

Ketika kode di atas, buka Serial monitor, maka akan menampilkan seperti gambar berikut,

Kirim data suhu dengan LoRa

Program di atas akan mengirimkan data LoRa dalam bentuk JSON, data pertama berupa ID dan data kedua berupa suhu. Data ini akan kita parsing di gateway nya. Seperti apa kah pembacaan data di gateway nya?

Menerima Data Suhu dengan LoRa

Gateway LoRa kita menggunakan ESP32. Jadi pastikan Board ESP32 sudah ter instal di Arduino IDE teman-teman. Untuk kode nya adalah sebagai berikut.

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

const long frequency = 923E6;  // LoRa Frequency

const int csPin = 33;          // LoRa radio chip select
const int resetPin = 32;        // LoRa radio reset
const int irqPin = 25;          // interrupt pin

#include <ArduinoJson.h>
String buf_message;
String message;

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

  LoRa.setPins(csPin, resetPin, irqPin);

  while (!LoRa.begin(frequency)) {
    Serial.println("LoRa init failed. Check your connections.");
    delay(1000);// if failed, do nothing
  }
  delay(1000);
  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.onTxDone(onTxDone);
  LoRa_rxMode();
}

void loop() {
  if (buf_message != message) {
    Serial.print("JSON: ");
    Serial.println(buf_message);
    DynamicJsonDocument doc(200);
    deserializeJson(doc, buf_message);
    String id = doc["id"];
    float suhu = doc["suhu"];
    Serial.print("id:"); Serial.print(id); Serial.print(", ");
    Serial.print("suhu:"); Serial.println(suhu);
    buf_message = message;
  }

}

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(true);                 // finish packet and send it
}

void onReceive(int packetSize) {

  while (LoRa.available()) {
    message += (char)LoRa.read();
  }
  buf_message = message;
  //Serial.println(message);
  message = "";
}

void onTxDone() {
  Serial.println("TxDone");
  LoRa_rxMode();
}

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

Upload kode di atas, dan bukan serial monitor, nanti akan tertampil seperti gambar berikut ini

Terima data suhu LoRa

Hal yang panting dari program ini adalah di bagian void loop nya.

 
void loop() {   
if (buf_message != message) 
{     Serial.print("JSON: ");     
Serial.println(buf_message);     
DynamicJsonDocument doc(200);     
deserializeJson(doc, buf_message);     
String id = doc["id"];    
 float suhu = doc["suhu"];     
Serial.print("id:"); Serial.print(id); Serial.print(", "); 
Serial.print("suhu:"); Serial.println(suhu); 
buf_message = message;   } 
} 

Ketika ada data baru maka akan langsung di proses di void loop, dan di parsing dengan library arduinojson.

Semoga tulisan mengirim data sensor Suhu dengan LoRa ini bermanfaat bagi teman-teman. Jika membutuhkan LoRa custome sesuai kebutuhan teman-teman, bisa langsung klik tombol whatsapp di bawah ini.

Whatsapp kami

ShareTweet
Previous Post

Memproteksi Program Esp32 dengan Chip Id

Next Post

Setting Parameter Dengan ESP32 HTML Form melalui Access Point

Jimmi Sitepu

Jimmi Sitepu

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

Related Posts

sensor URM14 Arduino
ESP32

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
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
Mendapatkan Waktu Akurat dengan NTP GPS
ESP32

Mendapatkan Waktu Akurat dengan NTP GPS

Mei 8, 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
Next Post
Setting Parameter Dengan ESP32 HTML Form melalui Access Point

Setting Parameter Dengan ESP32 HTML Form melalui Access Point

Sensor Tekanan Air Dan Udara Dengan Arduino

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.