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




About: We are group of makers who love and create different products related to hobby electronics, automation and OEM consumer and industrial products.

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!


  • Sensors Contest

    Sensors Contest
  • Fandom Contest

    Fandom Contest
  • Colors of the Rainbow Contest

    Colors of the Rainbow Contest

98 Discussions


Question 11 months ago on Introduction

Hi,I use esp-01 with arduino uno , my problem it Do not appear on Wi-Fi networks , what's cuse


Question 1 year ago on Step 2

Ben İngilizce bilmiyorum but google translation
Nasıl güncelleneceğini bilmiyorum
esp01'e hangi dosyayı koymalıyım

https://github.com/nodemcu/nodemcu-flasher indirdim

hangi dosyayı esp 01'e koymalıyım

Ben BIN uzantılı dosyalar atıyorum ama yeni sürüm güncellemelerini bilmiyorum
örnek resim, video

1 year ago

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


1 year ago

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


1 year ago

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.


2 years ago

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

1 reply

Reply 1 year ago

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.


2 years ago

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?


2 years ago

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 ?


2 years ago


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


2 years ago

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


2 years ago

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>




2 years ago

Can you tell me the reason of reset in esp8266 v1 module while connected to relay with 220v. I have tried esp8266 with relay with 3.3v and 5v, and it works perfectly. But when i connect 220v to relay and control relay with esp8266 the result is unpredictable. It works for a while (220V connected case). But after certain attempt, esp8266 stops responding. Can you help me what might be the problem? For easiness I have made image of what I have done till now. Please have a look.

2 replies

Reply 2 years ago

I put a capacitor on the line from the relay in to the esp8266 gpio and that fixed the problem for me. Hope that helps at all


Reply 2 years ago

I have the same problem as you. The relay/esp both work fine until I connect the relay to mains voltage... Did you ever get an answer to your question or figure out a solution?



3 years ago


Thank you for guidance, it works!
I have a question for the firmware.
I want the first relay to turn on for 20 seconds and then turn off,
and the other one must turn on and off instantly.
Is there an easy way to get it to work?

2 replies

Reply 3 years ago

You can do it with simple scripts. Now you can also use arduino ide for programming in arduino compatible C.


Reply 2 years ago

do you mind pointene me in the right direction?


2 years ago


I have used AT Command which is sequence given below:











Use 300ms Delay for avoid busy -------




My problem is that how to reduce 300ms delay between send two data packets.

Please anyone can help me...


2 years ago

Hello - Thanks for the Project! It's exactly what I need to save some coin over using a more expensive alternative. Your Instructable rocks! Unfortunately I'm getting: "ERROR: Communication with MCU not yet established" in the ESPlorer v0.2.0-rc3 IDE. I was able to flash the NodeMCU firmware at a 9600bps on the first try! And I believe my power config at 3.3V to ESP-01 with only a shared GND to CP210x is good. CP210x is powered by PC. My LM2595 step-down is powered by a AC/DC wall plug at 5.5vdc/500ma.

I've pulled the GND to GPIO0 jumper. COM3 port says it's opened and I've mirrored the baud rate in my Win7 OS. My CP210x has latest driver. My port setting are: 9600bps, 8db, No: Pairty, 1sb, No: Flow Ctrl.

I cycled through each baud rate option hoping for a miracle to no avail. Finally, I did try two different ESP-01s in hopes the one antenna may have been defective and still can't get any communication. Please help? Thanks again!