// Định template Blynk
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6Ry2FfQ50"
#define BLYNK_TEMPLATE_NAME "SmartHomeMiniScale"
#define BLYNK_AUTH_TOKEN "iW9hAEDbTf7-BvC5ec7h7334hU9rHgou"
// 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 DEVICE1 12 // Khai báo chân cho thiết bị 1
#define DEVICE2 14 // Khai báo chân cho thiết bị 2
#define DEVICE3 2 // Khai báo chân cho thiết bị 3
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_DEVICE1 = 0; // Định trạng thái cho thiết bị 1
int State_DEVICE2 = 0; // Định trạng thái cho thiết bị 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 thiết bị 1
{
State_DEVICE1 = param.asInt(); // Đọc giá trị từ switch widget Blynk của thiết bị 1
if (State_DEVICE1 == 1)
{// Bật thiết bị 1
digitalWrite(DEVICE1, HIGH);
Serial.println("DEVICE1 ON");
Blynk.virtualWrite(V0, HIGH);
}
else
{// Tắt thiết bị 1
digitalWrite(DEVICE1, LOW);
Serial.println("DEVICE1 OFF");
Blynk.virtualWrite(V0, LOW);
}
}
BLYNK_WRITE (V1) // Hàm blynk điều khiển thiết bị 2
{
int pinValue = param.asInt(); // Đọc giá trị từ Slider widget Blynk của thiết bị 2
ledcWrite(0, pinValue); // Diều chỉnh độ sáng thiết bị 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(DEVICE3, 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(DEVICE1, OUTPUT); // Thiết đặt chân đã gắn cho đèn 1 là output
pinMode(DEVICE3, 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(DEVICE2, 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);
}//