#define BLYNK_TEMPLATE_ID "TMPL622xeHkHq"
#define BLYNK_TEMPLATE_NAME "Monitoring Kandang Ayam Cabet maniz"
#define BLYNK_AUTH_TOKEN "nXH0LOCazdlrdUbyzG2E4NvKwAyiphd_"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h>
// ====== PIN DEFINISI ======
#define DHT_PIN 5
#define TRIG 4
#define ECHO 15
// === PIN RELAY BARU ===
#define RELAY_PEMANAS 33 // Pemanas
#define RELAY_UAP 34 // Uap / Humidifier
#define RELAY_KIPAS 32 // Kipas
#define RELAY_POMPA 2 // Pompa air
#define BUZZER 14
// ====== WIFI ======
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// ====== DHT ======
DHTesp dht;
// ====== SETUP ======
void setup() {
Serial.begin(115200);
dht.setup(DHT_PIN, DHTesp::DHT22);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
// Relay Output
pinMode(RELAY_PEMANAS, OUTPUT);
pinMode(RELAY_UAP, OUTPUT);
pinMode(RELAY_KIPAS, OUTPUT);
pinMode(RELAY_POMPA, OUTPUT);
pinMode(BUZZER, OUTPUT);
// Relay OFF (HIGH = OFF)
digitalWrite(RELAY_PEMANAS, HIGH);
digitalWrite(RELAY_UAP, HIGH);
digitalWrite(RELAY_KIPAS, HIGH);
digitalWrite(RELAY_POMPA, HIGH);
digitalWrite(BUZZER, LOW);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
// ====== Fungsi Baca Ultrasonik ======
float bacaLevelAir() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long durasi = pulseIn(ECHO, HIGH);
float jarak = durasi * 0.0343 / 2;
return jarak;
}
// ====== LOOP ======
void loop() {
Blynk.run();
// Baca sensor
TempAndHumidity data = dht.getTempAndHumidity();
float suhu = data.temperature;
float lembab = data.humidity;
float levelAir = bacaLevelAir();
// Kirim ke Blynk
Blynk.virtualWrite(V0, suhu);
Blynk.virtualWrite(V1, lembab);
Blynk.virtualWrite(V2, levelAir);
// ===== LOGIKA SUHU =====
if (suhu > 30) {
digitalWrite(RELAY_PEMANAS, HIGH); // OFF
digitalWrite(RELAY_KIPAS, LOW); // ON
}
else if (suhu >= 26 && suhu <= 30) {
digitalWrite(RELAY_PEMANAS, HIGH); // OFF
digitalWrite(RELAY_KIPAS, HIGH); // OFF
}
else {
digitalWrite(RELAY_PEMANAS, LOW); // ON
digitalWrite(RELAY_KIPAS, HIGH); // OFF
}
// ===== KONTROL UAP =====
if (lembab < 60) {
digitalWrite(RELAY_UAP, LOW); // ON
} else {
digitalWrite(RELAY_UAP, HIGH); // OFF
}
// ===== POMPA AIR =====
if (levelAir > 15) {
digitalWrite(RELAY_POMPA, LOW); // ON
} else {
digitalWrite(RELAY_POMPA, HIGH); // OFF
}
// ===== ALARM =====
if (suhu > 35 || levelAir > 30) {
tone(BUZZER, 2000);
Blynk.virtualWrite(V7, 1);
} else {
noTone(BUZZER);
Blynk.virtualWrite(V7, 0);
}
// ===== Status ke Blynk =====
Blynk.virtualWrite(V3, !digitalRead(RELAY_PEMANAS)); // Pemanas
Blynk.virtualWrite(V4, !digitalRead(RELAY_KIPAS)); // Kipas
Blynk.virtualWrite(V5, !digitalRead(RELAY_UAP)); // Uap
Blynk.virtualWrite(V6, !digitalRead(RELAY_POMPA)); // Pompa
delay(1000);
}