#include <WiFi.h> // Thư viện kết nối WiFi
#include "DHTesp.h" // Thư viện đọc dữ liệu từ cảm biến nhiệt độ và độ ẩm DHT
#include <ESP32Firebase.h> // Thư viện hỗ trợ tích hợp Firebase với ESP32
// Định nghĩa URL và mã xác thực cho Firebase Realtime Database
#define REFERENCE_URL "https://final-cc6eb-default-rtdb.firebaseio.com/"
#define FIREBASE_AUTH "mZhQDG6N56S4Tc2aiZGXh2DoQTdhdBK0wnoUlBpV"
const int DHT_PIN = 14; // Chân kết nối với cảm biến DHT
const char* WIFI_NAME = "Wokwi-GUEST"; // Tên mạng WiFi
const char* WIFI_PASSWORD = ""; // Mật khẩu mạng WiFi
const int relay = 4;
int BTN = 15; //khai báo chân nút nhấn gắn vào chân 15 esp32
int led1 = 23; // khai báo chân led 1 gắn vào chân 23 esp32
int led2 = 21; // khai báo chân led 1 gắn vào chân 21 esp32
DHTesp dhtSensor; // Tạo đối tượng cảm biến DHT
WiFiClient client; // Tạo đối tượng client WiFi
Firebase firebase(REFERENCE_URL); // Khởi tạo đối tượng Firebase với URL đã định nghĩa
void setup() {
pinMode(BTN, INPUT); // khai báo nút nhấn là ngõ vào
pinMode(led1, OUTPUT);
Serial.begin(115200); // Khởi tạo Serial với baud rate 115200 để debug
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // Cấu hình cảm biến DHT
WiFi.begin(WIFI_NAME, WIFI_PASSWORD); // Kết nối tới WiFi
while (WiFi.status() != WL_CONNECTED){
delay(1000); // Đợi cho đến khi kết nối WiFi thành công
Serial.println("Wifi not connected"); // In ra thông báo chưa kết nối WiFi
}
Serial.println("Wifi connected !"); // Thông báo kết nối WiFi thành công
Serial.println("Local IP: " + String(WiFi.localIP())); // In ra địa chỉ IP cục bộ
WiFi.mode(WIFI_STA); // Đặt chế độ WiFi thành Station
// float t = firebase.getFloat("Temp");
// float h = firebase.getFloat("Humidity");
}
void loop() {
int buttonState = digitalRead(BTN);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float h = data.humidity; // Đọc độ ẩm từ cảm biến
float t = data.temperature; // Đọc nhiệt độ từ cảm biến
if (isnan(h) || isnan(t)) { // Kiểm tra dữ liệu có hợp lệ không
Serial.println("Failed to read from DHT sensor!"); // Thông báo lỗi đọc dữ liệu
return;
}
if((t > 50)&(h <60))
{
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
}
Serial.println("Temp: " + String(t, 2) + "°C"); // In nhiệt độ ra màn hình Serial
Serial.println("Humidity: " + String(h, 1) + "%"); // In độ ẩm ra màn hình Serial
Serial.println("---");
firebase.setFloat("Humidity", h); // Gửi dữ liệu độ ẩm lên Firebase
firebase.setFloat("Temp", t); // Gửi dữ liệu nhiệt độ lên Firebase
delay(200); // Thời gian chờ trước khi đo lần tiếp theo
}