#include <Arduino.h>
#include <WiFi.h>
#include <Firebase_ESP_Client.h>
#include "DHT.h"
#include <Buzzer.h>
// Wi-Fi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Firebase credentials
#define FIREBASE_HOST "https://iot1-a2347-default-rtdb.firebaseio.com/"
#define FIREBASE_AUTH "GS96SBsl2BqEUeIXjuhQWar9idEibllxM5VSwn8A"
// Firebase objects
FirebaseData firebaseData;
FirebaseConfig firebaseConfig;
FirebaseAuth firebaseAuth;
// DHT sensor
#define DHTPIN 15 // Gắn đúng chân cảm biến DHT
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// LED and Buzzer pins
#define LEDPIN 23 // Chân điều khiển LED
#define BUZZERPIN 22 // Chân điều khiển còi
void setup() {
Serial.begin(9600);
pinMode(LEDPIN, OUTPUT);
pinMode(BUZZERPIN, OUTPUT);
digitalWrite(LEDPIN, LOW);
digitalWrite(BUZZERPIN, LOW); // Đảm bảo còi không hú khi mới khởi động
// Connect to Wi-Fi
WiFi.begin(ssid, password);
Serial.println("Connecting to Wi-Fi...");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nWi-Fi connected.");
// Configure Firebase
firebaseConfig.host = FIREBASE_HOST;
firebaseConfig.signer.tokens.legacy_token = FIREBASE_AUTH;
// Initialize Firebase
Firebase.begin(&firebaseConfig, &firebaseAuth);
Firebase.reconnectWiFi(true);
// Initialize DHT sensor
dht.begin();
}
void loop() {
// Read sensor data
float temp = dht.readTemperature();
float hum = dht.readHumidity();
// Validate data
if (isnan(temp) || isnan(hum)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Print data
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print(" °C, Humidity: ");
Serial.print(hum);
Serial.println(" %");
// Send data to Firebase
if (Firebase.RTDB.setFloat(&firebaseData, "/Temperature", temp)) {
Serial.println("Temperature sent successfully.");
}
else {
Serial.println("Failed to send temperature:");
Serial.println(firebaseData.errorReason());
}
if (Firebase.RTDB.setFloat(&firebaseData, "/Humidity", hum)) {
Serial.println("Humidity sent successfully.");
}
else {
Serial.println("Failed to send humidity:");
Serial.println(firebaseData.errorReason());
}
// Send LED and Buzzer status to Firebase
bool ledStatus = (hum > 50); // LED on if humidity > 50%
bool buzzerStatus = (temp > 30); // Buzzer on if temperature > 30°C
if (Firebase.RTDB.setBool(&firebaseData, "/LEDStatus", ledStatus)) {
Serial.println("LED status sent to Firebase.");
}
else {
Serial.println("Failed to send LED status to Firebase:");
Serial.println(firebaseData.errorReason());
}
if (Firebase.RTDB.setBool(&firebaseData, "/BuzzerStatus", buzzerStatus)) {
Serial.println("Buzzer status sent to Firebase.");
}
else {
Serial.println("Failed to send Buzzer status to Firebase:");
Serial.println(firebaseData.errorReason());
}
// LED and Buzzer control based on temperature
if (temp > 30) {
tone(BUZZERPIN,1000);
while(temp>30){
temp=dht.readTemperature();
delay(500);
}
} noTone(BUZZERPIN);
if (hum > 50) {
digitalWrite(LEDPIN, HIGH); // Turn on LED
}
else {
digitalWrite(LEDPIN, LOW); // Turn off LED
}
// Wait 2 seconds
delay(2000);
}