In this project, we are going to do a Home Automation setup using ESP32 Web server and controlling it through an Android application. Check the video below to see it in action.

First, let me thank
Things Required
Circuit
PCB Prototyping From PCBWay
Step 1: Download Gerber Files
Step 2: Upload in PCBWay
- Go to https://www.pcbway.com/orderonline.aspx
- Click on Quick-order PCB(Autofill parameters)
- Now click the +Add Gerber File button.
- Then choose the file from your computer and upload.
- After uploading you can view an image of the PCB
- There are a lot of settings to choose from, I just left everything to default except the color. Black is my fav ????
- Now choose your shipping method and country and click on save to cart button.
- Then create an account or login if you already have an account in PCBWay.
- Make the payment and your PCB will reach you in a few days ????.
Android App To Send HTTP Requests
Click the Install button to install the HTTP Request Shortcuts app in your android phone.
A Short note on this application
Place shortcuts (widgets) on your home screen to submit HTTP requests to all your favorite RESTful APIs, web services, and other URL resources. Great for home automation & IoT projects!
This app is open-source, find it on Github: https://github.com/Waboodoo/HTTP-Shortcuts. It’s also completely free and contains no ads, because who wants those anyway.
Configuring
- After installation open the application.
- Click on the + button in the bottom right corner.
- Then select Regular Shortcut from the create new shortcut menu.
- Now write the Shortcut Name & Description.
- You can also change the icon by clicking on the icon at the top.
- Now click on the Basic Request Settings.
- From the Basic Request Settings choose,
- GET as the method.
- Type the webserver URL for turn ON/OFF the Relay as shown.
- Now click the back arrow.
- After entering all the details the final page will look like this.
- Now press the Tick button to save.
- Now we have successfully added Button for one relay.
- Like the same add buttons for all the relays.
- For adding shortcut in home screen, press and hold any button and select create shortcut button.
Code
#include <WiFi.h>
// Replace with your network credentials
const char* ssid = "your ssid";
const char* password = "your password";
WiFiServer server(80); // Set web server port number to 80
String header; // Variable to store the HTTP request
const int relay1 = 19;
const int relay2 = 21;
const int relay3 = 22;
const int relay4 = 23;
const int LED = 2;
void setup()
{
Serial.begin(115200);
pinMode(relay1, OUTPUT); // Initialize the output variables as outputs
digitalWrite(relay1, LOW); // Set outputs to LOW
pinMode(relay2, OUTPUT); // Initialize the output variables as outputs
digitalWrite(relay2, LOW); // Set outputs to LOW
pinMode(relay3, OUTPUT); // Initialize the output variables as outputs
digitalWrite(relay3, LOW); // Set outputs to LOW
pinMode(relay4, OUTPUT); // Initialize the output variables as outputs
digitalWrite(relay4, LOW); // Set outputs to LOW
pinMode(LED,OUTPUT);
digitalWrite(LED,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();
// Relay 1 GPIO control
if (header.indexOf("GET /1") >= 0)
{
if(digitalRead(relay1)== LOW)
{
Serial.println("Relay 1 ON");
digitalWrite(relay1, HIGH);
client.print("Relay 1 ON");
}
else
{
Serial.println("Relay 1 OFF");
digitalWrite(relay1, LOW);
client.print("Relay 1 OFF");
}
}
// Relay 2 GPIO control
else if (header.indexOf("GET /2") >= 0)
{
if(digitalRead(relay2)== LOW)
{
Serial.println("Relay 2 ON");
digitalWrite(relay2, HIGH);
client.print("Relay 2 ON");
}
else
{
Serial.println("Relay 2 OFF");
digitalWrite(relay2, LOW);
client.print("Relay 2 OFF");
}
}
// Relay 3 GPIO control
else if (header.indexOf("GET /3") >= 0)
{
if(digitalRead(relay3)== LOW)
{
Serial.println("Relay 3 ON");
digitalWrite(relay3, HIGH);
client.print("Relay 3 ON");
}
else
{
Serial.println("Relay 3 OFF");
digitalWrite(relay3, LOW);
client.print("Relay 3 OFF");
}
}
// Relay 4 GPIO control
else if (header.indexOf("GET /4") >= 0)
{
if(digitalRead(relay4)== LOW)
{
Serial.println("Relay 4 ON");
digitalWrite(relay4, HIGH);
client.print("Relay 4 ON");
}
else
{
Serial.println("Relay 4 OFF");
digitalWrite(relay4, LOW);
client.print("Relay 4 OFF");
}
}
// LED GPIO control
else if (header.indexOf("GET /9") >= 0)
{
if(digitalRead(LED)== LOW)
{
Serial.println("LED ON");
digitalWrite(LED, HIGH);
client.print("LED ON");
}
else
{
Serial.println("LED OFF");
digitalWrite(LED, LOW);
client.print("LED OFF");
}
}
client.stop();
header = "";
}
}
}
}
}
}

