Close Menu
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
Facebook X (Twitter) Instagram
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us
Facebook X (Twitter) Instagram Pinterest YouTube LinkedIn
How To Electronics
  • Articles
    • Learn Electronics
    • Product Review
    • Tech Articles
  • Electronics Circuits
    • 555 Timer Projects
    • Op-Amp Circuits
    • Power Electronics
  • Microcontrollers
    • Arduino Projects
    • STM32 Projects
    • AMB82-Mini IoT AI Camera
    • BLE Projects
  • IoT Projects
    • ESP8266 Projects
    • ESP32 Projects
    • ESP32 MicroPython
    • ESP32-CAM Projects
    • LoRa/LoRaWAN Projects
  • Raspberry Pi
    • Raspberry Pi Projects
    • Raspberry Pi Pico Projects
    • Raspberry Pi Pico W Projects
  • Electronics Calculator
How To Electronics
Home » IoT Home Automation using ESP8266 Web Server
ESP8266 Projects IoT Projects

IoT Home Automation using ESP8266 Web Server

Mamtaz AlamBy Mamtaz AlamUpdated:February 3, 202411 Comments3 Mins Read
Share Facebook Twitter LinkedIn Telegram Reddit WhatsApp
Home Automation Web Server
Share
Facebook Twitter LinkedIn Pinterest Email Reddit Telegram WhatsApp

Overview: Home Automation using ESP8266 Web Server

In this project, we learn how to make IoT Based Home Automation using ESP8266 Web Server. By Home Automation we mean controlling lighting and appliances without any manual switch but using a system that is connected to the Internet. When connected to the Internet, home devices are an important constituent of the Internet of Things (“IoT”).

In this project, we will be using a Local Web Server. A web server is a device that runs websites. It’s a program or a bunch of code that distributes web pages as they are requisitioned. The basic objective of the Web Server is to store, process, and deliver web pages to the users. This intercommunication is done using Hypertext Transfer Protocol (HTTP).

In this Home Automation System, we will control 4 home appliances connected to the Relay using a Local Web Server. The Wifi Module NodeMCU ESP8266 will Receive commands from the Web Page.

Before moving forward with this project, you can check our previous project:
1. Home Automation using NodeMCU & Alexa
2. Wifi & Voice Controlled Home Automation Using NodeMCU & Android
3. IoT Home Automation using Blynk & NodeMCU ESP8266
4. Home Automation using Google Firebase & NodeMCU ESP8266
5. Home Automation with Arduino IoT Cloud & ESP32
6. Industrial Automation using ESP8266 & AWS IoT Core


Bill of Materials

The following are the components required for making this project. All the components can be easily purchased from Amazon. The component purchase link is given below.

S.N.Components NameQuantityPurchase Links
1NodeMCU ESP82661Amazon | AliExpress
2Relay 5V4Amazon | AliExpress
37805 Voltage Regulator IC1Amazon | AliExpress
4Female DC Power Jack DCJ02021Amazon | AliExpress
5Diode 1N40074Amazon | AliExpress
6Resistor 330-ohm5Amazon | AliExpress
7NPN Transistor BC5474Amazon | AliExpress
8Terminal Block4Amazon | AliExpress
9LED 5mm Any Color1Amazon | AliExpress
10Female Header2 SetAmazon | AliExpress




Circuit Diagram & Connection

The circuit diagram for Web Server Controlled Home Automation using ESP8266 is given below. Using this circuit diagram you can assemble the circuit on the Breadboard using 4 4-channel Relay and NodeMCU Board.

Home Automation using Blynk Circuit


Home Automation PCB & Gerber File

If you don’t want to assemble the circuit on a breadboard and you want a PCB for the project, then here is the PCB for you. The PCB Board for the Home Automation Project is designed using the EasyEDA online Circuit Schematics & PCB designing tool. The front side and back side of the PCB are given below.

Home Automation PCB Front View
Home Automation PCB Front View
Home Automation PCB Back View
Home Automation PCB Back View

The Gerber File for the PCB Board is given below. You can simply download the Gerber File for this project.

