#include <ESP32Firebase.h>
#include "DHT.h"
#include <WiFi.h>
// #include "ThingSpeak.h"
#define DATABASE_URL "https://final-c24ce-default-rtdb.firebaseio.com/" // Firebase Realtime Database URL
#define WIFI_SSID "Wokwi-GUEST" // Tên mạng WiFi của bạn
#define WIFI_PASSWORD "" // Mật khẩu WiFi của bạn
// const int myChannelNumber = 2483476;
// const char* myApiKey = "DRGK8GWZHB46XWK6";
// const char* server = "api.thingspeak.com";
// Thông tin Firebase
// #define FIREBASE_HOST "your-project-id.firebaseio.com"
// #define FIREBASE_AUTH "your-database-secret"
// Thiết lập các chân
#define DHTPIN 15
#define DHTTYPE DHT22
#define LDRPIN 34
#define RELAY1 18
#define RELAY2 19
#define RELAY3 21
#define BUTTON1 25
#define BUTTON2 26
#define BUTTON3 27
// Khởi tạo DHT
DHT dht(DHTPIN, DHTTYPE);
// Khởi tạo Firebase Data
Firebase firebase(DATABASE_URL);
WiFiClient client;
void setup() {
Serial.begin(115200);
dht.begin();
// Kết nối WiFi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
// delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Kết nối Firebase
// Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
// Firebase.reconnectWiFi(true);
// Thiết lập chân
pinMode(LDRPIN, INPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(BUTTON1, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(BUTTON3, INPUT_PULLUP);
}
void loop() {
Serial.println("Đang đọc giá trị");
// Đọc giá trị từ DHT22
float temp = dht.readTemperature();
float humi = dht.readHumidity();
int sun = analogRead(LDRPIN);
if (isnan(temp) || isnan(humi)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Điều khiển đèn dựa trên ngưỡng cài đặt
if (temp > 30) {
digitalWrite(RELAY1, HIGH);
} else if (temp < 20) {
digitalWrite(RELAY1, LOW);
}
if (humi < 50) {
digitalWrite(RELAY2, HIGH);
} else if (humi > 70){
digitalWrite(RELAY2, LOW);
}
if (sun < 1000) { // Giả sử ngưỡng ánh sáng thấp sẽ bật đèn
digitalWrite(RELAY3, HIGH);
} else if (sun > 1200) {
digitalWrite(RELAY3, LOW);
}
// Điều khiển đèn bằng nút nhấn
if (digitalRead(BUTTON1) == LOW) {
digitalWrite(RELAY1, !digitalRead(RELAY1));
delay(200); // Debounce
}
if (digitalRead(BUTTON2) == LOW) {
digitalWrite(RELAY2, !digitalRead(RELAY2));
delay(200); // Debounce
}
if (digitalRead(BUTTON3) == LOW) {
digitalWrite(RELAY3, !digitalRead(RELAY3));
delay(200); // Debounce
}
// đọc giá trị từ RELAY
int air = digitalRead(RELAY1);
int water = digitalRead(RELAY2);
int light = digitalRead(RELAY3);
// delay(1000); // Đợi 1 giây trước khi đọc và gửi dữ liệu lần nữa
// Gửi dữ liệu lên Firebase
firebase.setFloat("adj/temp", temp);
firebase.setFloat("adj/humi", humi);
firebase.setInt("adj/sun", sun);
firebase.setFloat("on_off/air", air);
firebase.setFloat("on_off/water", water);
firebase.setInt("on_off/light", light);
// Đọc giá trị từ Firebase
air = firebase.getFloat("on_off/air");
water = firebase.getFloat("on_off/water");
light = firebase.getInt("on_off/light");
Serial.print("Nhiệt độ: ");
Serial.print(temp);
Serial.print("ºC, Độ ẩm: ");
Serial.print(humi);
Serial.print("%, Ánh sáng: ");
Serial.println(sun);
}