Mengirimkan Data Temperatur dan Kelembapan melalui LoRa (Client Side)

Jabal Abdul Salam
4 min readJul 19, 2021

Proses pengiriman data temperatur dan kelembapan melalui LoRa sama halnya dengan pengiriman data melalui Wi-Fi yang sudah kita bahas sebelumnya, namun yang membedakan hanya saja pada protokol pengiriman data. Disini kita menggunakan LoRa Shield v1.4. Di bawah ini merupakan tampilan dari perangkat LoRa Shield v1.4.

LoRa Shield v1.4.

Perangkat lain yang digunakan yaitu DHT22 sebagai sensor pembaca temperaur dan kelembapan, ESP32 sebagai mikrokontroler-nya.

Hal pertama yang kita lakukan yaitu membuat rangkaiannya, berikut rangkaian untuk pengiriman data temperatur dan kelembapan melalui LoRa.

Rangkain Pengiriman Data Temperatur dan Kelembapan melalui LoRa

Rangkaian Pengiriman Data Temperatur dan Kelembapan melalui LoRa.

Setelah membuat rangkaian, langkah selanjutnya yaitu membuat kode yang akan dijalankan di arduino IDE.

Di bawah ini adalah tampilan dari kode yang kita gunakan untuk menjalankan proses pembacaan temperatur dan kelembapan serta mengirimkannya ke perangkat LoRa lainnya.

Kode Pengiriman Data Temperatur dan Kelembapan melalui LoRa.

#include <SPI.h>
#include <LoRa.h>
#include <DHT.h>
//Metentukan pin yang digunakan oleh modul transceiver
#define ss 5
#define rst 14
#define dio0 2
#define DHTPIN 4
#define DHTTYPE DHT22
// Membuat Objek baru dht dengan parameter DHTPIN dan DHTTYPE
DHT dht(DHTPIN, DHTTYPE);
// Deklarasi variable h dan t secara global
float h = 0;
float t = 0;
#define TUNGGU_LORA 250
#define TUNGGU_SETELAH_BACA_DATA 250
#define TUNGGU_SETELAH_KIRIM_DATA 250
// Fungsi untu baca Suhu
void bacaSuhudanKelembapan() {
h = dht.readHumidity();
t = dht.readTemperature();
}
// Fungsi untuk mengirim Data ke Server
void kirimData() {
bacaSuhudanKelembapan();
delay(TUNGGU_SETELAH_BACA_DATA);
if (isnan(h) || isnan(t)) {
Serial.println(F(“Gagal membaca data dari sensor!”));
return;
}
// Mengirim paket
LoRa.beginPacket();
LoRa.print(t);
LoRa.print(h);
LoRa.endPacket();
delay(TUNGGU_SETELAH_KIRIM_DATA);
}
void setup() {
//Inisialisasi Serial Monitor
Serial.begin(115200);
while (!Serial);
Serial.println(“LoRa Sender”);
//setup LoRa transceiver module
LoRa.setPins(ss, rst, dio0);
//initialise DHT22
dht.begin();
//433E6 untuk Asia
//866E6 untuk Eropa
//915E6 untuk America Utara
while (!LoRa.begin(433E6)) {
Serial.println(“.”);
delay(500);
}
// Ubah sync word (0xF3) agar sesuai dengan penerima
// Sync word memastikan Anda tidak mendapatkan pesan LoRa dari transceiver LoRa lainnya
// berkisar dari 0–0xFF
LoRa.setSyncWord(0xF3);
Serial.println(“Inisialisasi LoRa Siap”);
}
void loop() {
kirimData();
}

Hal pertama yang dilakukan untuk membuat kode pembacaan temperatur dan kelembapan serta mengirimkannya yaitu menentukan library yang cocok dengan perangkat yang kita gunakan. Di bawah ini adalah kumpulan library yang kita gunakan pada program pembacaan temperatur dan kelembapan.

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

Library yang pertama yaitu SPI.h yang mana library ini berfungsi menangani komunikasi serial sinkron SPI (Serial Peripheral Interface) di Arduino. Serial sinkron merupakan protokol komunikasi data secara serial akan tetapi membutuhkan jalur clock untuk sinkronisasi antara transmitter dan receiver-nya. Secara khusus istilah ‘serial sinkron SPI’ ditujukan untuk tipe protokol komunikasi serial sinkron yang memiliki 3 jalur kabel yakni MISO (Master In Slave Out), MOSI (Master Out Slave In) dan SCLK (Serial Clock) yang notabenenya merupakan jalur kabel dari LoRa Shield.

Library selanjutnya yaitu LoRa.h yang berfungsi untuk mengirim dan menerima data dari LoRa.

