Upload files to "/"
sistem pengurangan kelembapan menggunakan dehumidifier berbasis esp32 dengan integrasi LoRa
This commit is contained in:
parent
e3e654ec61
commit
afb035a588
|
@ -0,0 +1,100 @@
|
||||||
|
#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(" ");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <LoRa.h>
|
||||||
|
#include "DHT.h"
|
||||||
|
|
||||||
|
// Konfigurasi Pin LoRa
|
||||||
|
#define LORA_SCK 18
|
||||||
|
#define LORA_MISO 19
|
||||||
|
#define LORA_MOSI 23
|
||||||
|
#define LORA_SS 5
|
||||||
|
#define LORA_RST 14
|
||||||
|
#define LORA_DIO0 2
|
||||||
|
|
||||||
|
// DHT dan Relay
|
||||||
|
#define DHTPIN 4
|
||||||
|
#define DHTTYPE DHT11
|
||||||
|
#define RELAY1 25
|
||||||
|
#define RELAY2 26
|
||||||
|
DHT dht(DHTPIN, DHTTYPE);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
dht.begin();
|
||||||
|
|
||||||
|
pinMode(RELAY1, OUTPUT);
|
||||||
|
pinMode(RELAY2, OUTPUT);
|
||||||
|
digitalWrite(RELAY1, HIGH); // OFF default
|
||||||
|
digitalWrite(RELAY2, HIGH); // OFF default
|
||||||
|
|
||||||
|
SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_SS);
|
||||||
|
LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0);
|
||||||
|
|
||||||
|
if (!LoRa.begin(433E6)) {
|
||||||
|
Serial.println("LoRa Gagal");
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
LoRa.setSyncWord(0xF3);
|
||||||
|
Serial.println("LoRa OK");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
float suhu = dht.readTemperature();
|
||||||
|
float hum = dht.readHumidity();
|
||||||
|
|
||||||
|
if (isnan(suhu) || isnan(hum)) {
|
||||||
|
Serial.println("Sensor Error!");
|
||||||
|
delay(3000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kendali relay berdasarkan kelembapan
|
||||||
|
String statusRelay;
|
||||||
|
if (hum < 40) {
|
||||||
|
digitalWrite(RELAY1, LOW); // ON
|
||||||
|
digitalWrite(RELAY2, HIGH); // OFF
|
||||||
|
statusRelay = "R1";
|
||||||
|
} else if (hum > 60) {
|
||||||
|
digitalWrite(RELAY1, LOW); // ON
|
||||||
|
digitalWrite(RELAY2, LOW); // ON
|
||||||
|
statusRelay = "R1R2";
|
||||||
|
} else {
|
||||||
|
digitalWrite(RELAY1, HIGH); // OFF
|
||||||
|
digitalWrite(RELAY2, HIGH); // OFF
|
||||||
|
statusRelay = "OFF";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Menyusun pesan dengan suhu dan kelembapan
|
||||||
|
String message = "Temp:" + String(suhu, 1) + "C, Hum:" + String(hum, 1) + "%";
|
||||||
|
|
||||||
|
// Kirim data melalui LoRa
|
||||||
|
LoRa.beginPacket();
|
||||||
|
LoRa.print(message);
|
||||||
|
LoRa.endPacket();
|
||||||
|
|
||||||
|
// Tampilkan di Serial Monitor
|
||||||
|
Serial.println("Data dikirim: " + message);
|
||||||
|
Serial.println("Relay Status: " + statusRelay);
|
||||||
|
|
||||||
|
delay(5000);
|
||||||
|
}
|
Loading…
Reference in New Issue