#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <FirebaseESP32.h> // Use FirebaseESP8266.h if using ESP8266
#include "SdFat.h"
// LCD configuration
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD address 0x27 for 16x2 display
const char* ssid = "moheb";
const char* password = "21579720027196002";
// Firebase credentials
#define FIREBASE_HOST "https://system-6145d-default-rtdb.firebaseio.com" // Replace with your Firebase database URL
#define FIREBASE_AUTH "AIzaSyDWx79lMTu-A5LLdbFeM7uyVArzV0B231g"
FirebaseData firebaseData; // Optional: Use Firebase secret or API key
// Pin assignments
const int dhtPin = 16; // GPIO16 for DHT22 data pin
const int red = 13; // Red LED
const int green = 12; // Green LED
const int buzzer = 25; // Buzzer
// DHT sensor configuration
#define DHTTYPE DHT22 // Specify the sensor type
DHT dht(dhtPin, DHTTYPE);
#define CS_PIN 21 // Chip select pin for SD card
#define SPI_SPEED SD_SCK_MHZ(4) // SPI speed for SD card
// Declare SD card object
SdFat sd;
void setup() {
WiFi.begin(ssid, password);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nConnected to Wi-Fi");
// Firebase initialization
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
// Pin configurations
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(buzzer, OUTPUT);
// Initialize DHT sensor
dht.begin();
// Initialize Serial Monitor for debugging
Serial.begin(115200); // Serial monitor baud rate
// Initialize SD card
if (!sd.begin(CS_PIN, SPI_SPEED)) {
if (sd.card()->errorCode()) {
Serial.println("SD initialization failed.");
} else if (sd.vol()->fatType() == 0) {
Serial.println("Can't find a valid FAT16/FAT32 partition.");
} else {
Serial.println("Can't determine error type");
}
return; // Exit if SD card initialization fails
}
// Initialize LCD
lcd.init();
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("DHT22 Temp Sensor");
delay(2000);
lcd.clear();
// SD Card initialization succeeded
Serial.println("SD Card Initialized");
}
void loop() {
// Read temperature from DHT22
float temperatureC = dht.readTemperature();
if (Firebase.setString(firebaseData, "/alerts/message", "Fire detected!")) {
Serial.println("Message sent to Firebase");
} else {
Serial.println("Failed to send message: " + firebaseData.errorReason());
}
// Validate sensor reading
if (isnan(temperatureC)) {
Serial.println("Failed to read from DHT22 sensor!");
lcd.setCursor(0, 0);
lcd.print("Sensor Error! ");
lcd.setCursor(0, 1);
lcd.print("Check Wiring ");
delay(2000); // Wait 2 seconds before retrying
return;
}
// Debugging: Print temperature to Serial Monitor
Serial.print("Temperature (C): ");
Serial.println(temperatureC);
// Update LCD with the current temperature
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatureC, 1); // Display temperature with 1 decimal place
lcd.print(" C ");
// Open file on SD card to log data
File dataFile = sd.open("temp_log.txt", FILE_WRITE);
if (dataFile) {
// Write temperature data with timestamp to the file
dataFile.print("Temp: ");
dataFile.print(temperatureC, 1);
dataFile.println(" C");
dataFile.close(); // Don't forget to close the file to save data
Serial.println("Temperature logged to SD card.");
} else {
Serial.println("Error opening temp_log.txt");
}
// Check temperature threshold and act accordingly
if (temperatureC > 76.0) { // Adjust threshold as needed
digitalWrite(red, HIGH); // Turn on red LED
digitalWrite(green, LOW); // Turn off green LED
digitalWrite(buzzer, HIGH); // Turn on buzzer
lcd.setCursor(0, 1);
lcd.print("High Temp Alert!");
} else {
digitalWrite(red, LOW); // Turn off red LED
digitalWrite(green, HIGH); // Turn on green LED
digitalWrite(buzzer, LOW); // Turn off buzzer
lcd.setCursor(0, 1);
lcd.print("Temp Normal ");
}
delay(2000); // Update every 2 seconds
}