//Định nghĩa các thông số liên quan đến dự án Blynk.
//Đây là thông tin cần thiết để kết nối ESP32 của bạn với dự án Blynk cụ thể*/
#define BLYNK_TEMPLATE_ID "TMPL6d8xmblUT"
#define BLYNK_TEMPLATE_NAME "IOT"
#define BLYNK_AUTH_TOKEN "iFDAZ6OtWpQrgi5l-SsjvLQMCpgxC1vP"
// định nghĩa cách bạn muốn ghi log ra Serial Monitor để theo dõi tình trạng hoạt động của chương trình.
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"
//Đây là định nghĩa liên quan đến cảm biến DHT22. Được sử dụng để đọc độ ẩm và nhiệt độ từ cảm biến.
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
//Định nghĩa tên và mật khẩu của mạng Wi-Fi mà ESP32 sẽ kết nối.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
//Định nghĩa một đối tượng BlynkTimer được sử dụng để quản lý thời gian trong chương trình.
BlynkTimer timer;
//Đây là Auth Token, được sử dụng để xác thực thiết bị với dự án Blynk cụ thể.
char auth[] = BLYNK_AUTH_TOKEN;
//Định nghĩa các chân GPIO được sử dụng
#define LED 4
//Đây là một hàm callback được gọi khi giá trị nút nhấn trên ứng dụng Blynk thay đổi.
//Nếu giá trị của nút nhấn là 1 (được bật), thì đèn LED sẽ được bật (HIGH),
//ngược lại nếu giá trị là 0 (được tắt), đèn LED sẽ được tắt (LOW).
BLYNK_WRITE(V4){
int value = param.asInt();
value? digitalWrite(LED, HIGH) : digitalWrite(LED, LOW);
}
//Hàm này đọc dữ liệu từ cảm biến DHT22 và sau đó gửi dữ liệu này lên dự án Blynk.
//Điều này cho phép bạn theo dõi độ ẩm và nhiệt độ trên ứng dụng Blynk của bạn.
void sendSensor()
{
// gán giá trị nhiệt độ và độ ẩm vào 2 biến h và t
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// ghi giá trị h lên v1 và t lên v0
Blynk.virtualWrite(V2, h);
Blynk.virtualWrite(V3, t);
}
//Trong hàm setup(), chương trình bắt đầu bằng việc thiết lập kết nối với ứng dụng Blynk,
//khai báo các chân GPIO, khởi động cảm biến DHT22, và thiết lập một bộ định thời (timer)
//để gửi dữ liệu từ cảm biến lên Blynk cứ sau mỗi giây.
void setup()
{
// Debug console
Serial.begin(115200);
delay(1000);
Blynk.begin(auth, ssid, pass);
pinMode(LED, OUTPUT);
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
dht.begin();
// Setup a function to be called every second
timer.setInterval(1000L, sendSensor);
}
//Hàm loop() chứa vòng lặp chính, trong đó Blynk.run() và timer.run() được gọi liên tục để duy trì kết nối với Blynk và quản lý thời gian gửi dữ liệu từ cảm biến.
void loop()
{
Blynk.run();
timer.run();
}