cBrandon Community

General Category => Arduino => Topic started by: branx86 on July 03, 2017, 11:26:45 AM

Title: Reprogram Sonoff Smart Switch with Web Server
Post by: branx86 on July 03, 2017, 11:26:45 AM
Copied from:  http://randomnerdtutorials.com/reprogram-sonoff-smart-switch-with-web-server/

Browse our projects by category

ESP8266
Arduino
Raspberry Pi
Home Automation
Sensor/Modules Guides

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

(https://s2.postimg.org/c537mqyw5/Ardunio2_FTDI.jpg) (https://postimg.org/image/c537mqyw5/)

Reprogram Sonoff Smart Switch with Web Server
25 Shares
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: http://ebay.to/2eNzHf2.

First, watch the step by step video tutorial below
https://youtu.be/ZztPgbAwOMk

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

warning-m

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.
   
(https://s15.postimg.org/9mqne9jrr/sonoff_gpio-r.jpg) (https://postimg.org/image/9mqne9jrr/)

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

(https://s11.postimg.org/4nj5eyurz/pins-soldered.jpg) (https://postimg.org/image/4nj5eyurz/)

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.

(https://s1.postimg.org/a05j5soob/Schematics-_Copy.png) (https://postimg.org/image/a05j5soob/)

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.

(https://s11.postimg.org/7mhu11crj/hot-glue-ftdi.jpg) (https://postimg.org/image/7mhu11crj/)

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

(https://s1.postimg.org/yn8gm9i0b/hold-down-sonoff-button.jpg) (https://postimg.org/image/yn8gm9i0b/)

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

(https://s12.postimg.org/7f2lrgzhl/apply-power-to-sonoff.png) (https://postimg.org/image/7f2lrgzhl/)

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 http://randomnerdtutorials.com 
*********/

#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);

  Serial.begin(115200);
  delay(5000);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 
  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);
    delay(1000);
  });
  server.on("/off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio13Led, HIGH);
    digitalWrite(gpio12Relay, LOW);
    delay(1000);
  });
  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){
  server.handleClient();
}



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
(https://s21.postimg.org/yybskbxeb/arduino-ide.jpg) (https://postimg.org/image/yybskbxeb/)

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

Troubleshooting
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.

(https://s11.postimg.org/81so403an/SONOFF_circuit.png) (https://postimg.org/image/81so403an/)

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 192.168.1.70.

(https://s3.postimg.org/cwczoqgjz/esp-ip-address.png) (https://postimg.org/image/cwczoqgjz/)
Demonstration
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!

(https://s17.postimg.org/86mplqjez/web-server.jpg) (https://postimg.org/image/86mplqjez/)

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,

Rui