81 lines
1.7 KiB
C++
81 lines
1.7 KiB
C++
#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);
|
|
}
|