// Wajib disertakan untuk komunikasi dengan web server (Blynk)
#define BLYNK_PRINT Serial // Mengaktifkan output debugging ke Serial Monitor
#define BLYNK_TEMPLATE_ID "TMPL604N_jvWE" // ID template Blynk
#define BLYNK_TEMPLATE_NAME "Suhu Dan Kelembapan" // Nama template Blynk
#define BLYNK_AUTH_TOKEN "NABgmEfgiIgIDQGPwpbPPS5bQ2i92lmd" // Token otentikasi Blynk
#include <WiFi.h> // Library untuk koneksi WiFi
#include <WiFiClient.h> // Library untuk klien WiFi
#include <BlynkSimpleEsp32.h> // Library Blynk untuk ESP32
#include "DHTesp.h" // Library untuk sensor DHT
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
const int DHT_PIN = 15; // Pin yang digunakan untuk sensor DHT
const int AC = 14; // Pin untuk kontrol AC
const int heater = 12; // Pin untuk kontrol heater
const int lampu = 4; // Pin untuk sensor lampu
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD I2C dengan alamat 0x27, ukuran 16x2
DHTesp dhtSensor; // Membuat objek sensor DHT
char auth[] = BLYNK_AUTH_TOKEN; // Token otentikasi Blynk
char ssid[] = "Wokwi-GUEST"; // SSID WiFi
char pass[] = ""; // Password WiFi, kosong jika tidak ada
BlynkTimer timer; // Objek timer untuk mengatur interval fungsi
void setup() {
Serial.begin(115200); // Memulai komunikasi serial dengan baud rate 115200 untuk debugging
Blynk.begin(auth, ssid, pass); // Inisialisasi koneksi Blynk
timer.setInterval(1000L, sendSensor); // Atur interval timer untuk memanggil sendSensor() setiap 1000 ms (1 detik)
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Inisialisasi sensor DHT22 pada pin DHT_PIN
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan lampu latar LCD
pinMode(AC, OUTPUT); // Atur pin AC sebagai OUTPUT
pinMode(heater, OUTPUT); // Atur pin heater sebagai OUTPUT
pinMode(lampu, INPUT); // Atur pin lampu sebagai INPUT
}
void loop() {
Blynk.run(); // Jalankan Blynk untuk memproses event dari server
timer.run(); // Jalankan timer untuk memanggil fungsi yang dijadwalkan
if (digitalRead(lampu) == HIGH) { // Cek status pin lampu
Blynk.virtualWrite(V3, "Lampu ON"); // Kirim status "Lampu ON" ke virtual pin V3 Blynk
Blynk.virtualWrite(V4, 1); // Kirim nilai 1 (ON) ke virtual pin V4 Blynk
} else {
Blynk.virtualWrite(V3, "Lampu OFF"); // Kirim status "Lampu OFF" ke virtual pin V3 Blynk
Blynk.virtualWrite(V4, 0); // Kirim nilai 0 (OFF) ke virtual pin V4 Blynk
}
}
void sendSensor() {
TempAndHumidity data = dhtSensor.getTempAndHumidity(); // Ambil data suhu dan kelembapan dari sensor
Blynk.virtualWrite(V0, data.temperature); // Kirim suhu ke virtual pin V0 Blynk
Blynk.virtualWrite(V1, data.humidity); // Kirim kelembapan ke virtual pin V1 Blynk
lcd.setCursor(0, 0); // Set cursor LCD ke posisi (0,0)
lcd.print("Temp = "); // Tampilkan label suhu
lcd.print(data.temperature); // Tampilkan nilai suhu
lcd.print(" C"); // Tampilkan satuan suhu
lcd.setCursor(0, 1); // Set cursor LCD ke posisi (0,1)
lcd.print("Hum = "); // Tampilkan label kelembapan
lcd.print(data.humidity); // Tampilkan nilai kelembapan
lcd.print(" %"); // Tampilkan satuan kelembapan
// Kontrol AC dan heater berdasarkan suhu
if (data.temperature <= 20) { // Jika suhu kurang dari atau sama dengan 20°C
digitalWrite(AC, LOW); // Matikan AC (LOW)
digitalWrite(heater, HIGH); // Nyalakan heater (HIGH)
Blynk.virtualWrite(V2, "Udara dingin, AC OFF, Heater ON"); // Kirim status ke virtual pin V2 Blynk
} else if (data.temperature > 28) { // Jika suhu lebih dari 28°C
digitalWrite(AC, HIGH); // Nyalakan AC (HIGH)
digitalWrite(heater, LOW); // Matikan heater (LOW)
Blynk.virtualWrite(V2, "Udara panas, AC ON, Heater OFF"); // Kirim status ke virtual pin V2 Blynk
} else { // Jika suhu di antara 20°C dan 28°C
digitalWrite(AC, LOW); // Matikan AC (LOW)
digitalWrite(heater, LOW); // Matikan heater (LOW)
Blynk.virtualWrite(V2, "Suhu normal, AC OFF, Heater OFF"); // Kirim status ke virtual pin V2 Blynk
}
}