#define BLYNK_TEMPLATE_ID "TMPL3pBWjDIrQ"
#define BLYNK_TEMPLATE_NAME "smart city"
#define BLYNK_AUTH_TOKEN "mao9DOaEqiyn5coZ2hr4iC0cZW5tAEAl"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#include <DHT.h>
#define DHTPIN 15 // GPIO15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Pins for Ultrasonic Sensor
#define TRIG_PIN 13
#define ECHO_PIN 12
#define RELAY_PIN 26
#define GAS_THRESHOLD_HIGH 550
#define GAS_THRESHOLD_LOW 450
int usageCount = 0;
bool previousIRState = false;
bool buzzerState = false;
// Pins for LEDs
#define RED_LED 14
#define YELLOW_LED 27
#define GREEN_LED 26
// IR Sensor pin
#define IR_SENSOR_PIN 18
// MQ Sensor (analog)
#define MQ_SENSOR_PIN 34
BLYNK_WRITE(V4) {
int state = param.asInt();
digitalWrite(RELAY_PIN, state);
}
BLYNK_WRITE(V6) {
digitalWrite(RED_LED, param.asInt());
}
BLYNK_WRITE(V7) {
digitalWrite(YELLOW_LED, param.asInt());
}
BLYNK_WRITE(V8) {
digitalWrite(GREEN_LED, param.asInt());
}
// Relay
void setup() {
Serial.begin(9600);
dht.begin();
Blynk.begin(auth, ssid, password);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(IR_SENSOR_PIN, INPUT);
pinMode(MQ_SENSOR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
}
void loop() {
Blynk.run();
// DHT22 Reading
float temp = dht.readTemperature();
float hum = dht.readHumidity();
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print("°C, Humidity: ");
Serial.print(hum);
Serial.println("%");
// Ultrasonic Distance Measurement
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Set LED based on distance
if (distance < 10) {
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, LOW);
} else if (distance < 20) {
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
} else {
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
}
// --- IR Sensor for Usage Count ---
bool currentIRState = digitalRead(IR_SENSOR_PIN) == LOW;
if (currentIRState && !previousIRState) {
usageCount++;
Serial.print("Usage Count: ");
Serial.println(usageCount);
}
previousIRState = currentIRState;
// Read MQ sensor (simplified logic)
int mqValue = analogRead(MQ_SENSOR_PIN);
Serial.print("MQ Sensor Value: ");
Serial.println(mqValue);
// Relay logic based on gas level or temperature
if (!buzzerState && mqValue > GAS_THRESHOLD_HIGH) {
digitalWrite(RELAY_PIN, HIGH);
buzzerState = true;
Serial.println("Buzzer: ON (Gas Detected)");
} else if (buzzerState && mqValue < GAS_THRESHOLD_LOW) {
digitalWrite(RELAY_PIN, LOW);
buzzerState = false;
Serial.println("Buzzer: OFF (Gas Normal)");
}
Blynk.virtualWrite(V0, temp);
Blynk.virtualWrite(V1, hum);
Blynk.virtualWrite(V2, mqValue);
Blynk.virtualWrite(V5, distance);
delay(2000);
}