#include <WiFi.h>
#include <Firebase_ESP_Client.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <Wire.h>
// WiFi credentials
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Firebase credentials
#define API_KEY "AIzaSyAcTikrmEPCytcrbT_jz58s9jnZvpIvhcc" // Replace with Firebase Web API Key
#define DATABASE_URL "https://senson-reading-default-rtdb.asia-southeast1.firebasedatabase.app/" // Replace with your Firebase RTDB URL
#define USER_EMAIL "[email protected]"
#define USER_PASSWORD "Gowthamasairaj@12345"
// DHT Sensor
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// LCD (I2C Address 0x27, 16x2)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// I2C pins
#define I2C_SDA 21
#define I2C_SCL 22
// LED pin
#define LED_PIN 2
// Firebase objects
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
void setup() {
Serial.begin(115200);
// Initialize I2C with explicit pins
Wire.begin(I2C_SDA, I2C_SCL);
// Initialize DHT
dht.begin();
// Initialize LCD
lcd.init();
lcd.backlight();
// Initialize LED
pinMode(LED_PIN, OUTPUT);
// Connect WiFi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Connected!");
// Firebase config
config.api_key = API_KEY;
config.database_url = DATABASE_URL;
// Set user credentials
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
// Assign Firebase callback (optional)
fbdo.setResponseSize(4096);
// Initialize Firebase
Firebase.begin(&config, &auth);
Firebase.reconnectWiFi(true);
lcd.setCursor(0, 0);
lcd.print("Heatwave Alert");
delay(2000);
lcd.clear();
}
void loop() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (isnan(temp) || isnan(hum)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Temp: ");
Serial.print(temp);
Serial.print(" °C, Hum: ");
Serial.print(hum);
Serial.println(" %");
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(temp);
lcd.print("C ");
lcd.setCursor(0, 1);
if (temp > 35) {
lcd.print("Heatwave ALERT! ");
digitalWrite(LED_PIN, HIGH);
delay(300);
digitalWrite(LED_PIN, LOW);
delay(300);
} else {
lcd.print("Normal Condition");
digitalWrite(LED_PIN, LOW);
}
// Upload data to Firebase (new API format)
if (Firebase.ready()) {
if (!Firebase.RTDB.setFloat(&fbdo, "/heatwave/temperature", temp)) {
Serial.println("Temp upload FAILED: " + fbdo.errorReason());
}
if (!Firebase.RTDB.setFloat(&fbdo, "/heatwave/humidity", hum)) {
Serial.println("Humidity upload FAILED: " + fbdo.errorReason());
}
if (!Firebase.RTDB.setString(&fbdo, "/heatwave/status", (temp > 35) ? "Heatwave Alert" : "Normal")) {
Serial.println("Status upload FAILED: " + fbdo.errorReason());
}
}
delay(2000);
}