#define BLYNK_TEMPLATE_ID "TMPL6cQvnArgB"
#define BLYNK_TEMPLATE_NAME "IOT"
#define BLYNK_AUTH_TOKEN "ZJBY3Sdhpq-Xn2zhhmzv9uzJoMWUwQgM"
#include <WiFi.h>
#include <DHT.h>
#include <ESP32Servo.h>
#include <BlynkSimpleEsp32.h>
#define DHTPIN 15 // Pin của DHT22
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define TRIG_PIN 16 // Pin Trig của HC-SR04
#define ECHO_PIN 17 // Pin Echo của HC-SR04
#define LED_DO 2 // Pin của LED đỏ
#define LED_XANH 4 // Pin của LED xanh
#define SERVO_PIN 18 // Pin của Servo
const char* ssid = "Wokwi-GUEST";
const char* password = "";
char auth[] = "ZJBY3Sdhpq-Xn2zhhmzv9uzJoMWUwQgM"; // Blynk auth token
DHT dht(DHTPIN, DHTTYPE);
Servo myservo;
float temperatureThreshold = 25.0; // Ngưỡng nhiệt độ
void setup() {
Serial.begin(115200);
// Kết nối WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
// Khởi động Blynk
Blynk.begin(auth, ssid, password);
// Cài đặt các pin
pinMode(LED_DO, OUTPUT);
pinMode(LED_XANH, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Khởi động DHT sensor
dht.begin();
// Khởi động servo
myservo.attach(SERVO_PIN);
}
void loop() {
Blynk.run();
float temp = dht.readTemperature();
float humi = dht.readHumidity();
// Kiểm tra nhiệt độ và điều khiển LED đỏ
if (temp < temperatureThreshold) {
digitalWrite(LED_DO, HIGH);
delay(500);
digitalWrite(LED_DO, LOW);
delay(500);
}
// Kiểm tra khoảng cách và điều khiển LED xanh và servo
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 / 2) / 29.1; // Tính khoảng cách
if (distance > 200) {
digitalWrite(LED_XANH, HIGH);
myservo.write(90); // Quay servo đến góc 90 độ
delay(1000);
myservo.write(180); // Quay servo về góc 0 độ
} else {
digitalWrite(LED_XANH, LOW);
}
// Gửi dữ liệu lên Blynk
Blynk.virtualWrite(V0, temp);
Blynk.virtualWrite(V1, humi);
Blynk.virtualWrite(V2, distance);
delay(2000); // Đợi 2 giây trước khi lặp lại
}