WiFi / Internet Controlled Relays Using ESP8266 - Quick, 30 Minutes IoT Project





Introduction: WiFi / Internet Controlled Relays Using ESP8266 - Quick, 30 Minutes IoT Project

ESP8266 is a very popular device for IoT these days. ESP8266 is easily available as a module. Its a small and dirt cheap device which has a inbuilt controller running at 80Mhz and with optional firmware it can be used as a stand alone device without a microcontroller like arduino.

Video of working project and overview of making process -

This project is very simple and uses an ESP8266 module ESP-01. It has pinout headers which provides very easy connectivity with other devices. A 5V 2A AC power supply, a voltage regulator and optoisolated 2 relays board is used. A CP2102 USB-UART is used to program and configure the ESP module. The module is loaded with NodeMCU firmware which support Arduino like functions for GPIO and lua scripting support.

Part List

ESP8266 module ESP-01

Opto-isolated 2 Channel 5V Relay Board

SMPS Supply 5V 2A

LM2596 DC to DC 3A Step Down Module with Voltage Display - or any other step down voltage regulator to convert 5V to 3.3V for ESP module. Even a cheap IC like LM317 or LM1117 will do.

CP2102 USB UART module - or any other 3.3V compatible USB-TTL UART adaptor

Jumper wires

Step 1: Prepare and Test the Power Supply

  1. Take a red and black jumper wire. Cut it in half. Strip the ends.
  2. Take power adaptor and cut the connector end. Strip the ends and connect them to red(to positive) and black(to negative) jumper wires in correct polarity. Use a multimeter to check positive and negative ends. Solder the open ends.
  3. Twist and tin the ends of other 2 jumper wires.
  4. Connect the power adaptor to input screw terminals of regulator in correct polarity.
  5. Connect other 2 red and black jumper wires to output screw terminals. Red to positive and black to negative.
  6. Power on the adaptor after double checking the connections and set the output voltage to 3.3 by changing the potentiometer.
  7. If you are using any other type of voltage regulator, use your knowledge to give input and take output from it.

Connect the relay board and test for working on the power supply


  • +5V (Red wire at input terminal) - VCC of relay board
  • GND (Black wire at input terminal) - GND of relay board

Relay board is now powered up. For testing the working, connect black wire(GND) at 3.3V output screw terminal to IN1 and IN2 pins on relay board. It should trigger relay and glow corresponding LEDs. If it doesn't check your connections. You may remove the connections for now if you want.

Connect and check ESP-01 for power

Once you verify that relay board is working and 3.3 V output is set, turn the power off and connect VCC and GND of ESP-01 to Red and Black jumper wires in proper polarity. Verify the connection and turn on the power. The power LED on module should glow. Remove the connections for now.

Now the power supply is set and tested with devices.

Step 2: Prepare & Program the ESP01 Module

By default ESP module comes with AT commands firmware which is good but normally it requires another microcontroller like Arduino to control it using AT commands on serial. For this project we are not using any microcontroller so we need use the ESP as everything. For this we need to update the firmware. We will be using NodeMCU firmware for the same.

All information on NodeMCU is here : https://github.com/nodemcu/nodemcu-firmware

Download softwares and other files - these instructions are for Windows.

http://esp8266.ru/esplorer-latest/?f=ESPlorer.zip (Needs Java Runtime)

https://github.com/nodemcu/nodemcu-flasher (Download from release folder for 32 or 64 bit OS)

http://robokits.co.in/download/init.zip - Firmware for wifi module. Download, unzip and edit with editor like Notepad++ or Sublime. Change the IP address and your WiFi SSID and Password for your router. See comments in file.

For programming we need a USB-TTL UART converter module such as CP2012 or FTDI (3.3V).


ESP VCC - ESP CH_PD to 3.3V +ve (Output from Regulator)



ESP GND - ESP_GPIO0 to system GND

UART GND to system GND

Note - any GND will work anywhere as all of them are common (Shorted internally).

  • Connect the USB-UART to USB port of PC/Laptop
  • It will generate a virtual COM port. Note the port number
  • Open NodeMCU Flasher, select com port and hit Flash.
  • Wait till flashing finishes. It will take about 50 to 90 seconds. If flashing doesn't start make sure connections are proper and module is powered up using external supply. It will not work properly on USB supply.
  • If flashing stops inbetween, restart the power to ESP module and flash again till it completes properly.
  • After flashing is finished successfully remove power and USB. Remove the short between ESP GND pin and GPIO0 pin.
  • Open ESPlorer software (it needs Java, download and install if not already installed). Connect on the same COM Port as Flasher at 9600 baud rate. Don't worry for firmware detection errors if any.
  • Upload the init.lua file after modifying your required IP address, WiFi SSID and Password (Key). You may use Notepad++ or Sublime Text Editor for the same. It may not open properly in normal notepad. Upload button is on the bottom left part of ESPloarer software.
  • Reset controller using reset button on bottom center part of software.
  • If you have set setting properly in lua file you should get connected IP address. Edit init.lua file if there is any error or you are not getting connected to wifi.
  • Now you may open the IP address you set in browser to check if the server is working properly or not. If you get a page with 4 on/off buttons its working fine. Turn the module off and remove UART connections.

