#include <WiFi.h>
#include <DHT.h>
// Thay đổi SSID và mật khẩu theo mạng Wi-Fi của bạn
const char* ssid = "Wokwi-GUEST"; // Mạng Wi-Fi
const char* password = ""; // Mật khẩu Wi-Fi
#define BLYNK_TEMPLATE_ID "TMPL6q2LMdFlF"
#define BLYNK_TEMPLATE_NAME "Quickstart Template"
#include <BlynkSimpleEsp32.h>
const char* auth = "y6EUogbvXLcD65cVunyz7uZxi9_8k86m"; // Thay đổi với Auth Token của bạn từ Blynk
// Đèn
int analogPinLDR = 12; // Chân đọc tín hiệu analog từ AO
int digitalPinLDR = 14; // Chân đọc tín hiệu số từ DO
int ledPin = 2; // Chân điều khiển đèn (LED hoặc rơ-le)
int thresholdLDR = 500; // Ngưỡng ánh sáng để bật/tắt đèn
// Quạt
#define DHTPIN 27 // Chân DATA của DHT22 nối với GPIO 27
#define DHTTYPE DHT22 // DHT22
#define RELAY_quat 0 // Chân điều khiển Relay nối với GPIO 0
int TEMP_THRESHOLD = 30; // Ngưỡng nhiệt độ để bật Relay (30°C)
DHT dht(DHTPIN, DHTTYPE);
// Cửa
#define TRIG_PIN 16 // Chân Trig của HC-SR04
#define ECHO_PIN 17 // Chân Echo của HC-SR04
#define RELAY_cua 4 // Chân điều khiển Relay
void setup() {
// WiFi
Serial.begin(115200);
WiFi.begin(ssid, password); // Kết nối đến Wi-Fi
// Kết nối tới Wi-Fi
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected to WiFi!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Khởi tạo Blynk
Blynk.begin(auth, ssid, password);
// Đèn
pinMode(ledPin, OUTPUT);
pinMode(digitalPinLDR, INPUT);
// Quạt
pinMode(RELAY_quat, OUTPUT);
digitalWrite(RELAY_quat, HIGH); // Tắt Relay lúc khởi động
// Cửa
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELAY_cua, OUTPUT);
digitalWrite(RELAY_cua, HIGH); // Tắt Relay lúc khởi động
dht.begin();
}
void loop() {
Blynk.run(); // Chạy Blynk
// Đèn
int lightValue = analogRead(analogPinLDR);
Serial.print("Analog Value: ");
Serial.println(lightValue);
int digitalValueLDR = digitalRead(digitalPinLDR);
Serial.print("Digital LDR Value : ");
Serial.println(digitalValueLDR);
// Điều khiển đèn dựa trên giá trị ánh sáng analog
if (lightValue < thresholdLDR) {
digitalWrite(ledPin, HIGH); // Bật đèn khi ánh sáng yếu
} else {
digitalWrite(ledPin, LOW); // Tắt đèn khi ánh sáng đủ mạnh
}
// Quạt
float temperature = dht.readTemperature();
if (isnan(temperature)) {
Serial.println("Không đọc được nhiệt độ!");
return;
}
Serial.print("Nhiệt độ: ");
Serial.print(temperature);
Serial.println(" °C");
// Điều khiển Relay dựa trên nhiệt độ
if (temperature > TEMP_THRESHOLD) {
digitalWrite(RELAY_quat, LOW); // Bật Relay
Serial.println("Quạt đang BẬT");
} else {
digitalWrite(RELAY_quat, HIGH); // Tắt Relay
Serial.println("Quạt đang TẮT");
}
// Cửa
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("Khoảng cách: ");
Serial.print(distance);
Serial.println(" cm");
// Điều khiển Relay dựa trên khoảng cách
if (distance < 20) {
digitalWrite(RELAY_cua, LOW); // Bật Relay
Serial.println("Cửa đang mở");
} else {
digitalWrite(RELAY_cua, HIGH); // Tắt Relay
Serial.println("Cửa đang đóng");
}
delay(1000); // Đọc lại sau mỗi giây
}
// Định nghĩa hàm Blynk
BLYNK_WRITE(V1) { // Đèn
int value = param.asInt(); // Đọc giá trị từ Blynk
if (value == 1) {
thresholdLDR = 50000; // Tăng ngưỡng để đèn bật
} else {
thresholdLDR = 500; // Giảm ngưỡng để đèn tắt
}
}
BLYNK_WRITE(V2) { // Quạt
int value = param.asInt(); // Đọc giá trị từ Blynk
if (value == 1) {
TEMP_THRESHOLD = 0; // Đặt ngưỡng nhiệt độ cao để quạt bật
} else {
TEMP_THRESHOLD = 30; // Đặt ngưỡng nhiệt độ thấp để quạt tắt
}
}
BLYNK_WRITE(V3) { // Cửa
int value = param.asInt(); // Đọc giá trị từ Blynk
if (value == 1) {
digitalWrite(RELAY_cua, LOW); // Bật Relay
Serial.println("Cửa đang mở");
} else {
digitalWrite(RELAY_cua, HIGH); // Tắt Relay
Serial.println("Cửa đang đóng");
}
}