#include <FirebaseESP32.h>
#include <DHT.h>
#define FIREBASE_HOST "https://esp32-53975-default-rtdb.asia-southeast1.firebasedatabase.app/"
#define FIREBASE_AUTH "ZiH5fKGuDTPiRilpPGb0NQXCPG1ZepveZ5LfgGCC"
// Định nghĩa mã xác thực Firebase để xác minh quyền truy cập.
const int led_1 = 32;
const int LED2 = 33;
#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
#define BUZZER_PIN 12 // ESP32 pin GPIO18 connected to piezo buzzer
const int melody[] = {262, 196, 196, 220, 196, 262, 330}; // Melody đơn giản
#define DHTPIN1 2 // Chân dữ liệu của DHT 22 , với NodeMCU chân D5 GPIO là 15
#define DHTTYPE1 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 đó.
DHT dht1(DHTPIN1, DHTTYPE1);
FirebaseData fbdo;
FirebaseData fbdo1;
void setup() {
Serial.begin(9600);
delay(1000);
pinMode(led_1, OUTPUT);
pinMode(LED2, OUTPUT);
dht.begin();
dht1.begin();
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);
}
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());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
pinMode(BUZZER_PIN, OUTPUT);
noTone(BUZZER_PIN); // Tắt âm thanh ban đầu
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
float ph1 = random(0, 14);
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
float ph2 = random(0, 14);
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Firebase.setFloat( fbdo,"/Nha kinh 1/Nhiet do 1", t);
Firebase.setFloat ( fbdo,"/Nha kinh 1/Do am 1", h);
Firebase.setFloat ( fbdo,"/Nha kinh 1/Do pH 1", ph1);
Serial.print("Nhiet do1: ");
Serial.print(t);
Serial.print("*C ");
Serial.print("Do am1: ");
Serial.print(h);
Serial.println("% ");
Firebase.setFloat( fbdo1,"/Nha kinh 2/Nhiet do 2", t1);
Firebase.setFloat ( fbdo1,"/Nha kinh 2/Do am 2", h1);
Firebase.setFloat ( fbdo1,"/Nha kinh 2/Do pH 2", ph2);
Serial.print("Nhiet do2: ");
Serial.print(t1);
Serial.print("*C ");
Serial.print("Do am2: ");
Serial.print(h1);
Serial.println("% ");
if (Firebase.RTDB.getInt(&fbdo, "/thietbi1/maybom")) {
if (fbdo.dataType() == "int") {
int intValueLed1 = fbdo.intData();
digitalWrite(led_1, intValueLed1);
}
}
if (Firebase.RTDB.getString(&fbdo, "/thietbi2")) {
//if (fbdo.dataType() == "int") {
int intValueLed2 = fbdo.intData();
analogWrite(LED2, intValueLed2 * 255 / 100); // Range 0 - 255
Serial.println(intValueLed2 * 255 / 100);
//}
}
if (Firebase.RTDB.getInt(&fbdo, "/thietbi3/loa")) {
if (fbdo.dataType() == "int") {
int intValueLed1 = fbdo.intData();
//digitalWrite(LED1, intValueLed1);
if(intValueLed1 == 1) {
digitalWrite(BUZZER_PIN, HIGH); // Turn the buzzer on
tone(BUZZER_PIN, 1000, 500);
} else {
digitalWrite(BUZZER_PIN, LOW);
}
}
}
delay(200);
}