Step 3: Connect Everything Together and Test

Now keeping the power off make/check following connections.

  • ESP VCC - +3.3V (Keep VCC and CH_PD shorted for ever)
  • ESP GPIO0 - Relay Board IN1
  • ESP GPIO2 - Relay Board IN2
  • Relay Board VCC - +5V
  • Relay Board GND - GND
  • Adaptor +5V to Regulator +ve Input
  • Adaptor - to Regulatore -ve Input
  • Adaptor +ve output - 3.3V
  • Adaptor -Ve output - GND

Once this is done, power on the adaptor and open the set IP address in your browser. Turn relays on/off and see that the realys on relay board will work accordingly. Now you can control these relays from any device connected to your network like phone or tab with browser.

You can also control this device thorugh internet by using any DNS service like duckdns or no-ip.com. Many routers support No-IP and other DNS services which will keep your dynamic IP address updated. You may use other ports than port 80 (in init.lua file to create server) in order to control multiple devices on same public (internet) IP.

9 People Made This Project!


  • Epilog Challenge 9

    Epilog Challenge 9
  • Paper Contest 2018

    Paper Contest 2018
  • Science of Cooking

    Science of Cooking

We have a be nice policy.
Please be positive and constructive.




which file to flash with nodemcu firmware flasher ? or we should just hit flash without any selections of files and addresses ?

Hi, mein Englisch ist sehr schlecht!
Hi, my English is very bad! Google will help me!

Can run this sketch on arduino 1.8.2 ?

this error message occurs when checking:

gpio.mode(Relay2, gpio.OUTPUT)
exit status 1
'gpio' does not name a type

I have loaded the lua file with sublime text editor.
And then copied in Arduino.
The -- I have replaced with //.
Unfortunately, I do not know
Please help

Good night, can you help me, I downloaded the WifiWebServer code on my ESP8266-01 to use the two GPIO's to control a double relay, so that's fine, but after some time my ESP8266 stops communicating with my network, only going back to work when I take power from it, if you can help me I'll be grateful, thank you.

Could I use this to trigger a dc switch that opens and closes my driveway gate opener via internet with my iphone or can you recommend another solution

yes, you can all you need to setup server and internet access via your own domain or using sub domain from some ddns domain service provider like, noip.com, dyndns.org etc.


I updated init.lua thru ESPlorer because a IP change. It seams to upload ok (upload successful), but when I reset the module, it shows old IP numbers..

any help, please?

I can upload the program to my esp but cant access its IP address, it shows junk values in my serial monitor.... can any one help me here ?


Can you do another Instructable showing the controlling of relay modules over the internet. I'm very much interested in it.

Instead of using web server, can I use an another esp8266 to send the control signal to the esp8266 connected with relay.

why not this code is running in init.lua file?? please help


<h1 style="font-size:500%; text-align:center; color:red"><b>IOT based Relay Switching</b></h1>

<table align="center" style="border:2px solid red; width:50%; height:120"><tr><td align="center" style="border-style:solid; border-width:2px"><b><font face=Verdana; size=5; color=black>Relay 1</font></b></td>

<td align="center" style="border-style:solid; border-width:2px"><b><font face=Verdana; size=5; color=black>Relay 2</font></b></td></tr><tr>

<td align="center" style="border-style: solid; border-width:1px"><a href=\"?pin=ON1\"><button><font face="Verdana" size=5 color=green><b>ON</button></b></font></a></td><td align="center" style="border-style: solid; border-width:1px" ><a href=\"?pin=ON2\"><button><font face="Verdana" size=5 color=green><b>ON</button></b></font></a></td></tr>

<tr><td align="center" style="border-style:solid; border-width: 1px"><a href=\"?pin=OFF1\"><button><font face="Verdana" size=5 color=red><b>OFF</button></b></font></a></td><td align="center" style="border-style:solid; border-width: 1px"><a href=\"?pin=OFF2\"><button><font face="Verdana" size=5 color=red><b>OFF</button></b></font></a></td></tr></table>