#define BLYNK_PRINT Serial // Sử dụng đầu ra của Serial để ghi log cho Blynk.
#define BLYNK_TEMPLATE_ID "TMPL6MB7wnkfn"
#define BLYNK_TEMPLATE_NAME "test"
#define BLYNK_AUTH_TOKEN "d2Xa9t1wcDIUoKBR9IJAgy69FErZUrhp"
#include "WiFi.h"
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <string.h>
#include <ESP32Servo.h>
#include "DHT.h"
#define DHTTYPE DHT22 // Loại cảm biến DHT 22
#define DHTPIN 15
DHT dht(DHTPIN, DHTTYPE);
#define LED 27
WidgetLED LED_ON_APP(V2); // Đối tượng LED trên ứng dụng Blynk
int button; // Biến lưu trữ trạng thái của nút trên ứng dụng
#define TRIGGER_PIN 13
#define ECHO_PIN 12
#define SERVO_PIN 14
int pos; // Biến lưu trữ vị trí của servo
BlynkTimer timer; // Đối tượng timer của Blynk
Servo servo; // Đối tượng servo
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN);
timer.setInterval(1000L, checkDistance); // Đặt thời gian cho timer kiểm tra khoảng cách
dht.begin();
Blynk.begin(auth, ssid, pass); // Kết nối WiFi và Blynk
}
// Hàm kiểm tra khoảng cách từ cảm biến siêu âm
void checkDistance() {
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
Blynk.virtualWrite(V1, distance); // Gửi khoảng cách đo được lên ứng dụng Blynk
// Điều khiển servo dựa trên khoảng cách đo được
if (distance < 50) {
servo.write(90); // Đóng cửa (giả sử 90 độ là mở)
}
else {
servo.write(0); // Mở cửa (giả sử 0 độ là đóng)
}
}
// Hàm xử lý khi trạng thái của nút trên ứng dụng Blynk thay đổi
BLYNK_WRITE(V3) {
button = param.asInt();
if(button == 1) {
digitalWrite(LED, HIGH);
LED_ON_APP.on(); // Bật LED trên ứng dụng Blynk
} else {
digitalWrite(LED, LOW);
LED_ON_APP.off(); // Tắt LED trên ứng dụng Blynk
}
}
void loop() {
checkDistance();
Blynk.run(); // Thực hiện các lệnh Blynk
timer.run(); // Thực hiện timer của Blynk
float t = dht.readTemperature(); // Đọc nhiệt độ từ cảm biến DHT22
float h = dht.readHumidity(); // Đọc độ ẩm từ cảm biến DHT22
// Kiểm tra dữ liệu đọc có hợp lệ không
if (isnan(h) || isnan(t)) {
delay(500);
Serial.println("Không đọc được từ cảm biến DHT!\n");
return;
}
// Gửi dữ liệu nhiệt độ và độ ẩm lên ứng dụng Blynk
Blynk.virtualWrite(V0, t);
Blynk.virtualWrite(V4, h);
Serial.print("\n");
Serial.print("Độ ẩm: " + String(h) + "%");
Serial.print("\t");
Serial.print("Nhiệt độ:" + String(t) + " C");
delay(2000);
}