#include <FirebaseESP32.h>
#include <DHT.h>
#define FIREBASE_HOST "https://dht22-580d5-default-rtdb.firebaseio.com/"
#define FIREBASE_AUTH "qke6WZXOBxdRv99UGonOe2Z6wYCkKOXLbirj9u02"
// Định nghĩa mã xác thực Firebase để xác minh quyền truy cập.
const int led_1 = 32;
#define WIFI_SSID "Wokwi-GUEST" // Thay đổi tên wifi của bạn
#define WIFI_PASSWORD "" // Thay đổi password wifi của bạn
#define DHTPIN 15 // Chân dữ liệu của DHT 22 , với NodeMCU chân D5 GPIO là 15
#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);// Khai báo một đối tượng DHT với chân dữ liệu và loại cảm biến đã được định nghĩa trước đó.
FirebaseData fbdo;
void setup() {
pinMode(led_1, OUTPUT);
Serial.begin(9600);// Khởi tạo đối tượng Serial với tốc độ truyền 9600 baud.
delay(1000);
WiFi.begin (WIFI_SSID, WIFI_PASSWORD);// Bắt đầu kết nối WiFi.
Serial.print("Dang ket noi");// In ra màn hình kết nối đang được thực hiện.
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");//đây là lệnh in một dấu chấm trên Serial Monitor của Arduino IDE, để biểu thị rằng thiết bị đang kết nối WiFi.
delay(500);
}
dht.begin();//đây là lệnh khởi động cảm biến DHT22, để thiết bị ESP32 có thể đọc được nhiệt độ và độ ẩm từ cảm biến.
Serial.println ("");//đây là lệnh in một dòng trống trên Serial Monitor
Serial.println ("Da ket noi WiFi!");// đây là lệnh in ra màn hình Serial Monitor thông báo rằng thiết bị đã kết nối thành công với một mạng WiFi.
Serial.println(WiFi.localIP());//đây là lệnh in ra địa chỉ IP của thiết bị ESP32 trên mạng WiFi đã kết nối.
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);// đây là lệnh khởi tạo thư viện FirebaseESP32 để kết nối với Firebase Realtime Database, với các thông tin truy cập là FIREBASE_HOST và FIREBASE_AUTH.
}
void loop() {
float h = dht.readHumidity();//Lấy giá trị(đọc) độ ẩm từ cảm biến DHT22.
float t = dht.readTemperature(); // Lấy giá trị(đọc) nhiệt độ từ cảm biến DHT22.
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");// Kiểm tra xem giá trị đọc từ cảm biến có hợp lệ hay không. Nếu không hợp lệ, in ra thông báo lỗi và thoát khỏi hàm.
return;
}
Serial.print("Nhiet do: ");
Serial.print(t);
Serial.print("*C ");
Serial.print("Do am: ");
Serial.print(h);
Serial.println("% ");
// In giá trị nhiệt độ và độ ẩm lên Serial Monitor.
Firebase.setFloat( fbdo,"Nhiet do", t);
Firebase.setFloat ( fbdo,"Do am", h);
// Đẩy giá trị nhiệt độ và độ ẩm lên Firebase Realtime Database thông qua thư viện FirebaseESP3
if(t>=37)
{
digitalWrite(led_1, HIGH);
delay(100);
digitalWrite(led_1, LOW);
delay(100);
}
delay(200);
}
// Dừng lại 200ms trước khi quay trở lại đọc giá trị mới từ cảm biến.