Download Gerber File: Home Automation PCB


Source Code/Program

Copy the code from below and upload it to the NodeMCU Board.

1
2
const char* ssid     = "MySmartHome";   //wifi name
const char* password = "hngzhowxiantan";      //wifi password

But before uploading change the WiFi SSID & Password.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#include <ESP8266WiFi.h>
 
// Replace with your network credentials
const char* ssid     = "MySmartHome";   //wifi name
const char* password = "hngzhowxiantan";      //wifi password
 
// Set web server port number to 80
WiFiServer server(80);
 
// Variable to store the HTTP request
String header;
 
// Auxiliar variables to store the current output state
String output0State = "off";
String output1State = "off";
String output2State = "off";
String output3State = "off";
 
// Assign output variables to GPIO pins
const int output0 = D2;     //GPIO4
const int output1 = D5;     //GPIO14
const int output2 = D6;     //GPIO12
const int output3 = D1;     //GPIO5
 
void setup() {
  Serial.begin(115200);
  // Initialize the output variables as outputs
  pinMode(output0, OUTPUT);
  pinMode(output1, OUTPUT);
  pinMode(output2, OUTPUT);
  pinMode(output3, OUTPUT);
  
  // Set outputs to LOW
  digitalWrite(output0, LOW);
  digitalWrite(output1, LOW);
  digitalWrite(output2, LOW);
  digitalWrite(output3, LOW);
 
  // Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}
 
void loop()
{
  WiFiClient client = server.available();   // Listen for incoming clients
  if (client)
  {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
 
            // turns the GPIOs on and off
            if (header.indexOf("GET /4/on") >= 0)
            {
              Serial.println("GPIO 4 on");
              output0State = "on";
              digitalWrite(output0, HIGH);
            }
            else if (header.indexOf("GET /4/off") >= 0)
            {
              Serial.println("GPIO 4 off");
              output0State = "off";
              digitalWrite(output0, LOW);
            }
 
 
            // turns the GPIOs on and off
            else if (header.indexOf("GET /14/on") >= 0)
            {
              Serial.println("GPIO 14 on");
              output1State = "on";
              digitalWrite(output1, HIGH);
            }
            else if (header.indexOf("GET /14/off") >= 0)
            {
              Serial.println("GPIO 14 off");
              output1State = "off";
              digitalWrite(output1, LOW);
            }
 
 
            // turns the GPIOs on and off
            else if (header.indexOf("GET /12/on") >= 0)
            {
              Serial.println("GPIO 12 on");
              output2State = "on";
              digitalWrite(output2, HIGH);
            }
            else if (header.indexOf("GET /12/off") >= 0)
            {
              Serial.println("GPIO 12 off");
              output2State = "off";
              digitalWrite(output2, LOW);
            }
 
 
            // turns the GPIOs on and off
            else if (header.indexOf("GET /5/on") >= 0)
            {
              Serial.println("GPIO 5 on");
              output3State = "on";
              digitalWrite(output3, HIGH);
            }
            else if (header.indexOf("GET /5/off") >= 0)
            {
              Serial.println("GPIO 5 off");
              output3State = "off";
              digitalWrite(output3, LOW);
            }
            
 
            // Display the HTML web page
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
 
            // Web Page Heading
            client.println("<body><h1>Home Automation</h1>");
             client.println("<body><h2>using Local Web Server</h2>");
 
            // Display current state, and ON/OFF buttons for GPIO 4
            client.println("<p>GPIO 4 - State " + output0State + "</p>");
            // If the output0State is off, it displays the ON button
            if (output0State == "off") {
              client.println("<p><a href=\"/4/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/4/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
 
 
            // Display current state, and ON/OFF buttons for GPIO 14
            client.println("<p>GPIO 14 - State " + output1State + "</p>");
            // If the output1State is off, it displays the ON button
            if (output1State == "off") {
              client.println("<p><a href=\"/14/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/14/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
 
            // Display current state, and ON/OFF buttons for GPIO 12
            client.println("<p>GPIO 12 - State " + output2State + "</p>");
            // If the output2State is off, it displays the ON button
            if (output2State == "off") {
              client.println("<p><a href=\"/12/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/12/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
 
 
            // Display current state, and ON/OFF buttons for GPIO 5
            client.println("<p>GPIO 5 - State " + output3State + "</p>");
            // If the output3State is off, it displays the ON button
            if (output3State == "off") {
              client.println("<p><a href=\"/5/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/5/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
 
 
            client.println("</body></html>");
 
            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}



Controlling Home Appliances through Web Page

Once the code is uploaded, the NodeMCU Board will try connecting to the Network using the given SSID & Password.

Once connected to the network, the Serial Monitor will display the Local IP Address.

Now you can copy the IP Address and paste it to the web Browser. The Web Browser will display a beautiful webpage.

Home Appliances Control through Web Page

Now you can send 1 or 0 to turn ON & OFF the home appliances. The ON command is assigned to a certain GPIO PIN as 1 & OFF command as 0.

Apart from all this, if your NodeMCU ESP8266 Board is connected to your PC, the Serial Monitor will display the following message.

Well, that’s all from IoT Based Home Automation using ESP8266 Web Server. If you have any doubts, please comment below.

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email Reddit Telegram WhatsApp
Previous ArticleMicroPython: ESP32 with DHT11 Humidity Temperature Sensor
Next Article Power Supply for ESP32 with Battery Charger & Boost Converter

Related Posts

ESP32 Fingerprint Attendance System with Live Web Dashboard

ESP32 Fingerprint Attendance System with Live Web Dashboard

Updated:June 21, 2026
IoT Based PM & Air Quality Monitoring System using ESP32

IoT Based PM & Air Quality Monitoring System using ESP32

Updated:June 14, 2026
DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

Updated:May 10, 20262K
IoT Activity Tracker with ESP32 & Accelerometer Gyroscope

IoT Activity Tracker with ESP32 & Accelerometer/Gyroscope

Updated:May 2, 2026

ESP32 IoT Vehicle Motion Analyzer with MPU6050 & LIS3MDL

Updated:April 27, 20261K
High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

Updated:April 27, 20262K
View 11 Comments

11 Comments

  1. ORUGANTI VISHNU on December 4, 2020 8:00 PM

    Bro i uploaded code after uploading code . In serial monitor not showing ip.. just showing connecting to ssid .. what to do

    Reply
    • Mr. Alam on December 4, 2020 8:01 PM

      Press reset button

      Reply
  2. Kavishwar Khankari on April 2, 2022 12:55 PM

    In this project, what is used as server, esp or mobile?

    Reply
  3. Nanfwang Dabiring on August 6, 2022 10:34 PM

    I tried my hands on this project and it works flawlessly,though the esp8266 requires too much power to stay on. Thnaks a lot

    Reply
  4. Arshad Girach on October 14, 2022 2:06 PM

    This control on local area network but not wide area network what should do for that

    Reply
  5. Bart Craytor on March 26, 2023 9:42 PM

    ESP8266 is the server sending HTTP over internet to any web browser which connects to the ESP8266 IP address

    Reply
  6. Bart on March 26, 2023 9:48 PM

    While this is beyond the scope of this article, there are several options. One would be to set up a port redirect on your LAN Router/Switch/Modem so that when you connect to your LAN with the proper port it gets re-directed to the ESP8266. Others may include using services like Arduino Cloud, Amazon Echo, etc. There are many articles out there to guide you through that process. But as a simple LAN IoT project this is a great introduction to IoT setups. You may also want to look at TAZMOTA or TAZMATIZING the ESP8266 for some really nice, premade programing which you can modify.

    Reply
  7. Debasish on October 18, 2024 5:31 AM

    code is having build error. This should be avoided , wrong code in learning platform does not keep the learning good.

    Reply
  8. Ashwin PM on November 15, 2024 12:36 AM

    Can we use led instead of bulbs with holders

    Reply
  9. sathiyakala on November 26, 2024 1:27 AM

    where we should buy pcb board

    Reply
    • Admin on November 26, 2024 1:39 AM

      Order the pcb from here: https://www.allpcb.com/lp/prototype.html?code=PT18

      Reply

CommentsCancel reply

Latest Posts
ESP32 Fingerprint Attendance System with Live Web Dashboard

ESP32 Fingerprint Attendance System with Live Web Dashboard

June 21, 2026
IoT Based PM & Air Quality Monitoring System using ESP32

IoT Based PM & Air Quality Monitoring System using ESP32

June 14, 2026
DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

DIY ESP32 MLX90640 IR Thermal Camera with Live Web Display

May 10, 2026
IoT Activity Tracker with ESP32 & Accelerometer Gyroscope

IoT Activity Tracker with ESP32 & Accelerometer/Gyroscope

May 2, 2026
A Guide to Sourcing Obsolete ICs for Vintage Projects

Beyond AliExpress: A Guide to Sourcing Obsolete ICs for Vintage Projects

April 21, 2026

ESP32 IoT Vehicle Motion Analyzer with MPU6050 & LIS3MDL

April 27, 2026
Building a Smart Sensor Node with a BLE Microcontroller

Building a Smart Sensor Node with a BLE Microcontroller

February 26, 2026
High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

High-Accuracy Pitch, Roll, Yaw with ESP32 & BNO08x IMU

April 27, 2026
Top Posts & Pages
  • ESP32 Fingerprint Attendance System with Live Web Dashboard
    ESP32 Fingerprint Attendance System with Live Web Dashboard
  • IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
    IoT AC Energy Meter with PZEM-004T & ESP32 WebServer
  • 12V DC to 220V AC Inverter Circuit & PCB
    12V DC to 220V AC Inverter Circuit & PCB
  • ESP32 CAN Bus Tutorial | Interfacing MCP2515 CAN Module with ESP32
    ESP32 CAN Bus Tutorial | Interfacing MCP2515 CAN Module with ESP32
  • IoT Based ECG Monitoring with AD8232 ECG Sensor & ESP32
    IoT Based ECG Monitoring with AD8232 ECG Sensor & ESP32
  • How to use Modbus RTU with ESP32 to read Sensor Data
    How to use Modbus RTU with ESP32 to read Sensor Data
  • Half Wave Rectifier Basics, Circuit, Working & Applications
    Half Wave Rectifier Basics, Circuit, Working & Applications
  • How to use INA226 DC Current Sensor with Arduino
    How to use INA226 DC Current Sensor with Arduino
Categories
  • Arduino Projects (197)
  • Articles (60)
    • Learn Electronics (19)
    • Product Review (15)
    • Tech Articles (28)
  • Electronics Circuits (46)
    • 555 Timer Projects (21)
    • Op-Amp Circuits (7)
    • Power Electronics (13)
  • IoT Projects (205)
    • ESP32 MicroPython (7)
    • ESP32 Projects (82)
    • ESP32-CAM Projects (15)
    • ESP8266 Projects (76)
    • LoRa/LoRaWAN Projects (22)
  • Microcontrollers (38)
    • AMB82-Mini IoT AI Camera (4)
    • BLE Projects (18)
    • STM32 Projects (19)
  • Raspberry Pi (93)
    • Raspberry Pi Pico Projects (57)
    • Raspberry Pi Pico W Projects (12)
    • Raspberry Pi Projects (24)
Follow Us
  • Facebook
  • Twitter
  • Pinterest
  • Instagram
  • YouTube
About Us

“‘How to Electronics’ is a vibrant community for electronics enthusiasts and professionals. We deliver latest insights in areas such as Embedded Systems, Power Electronics, AI, IoT, and Robotics. Our goal is to stimulate innovation and provide practical solutions for students, organizations, and industries. Join us to transform learning into a joyful journey of discovery and innovation.

Copyright © How To Electronics. All rights reserved.
  • About Us
  • Disclaimer
  • Privacy Policy
  • Contact Us
  • Advertise With Us

Type above and press Enter to search. Press Esc to cancel.

Ad Blocker Enabled!
Ad Blocker Enabled!
Looks like you're using an ad blocker. Please allow ads on our site. We rely on advertising to help fund our site.