// Định template Blynk
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6FM4EWcj7"
#define BLYNK_TEMPLATE_NAME "SmartHome"
#define BLYNK_AUTH_TOKEN "1KtO5_LdCBE-jGlStExZe_e4JMlbLOQc"
// Khai báo thư viện DHT, Blynk, Wifi
#include <DHTesp.h>
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#include <WiFiClient.h>
// Kết nối Wifi
char auth[] = BLYNK_AUTH_TOKEN;
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
#define LED1 12 // Khai báo chân cho đèn 1
#define LED2 14 // Khai báo chân cho đèn 2
#define LED_DH 2 // Khai báo chân cho đèn giả định điều hòa
WidgetTerminal terminal(V6);// Khai báo chân ảo V6 của terminal Blynk
#define button 5 // Khai báo chân cho công tắc mô phỏng
#define led_canhbao 19 // Khai báo chân cho đèn cảnh báo
int DHT_PIN = 16; // Khai báo chân kết nối với DHT
DHTesp dhtSensor;
int State_LED1 = 0; // Định trạng thái cho đèn 1
int led_state = 0; // Định trạng thái cho đèn 2
int buttonState = 0; // Định trạng thái ban đầu cho công tắc mô phỏng
BLYNK_WRITE (V0) // Hàm Blynk điều khiển đèn 1
{
State_LED1 = param.asInt(); // Đọc giá trị từ switch widget Blynk của đèn 1
if (State_LED1 == 1)
{// Bật đèn 1
digitalWrite(LED1, HIGH);
Serial.println("LED1 ON");
Blynk.virtualWrite(V0, HIGH);
}
else
{// Tắt đèn 1
digitalWrite(LED1, LOW);
Serial.println("LED1 OFF");
Blynk.virtualWrite(V0, LOW);
}
}
BLYNK_WRITE (V1) // Hàm blynk điều khiển đèn 2
{
int pinValue = param.asInt(); // Đọc giá trị từ Slider widget Blynk của đèn 2
ledcWrite(0, pinValue); // Diều chỉnh độ sáng đèn 2
}
BLYNK_WRITE(V4) // Hàm Blynk điều khiển đèn giả định điều hòa
{
int pinValue = param.asInt(); // Đọc giá trị từ Switch Widget Blynk đèn điều hòa
digitalWrite(LED_DH, pinValue); // Điều chỉnh trạng thái của đèn điều hòa
// Hiện trạng thái điều hòa
if (pinValue == HIGH) {
terminal.println("Dieu hoa dang bat");
} else {
terminal.println("Dieu hoa dang tat");
}
terminal.flush();
}
void setup() {
Serial.begin(115200); // đặt baurate
// Kết nối với WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Dang ket noi WiFi...");
}
Serial.println("Da ket noi WiFi");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Thiết đặt chân đã khai báo cho DHT
pinMode(LED1, OUTPUT); // Thiết đặt chân đã gắn cho đèn 1 là output
pinMode(LED_DH, OUTPUT); // Thiết đặt chân đã gắn cho đèn điều hòa là output
pinMode(led_canhbao, OUTPUT); // Thiết đặt chân đã gắn cho đèn cảnh báo là output
pinMode(button, INPUT_PULLUP); // Thiết đặt chân đã gắn cho công tắc là input dạng pull-up
// Khởi tạo PWM cho đèn 2
ledcSetup(0, 5000, 8);
ledcAttachPin(LED2, 0);
// Kết nối Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run(); // Blynk hoạt động
// Đọc giá trị nhiệt độ độ ẩm và hiển thi trên Blynk
float t = dhtSensor.getTemperature();
float h = dhtSensor.getHumidity();
Blynk.virtualWrite(V2,t);
Blynk.virtualWrite(V3,h);
// Hiện giá trị nhiệt độ độ ẩm trên terminal
Serial.print(F("Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.println(F("%"));
// công tắc
buttonState = digitalRead(button); // Đọc trạng thái công tắc
//Bật tắt đèn cảnh báo dựa trên trạng thái công tắc
if (buttonState == LOW) {
digitalWrite(led_canhbao, HIGH);
Blynk.virtualWrite(V5, HIGH);
} else {
digitalWrite(led_canhbao, LOW);
Blynk.virtualWrite(V5, LOW);
}
// Delay giữa các vòng lặp
delay(1500);
}