#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h" // Thư viện DHT
// Firebase config
#define FIREBASE_HOST "https://baikiemtra-fabae-default-rtdb.asia-southeast1.firebasedatabase.app/"
#define FIREBASE_AUTH "QM5qZDXZd2eqgRtXUYFQqceoUjpmTeiZ1cDkYdoK"
// Wi-Fi config
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// DHT sensor config
#define DHTPIN 4
#define DHT_TYPE DHT22
// Ultrasonic sensor config
#define TRIG_PIN 33
#define ECHO_PIN 32
// LED and buzzer
#define CHAY_NHA 23
#define LED_XANH 21
float temperature = 0.0;
float humidity = 0.0;
DHT dht(DHTPIN, DHT_TYPE);
void connectWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println(" Connected to Wi-Fi!");
}
float readDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
return (duration * 0.0343) / 2; // Tính khoảng cách theo cm
}
void sendDataToFirebase(float temp, float hum, float distance) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(FIREBASE_HOST) + "/SensorData.json?auth=" + FIREBASE_AUTH;
http.begin(url);
http.addHeader("Content-Type", "application/json");
String payload = "{\"temperature\": " + String(temp) +
", \"humidity\": " + String(hum) +
", \"distance\": " + String(distance) + "}";
int httpCode = http.POST(payload);
Serial.print("HTTP Response Code: ");
Serial.println(httpCode);
http.end();
} else {
Serial.println("Wi-Fi not connected!");
}
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(CHAY_NHA, OUTPUT);
pinMode(LED_XANH, OUTPUT);
Serial.begin(115200);
connectWiFi();
dht.begin(); // Khởi động cảm biến DHT
}
void loop() {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
float distance = readDistance();
if (!isnan(temperature) && !isnan(humidity)) {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.print(" %, Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Điều khiển đèn và còi
if (temperature >= 60) {
digitalWrite(CHAY_NHA, HIGH);
delay(500);
digitalWrite(CHAY_NHA, LOW);
delay(500);
} else {
digitalWrite(CHAY_NHA, LOW);
}
// Điều khiển đèn LED xanh
if (temperature > 10 && temperature < 50 && humidity < 70) {
digitalWrite(LED_XANH, HIGH);
} else {
digitalWrite(LED_XANH, LOW);
}
// Gửi dữ liệu lên Firebase
sendDataToFirebase(temperature, humidity, distance);
} else {
Serial.println("Failed to read from DHT sensor!");
}
delay(5000); // Đợi 5 giây trước khi gửi lại
}