#define BLYNK_TEMPLATE_ID "TMPL6xzg-KZXp"
#define BLYNK_TEMPLATE_NAME "Smart Room"
#define BLYNK_AUTH_TOKEN "mMXhCVRm0irfI_UTVkcKmmJdAzyhbxBj"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// WiFi Credentials
char ssid[] = "Wokwi-GUEST"; // Nama WiFi Wokwi
char pass[] = ""; // Password WiFi Wokwi
// Pin Definitions
#define RELAY_LAMP 2 // GPIO untuk Lampu (LED)
#define RELAY_FAN 4 // GPIO untuk Relay Kipas/AC
#define BUTTON_FINGERPRINT 16 // GPIO untuk Tombol Sidik Jari
#define BUTTON_MANUAL 14 // GPIO untuk Tombol Manual
#define DHT_PIN 15 // GPIO untuk Sensor DHT22 (Data Pin)
// DHT Sensor Configuration
#define DHTTYPE DHT22
DHT dht(DHT_PIN, DHTTYPE);
// Variabel untuk tombol manual (Anti-Bounce)
bool fanState = false;
void setup() {
Serial.begin(115200);
Serial.println("Starting Smart Room System...");
// Inisialisasi koneksi ke Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Inisialisasi Pin sebagai Input/Output
pinMode(RELAY_LAMP, OUTPUT);
pinMode(RELAY_FAN, OUTPUT);
pinMode(BUTTON_FINGERPRINT, INPUT_PULLUP);
pinMode(BUTTON_MANUAL, INPUT_PULLUP);
// Inisialisasi Sensor DHT
dht.begin();
// Matikan Relay pada awal
digitalWrite(RELAY_LAMP, LOW);
digitalWrite(RELAY_FAN, LOW);
}
void loop() {
Blynk.run();
checkFingerprint(); // Fungsi tombol sidik jari
checkManualButton(); // Fungsi tombol manual
sendSensorData(); // Fungsi untuk kirim data suhu dan kelembaban
}
// 🟢 Fungsi untuk Tombol Sidik Jari (Manual Lampu)
void checkFingerprint() {
if (digitalRead(BUTTON_FINGERPRINT) == LOW) {
Serial.println("Fingerprint detected (simulated)!");
digitalWrite(RELAY_LAMP, HIGH); // Nyalakan Lampu
delay(3000); // Tahan selama 3 detik
digitalWrite(RELAY_LAMP, LOW); // Matikan Lampu
}
}
// 🟢 Fungsi untuk Tombol Manual (Manual Kipas/AC)
void checkManualButton() {
if (digitalRead(BUTTON_MANUAL) == LOW) {
Serial.println("Manual button pressed!");
fanState = !fanState; // Toggle state kipas
digitalWrite(RELAY_FAN, fanState);
Serial.print("Manual Fan State: ");
Serial.println(fanState ? "ON" : "OFF");
delay(500); // Debounce delay
}
}
// 🟢 Fungsi untuk Kirim Data Sensor ke Blynk
void sendSensorData() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Kirim data ke Blynk
Blynk.virtualWrite(V2, temperature); // Suhu ke Virtual Pin V2
Blynk.virtualWrite(V3, humidity); // Kelembaban ke Virtual Pin V3
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
delay(2000);
}
// 🟢 Fungsi untuk Kontrol Lampu dari Blynk (Virtual Pin V0)
BLYNK_WRITE(V0) {
int value = param.asInt(); // Baca nilai dari Blynk
digitalWrite(RELAY_LAMP, value);
Serial.print("Lampu: ");
Serial.println(value ? "ON" : "OFF");
}
// 🟢 Fungsi untuk Kontrol Kipas/AC dari Blynk (Virtual Pin V1)
BLYNK_WRITE(V1) {
int value = param.asInt(); // Baca nilai dari Blynk
digitalWrite(RELAY_FAN, value);
Serial.print("Kipas: ");
Serial.println(value ? "ON" : "OFF");
}