#include #include #include #include // Konfigurasi pin LoRa SX1278 #define LORA_SCK 18 #define LORA_MISO 19 #define LORA_MOSI 23 #define LORA_SS 5 #define LORA_RST 14 #define LORA_DIO0 2 // Inisialisasi LCD I2C (alamat 0x27, 16 kolom, 2 baris) LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { Serial.begin(115200); // Inisialisasi LCD lcd.begin(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Inisialisasi..."); // Inisialisasi LoRa SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_SS); LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0); if (!LoRa.begin(433E6)) { lcd.setCursor(0, 1); lcd.print("LoRa Gagal"); Serial.println("Gagal memulai LoRa"); while (1); } LoRa.setSyncWord(0xF3); lcd.setCursor(0, 1); lcd.print("LoRa OK "); Serial.println("Receiver siap..."); delay(2000); lcd.clear(); } void loop() { int packetSize = LoRa.parsePacket(); if (packetSize) { String dataMasuk = ""; while (LoRa.available()) { dataMasuk += (char)LoRa.read(); } int rssi = LoRa.packetRssi(); String jarak = "Tidak diketahui"; if (rssi >= -30) jarak = "Dekat"; else if (rssi >= -100) jarak = "Normal"; else if (rssi >= -150) jarak = "Jauh"; else jarak = "Sangat Jauh"; // Parsing data (misal: "Temp:28.4C, Hum:65.1%") String suhuStr = ""; String humStr = ""; int indexTemp = dataMasuk.indexOf("Temp:"); int indexHum = dataMasuk.indexOf("Hum:"); if (indexTemp != -1 && indexHum != -1) { suhuStr = dataMasuk.substring(indexTemp + 5, dataMasuk.indexOf("C")); humStr = dataMasuk.substring(indexHum + 4, dataMasuk.indexOf("%")); } // Tampilkan di Serial Monitor Serial.println("Data diterima: " + dataMasuk); Serial.print("Suhu: "); Serial.print(suhuStr); Serial.println(" C"); Serial.print("Kelembapan: "); Serial.print(humStr); Serial.println(" %"); Serial.print("RSSI: "); Serial.print(rssi); Serial.print(" dBm, Perkiraan jarak: "); Serial.println(jarak); Serial.println("---------------------"); // Tampilkan di LCD lcd.clear(); lcd.setCursor(0, 0); lcd.print("T:"); lcd.print(suhuStr); lcd.print((char)223); // Simbol derajat lcd.print("C H:"); lcd.print(humStr); lcd.print("%"); lcd.setCursor(0, 1); lcd.print("Jarak: "); lcd.print(jarak); lcd.print(" "); } }