Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

ESP32-Based Wi-Fi Temperature and Humidity Monitor with LCD Display and Buzzer

View and Edit Project In Cirkit DesignerImage of ESP32-Based Wi-Fi Temperature and Humidity Monitor with LCD Display and Buzzer

Circuit Documentation

Summary

This circuit is designed to measure temperature and humidity using a DHT11 sensor and display the readings on a 16x2 I2C LCD screen. Additionally, it includes a piezo buzzer for audio alerts. The entire system is controlled by an ESP32 microcontroller.

Component List

LCD Screen 16x2 I2C

Piezo Buzzer

DHT11 Humidity and Temperature Sensor

ESP32 38 PINS

Wiring Details

LCD Screen 16x2 I2C

Piezo Buzzer

DHT11 Humidity and Temperature Sensor

ESP32 38 PINS

Code Documentation

Code for ESP32

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>

// إعداد LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27

// إعداد حساس DHT
#define DHTPIN 15      // توصيل الحساس بالمنفذ D15
#define DHTTYPE DHT11  // نوع الحساس
DHT dht(DHTPIN, DHTTYPE);

// الوقت
unsigned long previousMillis = 0;
int seconds = 0;
int minutes = 0;
int hours = 12; // وقت ابتدائي
bool isPM = false; // AM/PM

void setup() {
  // إعداد الاتصال التسلسلي
  Serial.begin(115200);

  // إعداد الشاشة
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Initializing...");
  delay(2000);
  lcd.clear();

  // إعداد الحساس
  dht.begin();
}

void loop() {
  // تحديث الوقت كل ثانية
  if (millis() - previousMillis >= 1000) {
    previousMillis = millis();
    updateTime();
  }

  // قراءة درجة الحرارة
  float temperature = dht.readTemperature();
  if (isnan(temperature)) {
    Serial.println("Failed to read temperature!");
    temperature = 0.0; // في حال الخطأ
  }

  // عرض الوقت ودرجة الحرارة
  displayTimeAndTemperature(temperature);

  delay(100); // تأخير بسيط للاستقرار
}

void updateTime() {
  seconds++;
  if (seconds >= 60) {
    seconds = 0;
    minutes++;
    if (minutes >= 60) {
      minutes = 0;
      hours++;
      if (hours == 12) {
        isPM = !isPM; // تبديل AM/PM عند الساعة 12
      }
      if (hours > 12) {
        hours = 1; // إعادة الساعات بعد 12
      }
    }
  }
}

void displayTimeAndTemperature(float temperature) {
  // عرض الوقت
  lcd.setCursor(0, 0);
  lcd.print("Time: ");
  if (hours < 10) lcd.print("0");
  lcd.print(hours);
  lcd.print(":");
  if (minutes < 10) lcd.print("0");
  lcd.print(minutes);
  lcd.print(":");
  if (seconds < 10) lcd.print("0");
  lcd.print(seconds);
  lcd.print(isPM ? " PM" : " AM");

  // عرض درجة الحرارة
  lcd.setCursor(0, 1);
  lcd.print("Temp: ");
  lcd.print(temperature, 1);
  lcd.print(" C");
}

This code initializes the LCD screen and the DHT11 sensor, reads the temperature from the sensor, and displays the time and temperature on the LCD screen. The time is updated every second, and the temperature is read and displayed continuously.