Author Topic: Reprogram Sonoff Smart Switch with Web Server  (Read 1111 times)

0 Members and 1 Guest are viewing this topic.


  • Administrator
  • Full Member
  • *****
  • Posts: 221
  • Karma: +0/-0
    • View Profile
    • cBrandon
Reprogram Sonoff Smart Switch with Web Server
« on: July 03, 2017, 12:26:45 PM »
Copied from:

Browse our projects by category

 Raspberry Pi
 Home Automation
 Sensor/Modules Guides

Make Arduino into FTDI programmer = Pin: GND + RST then connect the 3.3V, RX, TX, GND

Reprogram Sonoff Smart Switch with Web Server
In this post, youíre going to learn how to flash custom firmware in the Sonoff device, so that you can control it with your own web server. I recommend that you read my previous post to get familiar with the Sonoff.

If you donít have a Sonoff yet, you can get one for $5 on eBay:

First, watch the step by step video tutorial below

Safety warning
Make sure you disconnect your Sonoff from mains voltage. Then, open the box enclosure.


Sonoff pinout
RELATED CONTENT: Like ESP8266? Check out Home Automation Using ESP8266
The Sonoff is meant to be hacked, and you can see clearly that these connections were left out, so that you can solder some pins and upload a custom firmware. Thatís the pinout.

Iíve soldered 4 header pins, so that I can easily connect and disconnect wire cables to my Sonoff device.

Preparing your 3.3V FTDI module
You need an FTDI module to upload a new firmware to your Sonoff. Use the schematics provided as a reference.

DOWNLOAD FREE PDF: Getting Started with ESPlorer IDE and ESP8266
Warning: uploading a custom firmware is irreversible and youíll no longer be able to use the app eWeLink.

Iíve added a toggle switch in the power line, so that I can easily turn the Sonoff on and off to flash a new firmware without having to unplug the FTDI module.

I used hot glue to glue the ends of the wires together. This prevents you to make wrong connections between the FTDI and the Sonoff in the future.

Boot your Sonoff in Flashing Mode
To flash a new firmware to your Sonoff, you have to boot your Sonoff in flashing mode. Follow this 4 step process:

1) Connect your 3.3V FTDI programmer to your computer

2) Hold down the Sonoff button

3) Toggle the switch to apply power to the Sonoff circuit

4) Then, you can release the Sonoff button

Now, your Sonoff should be in flashing mode and you can upload a new firmware.

Opening the Arduino IDE
You should have the ESP8266 add-on installed in the Arduino IDE Ė If you donít have the add-on installed, first follow this tutorial on How to Install the ESP8266 Board in Arduino IDE.

You can upload the full sketch to your Sonoff (replace with your SSID and password):

  Rui Santos
  Complete project details at 

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

MDNSResponder mdns;

// Replace with your network credentials
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

ESP8266WebServer server(80);

String webPage = "";

int gpio13Led = 13;
int gpio12Relay = 12;

void setup(void){
  webPage += "<h1>SONOFF Web Server</h1><p><a href=\"on\"><button>ON</button></a>&nbsp;<a href=\"off\"><button>OFF</button></a></p>"; 
  // preparing GPIOs
  pinMode(gpio13Led, OUTPUT);
  digitalWrite(gpio13Led, HIGH);
  pinMode(gpio12Relay, OUTPUT);
  digitalWrite(gpio12Relay, HIGH);
  WiFi.begin(ssid, password);

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
  Serial.print("Connected to ");
  Serial.print("IP address: ");
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  server.on("/", [](){
    server.send(200, "text/html", webPage);
  server.on("/on", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio13Led, LOW);
    digitalWrite(gpio12Relay, HIGH);
  server.on("/off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio13Led, HIGH);
    digitalWrite(gpio12Relay, LOW);
  Serial.println("HTTP server started");
void loop(void){

Preparing your Arduino IDE
Having your Sonoff device still in flashing mode.

1. Select your FTDI port number under the Tools> Port > COM14 (in my case)
2. Choose your ESP8266 board from Tools> Board > Generic ESP8266 Module
3. Press the Upload button

Wait a few seconds while the code is uploading. You should see a message saying ďDone UploadingĒ.

If you try to upload the sketch and it prompts the following error message:

warning: espcomm_sync failed
error: espcomm_open failed
Your Sonoff is not in flashing mode and you have to repeat the process described in section ďBoot your Sonoff in flashing modeĒ described earlier in this guide.

Final circuit
After uploading the code, re-assemble your Sonoff. Be very careful with the mains voltage connections.

Itís the exact same procedure as shown in the introductory guide.

ESP8266 IP Address
Open the Arduino serial monitor at a baud rate of 115200. Connect GPIO 0 of your ESP8266 to VCC and reset your board.

After a few seconds your IP address should appear. In my case itís

For the final demonstration open any browser from a device that is connected to the same router that your Sonoff is. Then type the IP address and click Enter!

Now when you press the buttons in your web server you can control the Sonoff switch and any device that is connected to it.

Sonoff tutorials list:

Sonoff Ė $5 WiFi Wireless Smart Switch Introduction
How to Flash a Custom Firmware to Sonoff
Wrapping up
Thatís it for now, I hope you had fun learning about the Sonoff device. Make sure you subscribe to my blog, because Iíll be posting more tutorials about the Sonoff.

Do you have any questions? Leave a comment down below!

Thanks for reading,



« Last Edit: July 03, 2017, 11:54:39 PM by branx86 »