#include <ESP32WiFi.h>
#include <FirebaseESP8266.h>
#include <DHT.h>
#define FIREBASE_HOST "doan1-12588-default-rtdb.firebaseio.com"
#define FIREBASE_AUTH "T9GBMhrYapJ1uSnFR2VVhrt4FNHJXqn9SceecEfd"
#define WIFI_SSID "903A1"
#define WIFI_PASSWORD "2003matkhau"
#define DHTPIN 2 // Pin của cảm biến độ ẩm
#define DHTTYPE DHT11 // Loại cảm biến độ ẩm (DHT11/DHT22)
DHT dht(DHTPIN, DHTTYPE);
#define RELAY_PIN 5 // Pin của relay kết nối với máy bơm
#define LED_PIN 4 // Pin của LED để hiển thị trạng thái
#define THRESHOLD_MOISTURE 30 // Ngưỡng độ ẩm cần tưới, điều chỉnh theo nhu cầu
FirebaseData firebaseData;
unsigned long previousMillis = 0;
const long interval = 60000; // Thời gian kiểm tra và cập nhật trạng thái, ở đây là 1 phút
void setup() {
Serial.begin(115200);
delay(10);
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
dht.begin();
// Kết nối WiFi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to the WiFi network");
// Kết nối đến Firebase
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
float humidity = dht.readHumidity(); // Đọc độ ẩm từ cảm biến
if (isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println("%");
// Kiểm tra nếu độ ẩm dưới ngưỡng cần thiết
if (humidity < THRESHOLD_MOISTURE) {
digitalWrite(RELAY_PIN, HIGH); // Bật relay
digitalWrite(LED_PIN, HIGH); // Bật LED
Serial.println("Watering the plants");
// Cập nhật trạng thái lên Firebase
if (Firebase.setInt(firebaseData, "/watering_status", 1)) {
Serial.println("Firebase watering status updated");
} else {
Serial.println("Firebase watering status update failed");
}
} else {
digitalWrite(RELAY_PIN, LOW); // Tắt relay
digitalWrite(LED_PIN, LOW); // Tắt LED
Serial.println("No watering needed");
// Cập nhật trạng thái lên Firebase
if (Firebase.setInt(firebaseData, "/watering_status", 0)) {
Serial.println("Firebase watering status updated");
} else {
Serial.println("Firebase watering status update failed");
}
}
}
delay(1000); // Đợi 1 giây trước khi lặp lại
}