#include <WiFi.h> // Thư viện kết nối Wi-Fi cho ESP32
#include <FirebaseESP32.h> // Thư viện Firebase cho ESP32
#include <DHT.h> // Thư viện DHT cho cảm biến DHT11/DHT22
// Khai báo thông tin Wi-Fi và Firebase
#define FIREBASE_HOST "https://dht11-21d4f-default-rtdb.firebaseio.com/" // URL Firebase Realtime Database
#define FIREBASE_AUTH "KbZ27wtITb02oIUAIjqhC105oxUogH6zStYydLqK" // Firebase Secret
#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
// Khai báo chân kết nối DHT
#define DHTPIN 14 // Chân dữ liệu của DHT 22
#define DHTTYPE DHT22 // DHT 22
// Khởi tạo các đối tượng
DHT dht(DHTPIN, DHTTYPE);
// Firebase
FirebaseData fbdo;
FirebaseAuth auth; // Đối tượng xác thực Firebase
FirebaseConfig config; // Đối tượng cấu hình Firebase
void setup() {
Serial.begin(115200);
// Kết nối WiFi
Serial.println("Dang ket noi WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi da ket noi!");
// Cấu hình Firebase
config.host = FIREBASE_HOST;
config.signer.tokens.legacy_token = FIREBASE_AUTH;
// Bắt đầu Firebase với cấu hình
Firebase.begin(&config, &auth);
// Khởi động cảm biến DHT
dht.begin();
}
void loop() {
// Đọc nhiệt độ và độ ẩm từ cảm biến DHT
float h = dht.readHumidity(); // Độ ẩm (%)
float t = dht.readTemperature(); // Nhiệt độ (°C)
// Kiểm tra giá trị hợp lệ của cảm biến
if (!isnan(h) && !isnan(t)) {
Serial.printf("Nhiệt độ: %.2f °C, Độ ẩm: %.2f %%", t, h);
// Gửi dữ liệu lên Firebase
if (Firebase.setFloat(fbdo, "/Nhiet_Do", t)) { // Cập nhật nhiệt độ
Serial.println("\n\rGửi nhiệt độ thành công!");
} else {
Serial.println("Lỗi gửi nhiệt độ: ");
Serial.println(fbdo.errorReason().c_str());
}
if (Firebase.setFloat(fbdo, "/Do_Am", h)) { // Cập nhật độ ẩm
Serial.println("Gửi độ ẩm thành công!\n\r");
} else {
Serial.println("Lỗi gửi độ ẩm: ");
Serial.println(fbdo.errorReason().c_str());
}
} else {
Serial.println("Không đọc được dữ liệu từ cảm biến DHT!");
}
delay(1000); // Delay 1 giây trước khi đọc lại dữ liệu
}