#define BLYNK_TEMPLATE_ID "TMPL3KdvY3Phx"
#define BLYNK_TEMPLATE_NAME "Test1"
#define BLYNK_AUTH_TOKEN "TkqQq1yVyAOIxiUmLsHT6PdIw1n_Q_gl"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define PIR_PIN 27
#define RELAY1 26 // PIR + Blynk
#define RELAY2 25 // Blynk only
#define RELAY3 33 // Blynk only
#define RELAY4 32 // Optional
#define BUZZER 14
#define RED_LED 12
#define GREEN_LED 13
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
bool pirDetected = false;
bool blynkRelay1 = false;
BLYNK_WRITE(V0) { blynkRelay1 = param.asInt(); }
BLYNK_WRITE(V1) { digitalWrite(RELAY2, param.asInt()); }
BLYNK_WRITE(V2) { digitalWrite(RELAY3, param.asInt()); }
void blinkRedLED() {
if (!pirDetected) {
digitalWrite(RED_LED, HIGH);
delay(300);
digitalWrite(RED_LED, LOW);
delay(300);
}
}
void readSensors() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (isnan(temp) || isnan(hum)) return;
Blynk.virtualWrite(V3, temp);
Blynk.virtualWrite(V4, hum);
if (temp >= 55) {
digitalWrite(BUZZER, HIGH);
Blynk.logEvent("temp_alert", "High Temperature Detected!");
} else {
digitalWrite(BUZZER, LOW);
}
}
void checkPIR() {
pirDetected = digitalRead(PIR_PIN);
if (pirDetected) {
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RELAY1, LOW); // ON
} else {
digitalWrite(GREEN_LED, LOW);
if (blynkRelay1)
digitalWrite(RELAY1, LOW); // ON
else
digitalWrite(RELAY1, HIGH); // OFF
}
}
void setup() {
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
dht.begin();
pinMode(PIR_PIN, INPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(RELAY1, HIGH); // All off initially
digitalWrite(RELAY2, HIGH);
digitalWrite(RELAY3, HIGH);
digitalWrite(RELAY4, HIGH);
timer.setInterval(1000L, readSensors);
timer.setInterval(500L, checkPIR);
}
void loop() {
Blynk.run();
timer.run();
blinkRedLED(); // only blinks if no motion
}