IoT-Based Smart Home Automation System Using ESP32
IoT-Based Smart Home Automation System Using ESP32 file Rp7tbpqpitECHnJBpdH81d

IoT-Based Smart Home Automation System Using ESP32

1. Introduction

This project demonstrates how to build a Wi-Fi-enabled Smart Home Automation System using an ESP32 microcontroller. The system allows users to control home appliances via a web dashboard or mobile app using MQTT or HTTP protocols.

Real-World Applications:

  • Remote Home Automation – Control lights, fans, and other appliances via the internet.
  • Energy Management – Monitor power usage and optimize consumption.
  • Security Systems – Integrate motion sensors and alarms for added security.

2. Learning Objectives

By the end of this project, you will:
✅ Learn how to connect ESP32 to Wi-Fi and MQTT servers.
✅ Understand relay control for AC appliances.
✅ Develop a web-based control dashboard using HTML and JavaScript.
✅ Implement sensors (DHT11 for temperature/humidity).
✅ Learn about IoT protocols (MQTT, HTTP).


3. Tools & Components Required

Hardware:

  • ESP32 Dev Kit (Wi-Fi & Bluetooth support)
  • 4-Channel Relay Module (for AC appliance control)
  • DHT11/DHT22 Sensor (Temperature & Humidity monitoring)
  • AC Bulb & Fan (as appliances for testing)
  • 5V Power Supply
  • Jumper Wires, Breadboard

Software:

  • Arduino IDE (Programming ESP32)
  • Blynk App / Web Dashboard (for GUI control)
  • MQTT Broker (like Mosquitto)

4. Background & Key Concepts

ESP32 Overview

The ESP32 is a powerful microcontroller with built-in Wi-Fi & Bluetooth, making it ideal for IoT applications. It has GPIO pins to control sensors and relays.

Relay Module for AC Control

A relay acts as an electronic switch to control high-voltage appliances. The ESP32 sends LOW or HIGH signals to activate or deactivate the relay.

MQTT Protocol

MQTT (Message Queuing Telemetry Transport) is a lightweight IoT protocol used for communication between devices. The ESP32 acts as a client publishing or subscribing to topics via an MQTT broker (like Mosquitto).


5. Circuit Diagram & Wiring

ESP32 to Relay Module Connection

  • Connect ESP32 GPIO5 to Relay IN1
  • Connect ESP32 GPIO18 to Relay IN2
  • Connect ESP32 GPIO19 to Relay IN3
  • Connect ESP32 GPIO21 to Relay IN4
  • Connect ESP32 GND to Relay GND
  • Connect ESP32 5V to Relay VCC

ESP32 to DHT11 Sensor

  • Connect ESP32 GPIO4 to DHT11 Data Pin
  • Connect ESP32 3.3V to DHT11 VCC
  • Connect ESP32 GND to DHT11 GND

6. Step-by-Step Implementation

Step 1: Install Required Libraries

Open Arduino IDE, go to Library Manager, and install:

  • ESP32WiFi.h (for Wi-Fi connectivity)
  • Adafruit MQTT (for MQTT)
  • DHT Sensor Library (for temperature/humidity readings)

Step 2: Connect ESP32 to Wi-Fi

#include <WiFi.h>

const char* ssid = "Your_WiFi_Name";
const char* password = "Your_WiFi_Password";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting...");
  }
  Serial.println("Connected to WiFi");
}

Step 3: Publish & Subscribe to MQTT Broker

#include <WiFiClient.h>
#include <PubSubClient.h>

WiFiClient espClient;
PubSubClient client(espClient);

const char* mqtt_server = "broker.hivemq.com";  // Free MQTT broker

void reconnect() {
  while (!client.connected()) {
    Serial.println("Attempting MQTT connection...");
    if (client.connect("ESP32Client")) {
      client.subscribe("home/relay1");
    }
  }
}

void setup() {
  WiFi.begin(ssid, password);
  client.setServer(mqtt_server, 1883);
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();
}

Step 4: Controlling the Relay via MQTT Messages

#define RELAY_PIN 5

void callback(char* topic, byte* message, unsigned int length) {
  if (String(topic) == "home/relay1") {
    if (message[0] == '1') {
      digitalWrite(RELAY_PIN, HIGH);
    } else {
      digitalWrite(RELAY_PIN, LOW);
    }
  }
}

void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  client.setCallback(callback);
}

Step 5: Read DHT11 Sensor & Send Data to MQTT

#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  dht.begin();
}

void loop() {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  
  client.publish("home/temp", String(temperature).c_str());
  client.publish("home/humidity", String(humidity).c_str());
  
  delay(5000);
}

7. Testing & Debugging Tips

ESP32 not connecting to Wi-Fi? Double-check SSID and password.
Relays not working? Ensure relay module gets 5V and is correctly wired.
MQTT messages not received? Verify the MQTT broker is running and check topic names.
DHT11 sensor not responding? Use a 4.7kΩ pull-up resistor on the data pin.


8. Extensions & Future Improvements

  • Add a Web Dashboard: Use HTML/CSS & WebSockets for real-time updates.
  • Use Blynk for App Control: Control relays via a mobile app.
  • Energy Monitoring: Add an ACS712 current sensor to track power consumption.
  • Voice Control Integration: Connect with Google Assistant/Alexa using IFTTT.

9. Conclusion

This project demonstrates how to create a Wi-Fi-enabled home automation system using ESP32, MQTT, and relays. By expanding this setup with sensors, energy monitoring, or cloud dashboards, you can develop a fully functional smart home system. 🚀

Would you like circuit diagrams or an app interface guide for this? Let me know! 😊