Dehumidifier/ala1.ino

101 lines
2.4 KiB
C++

#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// 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(" ");
}
}