#define BLYNK_TEMPLATE_ID "TMPL6WBA_4HzR"
#define BLYNK_TEMPLATE_NAME "VU VA DAN"
#define BLYNK_AUTH_TOKEN "2Vxs5CzGweMrI6lHUGynHyuYcuMZ6Uo9"
#include <WiFi.h> // Thư viện WiFi
#include <WiFiClient.h> // Thư viện WiFi Client
#include <BlynkSimpleEsp32.h> // Thư viện Blynk cho ESP32
#include <DHT.h> // Thư viện cảm biến DHT
char auth[] = "2Vxs5CzGweMrI6lHUGynHyuYcuMZ6Uo9"; // Token của Blynk
char ssid[] = "Wokwi-GUEST"; // Tên WiFi
char pass[] = ""; // Mật khẩu WiFi
int button; // Biến lưu trạng thái nút nhấn
#define LED 13 // Định nghĩa chân kết nối LED
WidgetLED LED_blynk(V0); // LED điều khiển qua Blynk (chân V0)
#define DHTTYPE 22 // Định nghĩa loại cảm biến DHT22
#define DHTPIN 15 // Chân kết nối DHT22 (chân 15)
DHT dht(DHTPIN, DHTTYPE);
#define TRIG_PIN 5 // Chân trig kết nối ESP32
#define ECHO_PIN 18 // Chân echo kết nối ESP32
#define LIGHT_SENSOR_PIN 32 // Chân analog cho cảm biến ánh sáng (A0)
BlynkTimer timer;
// Hàm đọc khoảng cách từ cảm biến siêu âm HC-SR04
long readDistance() {
digitalWrite(TRIG_PIN, LOW); // Đảm bảo chân trig thấp trước khi kích hoạt
delayMicroseconds(2);
// Kích hoạt cảm biến bằng cách gửi tín hiệu cao trong 10 microseconds
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Đo thời gian tín hiệu phản hồi từ chân echo
long duration = pulseIn(ECHO_PIN, HIGH);
// Tính toán khoảng cách (Speed of sound = 343 m/s, 1 cm = 29.1 microseconds)
long distance = duration * 0.034 / 2; // chia 2 vì tín hiệu đi và về
return distance;
}
void sendSensor() {
// Hàm đọc nhiệt độ và độ ẩm từ cảm biến DHT
float h = dht.readHumidity(); // Đọc giá trị độ ẩm
float t = dht.readTemperature(); // Đọc giá trị nhiệt độ
if (isnan(h) || isnan(t)) {
// Kiểm tra nếu đọc cảm biến lỗi
Serial.println("Failed to read from DHT sensor!");
return; // Thoát hàm nếu lỗi
}
Blynk.virtualWrite(V2, t); // Gửi nhiệt độ lên Blynk (chân V2)
Serial.print("Temperature: "); // Hiển thị thông tin nhiệt độ
Serial.println(t); // Giá trị nhiệt độ
Blynk.virtualWrite(V3, h); // Gửi độ ẩm lên Blynk (chân V3)
Serial.print("Humidity: "); // Hiển thị thông tin độ ẩm
Serial.println(h); // Giá trị độ ẩm
// Bật LED nếu nhiệt độ lớn hơn 70°C
if (t > 70) {
digitalWrite(LED, HIGH); // Bật LED vật lý
LED_blynk.on(); // Bật LED trên Blynk
} else {
digitalWrite(LED, LOW); // Tắt LED vật lý
LED_blynk.off(); // Tắt LED trên Blynk
}
// Đọc khoảng cách từ cảm biến siêu âm
long distance = readDistance();
Serial.print("Distance: ");
Serial.println(distance); // Hiển thị khoảng cách đo được
// Hiển thị thông báo trên Label widget của Blynk
if (distance < 50) { // Nếu khoảng cách nhỏ hơn 10 cm
Blynk.virtualWrite(V1, "Có vật cản"); // Gửi thông báo "Có vật cản" lên Blynk
} else {
Blynk.virtualWrite(V1, "Không có vật cản"); // Gửi thông báo "Không có vật cản" lên Blynk
}
// Đọc giá trị cảm biến ánh sáng
int lightValue = analogRead(LIGHT_SENSOR_PIN);
Serial.print("Light Intensity: ");
Serial.println(lightValue);
// Gửi giá trị ánh sáng lên Blynk (chân V4)
Blynk.virtualWrite(V5, lightValue);
}
void setup() {
// Cài đặt ban đầu
pinMode(LIGHT_SENSOR_PIN, INPUT);
pinMode(LED, OUTPUT); // Đặt LED làm ngõ ra
pinMode(TRIG_PIN, OUTPUT); // Đặt chân trig làm ngõ ra
pinMode(ECHO_PIN, INPUT); // Đặt chân echo làm ngõ vào
Serial.begin(9600); // Khởi động Serial với tốc độ 9600 baud
dht.begin(); // Khởi động cảm biến DHT
timer.setInterval(1000L, sendSensor); // Thiết lập timer đọc cảm biến mỗi 1 giây
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // Kết nối Blynk qua WiFi
}
void loop() {
// Vòng lặp chính
Blynk.run(); // Xử lý Blynk
timer.run(); // Xử lý Timer
}