Dan library yang terakhir yaitu library DHT.h yang berfungsi untuk menjalankan sensor DHT baik DHT22 maupun DH11. Namun disini kita menggunakan DHT22.

Setelah memanggil library yang dibutuhkan, selanjutnya yaitu menentukan pin-pin mana yang kita gunakan pada perangkat. Berikut perintahnya.

//Metentukan pin yang digunakan oleh modul transceiver
#define ss 5
#define rst 14
#define dio0 2
#define DHTPIN 4
#define DHTTYPE DHT22

Disini kita menentukan pin yang digunakan di LoRa Shield dan juga pin pada DHT22 serta jenis DHT yang kita gunakan.

Setelah menentukan pin, langkah selanjutnya yaitu mendeklarasikan variabel h dan t secara global. Dimana variabel h akan menampung nilai humidity atau kelembapan serta t menampung nilai temperature serta mendeklarasikan nilai konstanta dari delay yang akan kita gunakan. Berikut kodenya.

//Deklarasi variable h dan t secara global
float h = 0;
float t = 0;
#define TUNGGU_LORA 250
#define TUNGGU_SETELAH_BACA_DATA 250Delay
#define TUNGGU_SETELAH_KIRIM_DATA 250

Langkah selanjutnya yaitu membuat fungsi untuk melakukan pembacaan suhu pada sensor. Dibawah ini kodenya.

// Fungsi untu baca Suhu
void bacaSuhudanKelembapan() {
h = dht.readHumidity();
t = dht.readTemperature();
}

Setelah fungsinya dibuat, selanjutnya yaitu membuat fungsi mengirimkan data. Berikut kodenya.

// Fungsi untuk mengirim Data ke Server
void kirimData() {
bacaSuhudanKelembapan();
delay(TUNGGU_SETELAH_BACA_DATA);
if (isnan(h) || isnan(t)) {
Serial.println(F(“Gagal membaca data dari sensor!”));
return;
}
// Mengirim paket
LoRa.beginPacket();
LoRa.print(t);
LoRa.print(h);
LoRa.endPacket();
delay(TUNGGU_SETELAH_KIRIM_DATA);
}

Di dalam fungsi kirim data, langkah pertama yaitu memanggil fungsi baca suhu. Kemudian memberikan nilai delay. Kemudian membuat pengkondisian apabila suhu tidak bisa terbaca, maka akan langsung ada pesan error. Apabila pembacaan suhu berjalan dengan lancar, selanjutnya yaitu mengirimkan data pembacaan dari sensor dengan menggunakan perintah beginPacket() dan diakhiri dengan endPacket() dan diantara perintah-perintah tersebut terselip perintah print(t) dan print(h). Dan di akhir perintah kita berikan nilai delay.

Setelah selesai di fungsi kirimData(), selanjutnya kita beranjak ke fungsi setup(). Di fungsi ini kita menenbtukan beberapa fungsi dan perintah untuk dijalankan.

Pertama sekali menginisialisasi serial monitor dan melakukan percobaan dengan membuat teks “LoRa Sender”.

//Inisialisasi Serial Monitor
Serial.begin(115200);
while (!Serial);
Serial.println(“LoRa Sender”);

Kemudian melakukan setup pin dan inisialisasi DHT22.

/setup LoRa transceiver module
LoRa.setPins(ss, rst, dio0);
//initialise DHT22
dht.begin();

Setelah melakukan setup pin dan inisialisasi DHT22, langkah selanjutnya yaitu melakukan sinkronisasi frekuensi. Disini kita menggunakan yang Asia. Berikut kodenya.

 //433E6 untuk Asia
//866E6 untuk Eropa
//915E6 untuk America Utara
while (!LoRa.begin(433E6)) {
Serial.println(“.”);
delay(500);
}

Setelah menentukan frekuensi, selanjutnya langsung melakukan pengetesan, apabila terhubung, maka akan terprint titik (.) dan kita berikan delay 500ms.

Langkah terakhir di fungsi setup yaitu melakukan sinkronisasi LoRa transcaiver dengan LoRa Receiver. Berikut kodenya.

//Ubah sync word (0xF3) agar sesuai dengan penerima
//Sync word memastikan Anda tidak mendapatkan pesan LoRa dari transceiver LoRa lainnya
//berkisar dari 0–0xFF
LoRa.setSyncWord(0xF3);
Serial.println(“Inisialisasi LoRa Siap”);
}

Dan langkah terakhir yaitu menginisialisasi fungsi loop(). Disini kita memanggil fungsi kirimData() di dalam fungsi loop(). Berikut kodenya.

void loop() {
kirimData();
}

--

--