Archive

Posts Tagged ‘esp8266’

Upgrading Sonoff Stock Firmware to Sonoff-Tasmota – USB to Serial, and OTA Update Methods

October 4th, 2017 7 comments

This post was initially supposed to be part 2 of Sonoff B1 light bulb review, where I would have explained how easy it was to use OTA mechanism to update to Sonoff-Tasmota open source firmware, and shortly show about its features and capabilities. However, it took me over 10 hours to make that work, mostly due to misunderstand in the documentation, and time spent to configure routers. I also failed the first time with Sonoff B1, so I used the serial console method, and instead managed to use SonOTA method with Sonoff POW switching from stock firmware to Sonoff-Tasmota without having to solder or tear down anything.

Updating software with a USB to Serial Board

Using a USB to serial board is the most common method to switch from stock firmware to open source firmware such as ESPurna or Sonoff-Tasmota in Sonoff devices or other ESP8266 based devices. It’s quite straightforward with Sonoff switches like Sonoff TH16.

Click to Enlarge

You just need to solder a 4-pin 2.54mm pitch header, connect the board, and use esptool to flash the image. One it’s done you can simply remove the wire, leave the header in place, and put the case back in place. But with Sonoff B1 light bulb, it’s quite as easy. First there are no through holes in the board, and you need to solder up to 6 wires on small solder pads.

Click to Enlarge

The GND, Tx, Rx, and 3.3V must be soldered and connected to the USB to serial board, while GPIO0 must be shorted to enter programming mode, so I also added two more wires for GPIO0, and an extra GND pin.

Click to Enlarge

Important warning: Never connect the serial board and AC/mains at the same time. Your equipment and life may be at risk.

Now we can download the latest version of the firmware, install esptool, connect the USB to serial board to your computer – which will also provide powered to the board -, and run esptool to flash the firmware:

That’s pretty straightforward, and the output should look as below if everything runs normally:

Most products on the market defaults to access point mode when they are first booted, but Sonoff-Tasmota’s developer have instead decided to provide pre-built image in client mode connecting to a default access point with SSID: indebuurt1 ; password: VnsqrtnrsddbrN. That’s a bit of a pain, as you need to configure another router with those credentials, before changing it to your home router. An alternative way is to build some source, and change the default AP settings, so the device can connect right away after flashing. Still, I’d wish an image that default to AP mode would be nice. It’s actually not a problem for most Sonoff devices, as you can switch to AP mode with the button (4 short presses), but Sonoff B1 does not have one.

Now imagine you have a dozen or more of Sonoff B1 light bulbs that need to be update to Sonoff-Tasmota. That would be a real pain to solder and unsolder the required wires for each bulbs. One solution is to create a jig with pogo pins for firmware update, as the one shown below specifically designed for AI Light. You just need to pop out the bulb, click the jig, flash over serial, remove the jib, refit the bulb, and you’re done.

I don’t know if one exists for Sonoff B1, but the jig above could certainly be customized to work with it.

SonOTA – Sonoff OTA Firmware Update Method

However, in an ideal world you’d prefer not to mess with the hardware at all. If only ITEAD Studio provided a way to upload custom firmware with their stock firmware that’d be ideal, but it’s not the case right now. Luckily, the OTA mechanism was reverse-engineered, and SonOTA is an (experimental) implementation that allow to flash alternative firmware to Sonoff devices without altering the hardware or needing special jigs.

The method on Sonoff-Tasmota wiki does not work on Sonoff B1 because there SSID is not advertised in pairing mode, but somebody in github had managed to update one light bulb using DNS spoofing. Since I used the first method with Sonoff B1, but only partially managed to make it work, I switched to Sonoff POW, and succesfully tested the DNS spoofing method.  Several items are required, so I’ve drawn a diagram showing how those interact.

  1. The Home Router is just the WiFi router you’d normally use to access the Internet
  2. The smartphone with eWelink is requirement to configure WiFI on the Sonoff device, and update it to the latest stock firmware version. It can also be used to easily check access points.
  3. The WiFi laptop runs SonOTA, and will act as ITEAD Studio firmware update server located at xx-disp.coolkit.cc (for example cn-disp.coolkit.cc, eu-disp.coolkit.cc, etc…)
  4. “Temporary” Router with DNS spoofing will make sure xx-disp.coolkit.cc redirect to your laptop/computer running SonOTA, so it takes over when Sonoff device tries to update the firmware. It still needs to be connected to the Internet.
  5. Sonoff device – The device we want to update

Potentially, you could combine the router, router with DNS spoofing, and WiFi laptop into one device, if you have a Debian based router, but I still separate all three in my case, since home router does not support DNS spoofing, and I failed to install SonOTA on the temporary router.

The very first step is to pair the Sonoff device with eWelink app, connect it to your home router, and update the firmware to the latest version, in my case 2.0.4.

Click to Enlarge

Now you can configure your temporary router to use DNS spoofing. I did not have any spare router with such feature, so I instead used VS-RK3399 board with Debian, and configured it as a router with hostapd, and isc-dhcp-server using those instructions. This part will heavily depend on your router, and whether you use Debian, or other Linux distributions. For reference, here are some of the main configuration files I used:

  • /etc/hostapd/hostapd.conf

  • /etc/network/interfaces

  • /etc/dhcp/dhcpd.conf

The next step was to configure DNS spoofing. I first went with dnsmasq, and I could successfully confirm it worked with dig, but for whatever reason Sonoff B1/POW would still connect the ITEAD server. Finally I tried with dnsspoof, and it worked OK.  Installation in Debian:

/etc/dnsspoof.conf configuration file to redirect traffic to ITEAD / eWelink update servers to my WiFi laptop:

You can run it as follows:

DNS spoofing took me the most time, as beside restarting service in the router itself, you have to restart the devices connected to it to reflects the changes. I also messed with /etc/hosts file in the router and laptop, but it should not be necessary, as the important is to fool the Sonoff device.

Let’s switch the WiFi laptop configuration. It should work with both Linux and Windows, but mine is running Ubuntu 16.04, so that’s what I used. Let’s create a working directory, get SonOTA code, and install all required libraries and tools.

Now we’re ready for the update. Launch SonOTA script in legacy and no provision modes:

This will first ask you to select the WiFi interface, and enter your SSID and password, and start probing for the Sonoff device:

Delete your Sonoff device in eWelink app, and restart pairing, this time connecting it to your temporary router with DNS spoofing enabled, and shortly after the SonOTA script should start to transfer the image to the device:


Now you should be able to use your smartphone or the laptop to connect to FinalStage access point, start a browser to access http://192.168.4.2. You should see the interface below, click on scan for Wifi network, and select the one you want to replace indebuurt1 SSID, in order to connect to your “home router”.

Click to Enlarge

Click on the button Save on the bottom of that page, and after a while you should be able to access Sonoff web interface into your home network

Output log of SonOTA.py script for that last step:

Success! Finally… Now you can configure Sonoff-Tasmota to use your actual device – in my case Sonoff POW – instead of Sonoff Basic. I’ll show a bit more about that while testing Sonoff B1 with Sonoff-Tasmota in an upcoming post. Whether you choose between the serial or OTA method will depend on the number of devices you have to update, and/or whether you prefer soldering or messing around with network settings. If you are after maximum efficiency for a large number of Sonoff B1 light bulbs, then a jig with pogo pins should be by far the fastest way to reflash them all.

Geolocation on ESP8266 without GPS Module, only WiFi

October 3rd, 2017 8 comments

When I think about geolocation in I normally think about global navigation satellite systems such as GPS, GLONASS, Galileo, or Beidou, as well as IP geolocation, but the latter is highly inaccurate, and often only good for find out about the country, region, or city.

But if you’ve ever been into your phone location settings, you’d know GPS is only one option, as it can also leverage cellular base stations and WiFi SSIDs, where the former working where there’s coverage, and the later in area with a high enough density of access points. Somehow, I had never thought about using such technology to find location with WiFi modules until Espressif Systems released an application note entitled “Geolocating with ESP8266“.

This document describes how the ESP8266 module may be used to scan for nearby Wi-Fi access points and, then, use their SSID, RSSI and MAC address to obtain a potential fix on the device’s geolocation, using Google geolocation API.

That’s basically a two step process with an AT command returning the list of available APs, SSID, RSSI, and MAC Address:

and after setting up a secure SSL connection, you can then feed that data to Google Geolocation API to get the location with a command that looks like (wifiAccessPoint data not filled here):

Further research led me to m0xpd experimentation with Geolocation on ESP8266 last year, using both IP geolocation (found to be very inaccurate), and Google or Mozilla APIs, and posted his Arduino source code on Github. The Google API found his actual home in Manchester with just the information retrieved from the list of access points.

That also means that unsecured devices on the public Internet can easily be located, as an hacker logins to a router or IoT device, he just needs to run a command to find out the information required by his preferred geolocation API.

2.9″ ESPaper Lite Kit is a $40 ePaper Display Kit with an ESP8266 WiFi Module

September 28th, 2017 8 comments

Squix (Daniel Eichhorn) has designed a 2.9″ ESPaper Lite Kite is a battery powered kit based on a black and white ePaper module, and ESP-WROOM-02 module based on Espressif Systems ESP8266 WiSoC.

Click to Enlarge

2.9″ ESPaper Lite Kit specifications:

  • Wireless Module – ESP-WROOM-02 WiFi module with Espressif ESP8266
  • Display – 2.9″ B&W ePaper module with 296×128 pixels resolution connect over SPI to ESP8266
  • Debugging / Programming – 6-pin serial port header
  • USB – 1x micro USB port for programming
  • Misc – 3 buttons: Reset (wake up from deep sleep);  S0 (flash/GPIO0); S1: user button connected to GPIO12; power switch; charging and (firmware) flashing LEDs
  • Power – JST connector for LiPo battery; charging circuit

You’ll need a 3.3V USB to TTL debug board for flashing the firmware to the board, and a LiPo battery to power it up. The solution is particularly useful if you want a battery powered display that is infrequently updated, since such display only consumes electricity when updated. They could run the module for several weeks with a 800m Ah battery while updating weather info every 20 minutes. MiniGrafx library provides drivers and samples for the board. It is available on Github.

The 2.9″ ESPaper Lite kit can be purchased for $39.90, but if you want something easier to get started you may want to get the 2.9″ ESPaper Plus Kit instead for $49.90, as it adds a USB to serial converter, a 600 mAh battery, an enclosure, and a USB cable.

ESPurna Firmware Now Supports Power Meters “Augmented” with ESP8266 Modules/Boards

September 25th, 2017 15 comments

Sonoff-Tasmota and ESPurna are the two main open source firmware used in home automation devices, such as Sonoff wireless switches, based on Espressif ESP8266 WiSoC. Xose Pérez – aka Tinkerman – has recently purchased “dumb” power meters / kill-a-watt meters, added WiFi to them with ESP-01 module and Wemos D1 mini board, and implemented support in ESPurna firmware leveraging earlier reverse-engineering work by Karl Hagström.

The power meter above looks exactly like the one I’ve been using for review for over two years, and has been more more reliable than other models, such as Broadlink SP2 (with built-in WiFi) that gave up on me after a few months.

Xose actually noticed that old and newer models of the power meters were based on different solutions. Karl’s meter relied on ECH1560, while Xose’s new meter was instead based on Vango V9261F, which has a public datasheet, and was already being worked on by Domoticz community.

While he connect ESP-01 to one of the meter, he found Wemos D1 mini was much easier to connect thanks to a built-in 5V support. He still had to include a Hilink AC to 5V DC power supply module, a baseboard for the Wemos board with an optocoupler and resistor. Finally (not shown in pictures), he hot-glued all cabling to make sure nothing move, and that’s important as you don’t want anything bad happens with AC voltages…

Click to Enlarge

The power meter can then be calibrated and configure in ESPurna user interface, and you can also handle the data through MQTT, Domoticz, a REST API, and/or Home Assistant. Support for V9261F has been implemented and tested, but while the older ECH1560 solutions have been implemented, they have yet to be tested.

The power meter can be purchased for about $12 and up on eBay or Aliexpress, ESPurna firmware on BitBucket.

Designing a 3D Printed Jig to Flash Firmware to ESP8266 based Light Bulbs

September 18th, 2017 6 comments

Karl here. I have to say that my favorite part of 3D printing is designing things from scratch. Recently a reader was asking about a way to flash a lot of Ai Lights on a project he was working on. I suggested 3D printing a jig that pressure fits pins. He didn’t have a printer, and we exchanged contact information and he sent me one of the lights and some pogo pins from Amazon.

Click to Enlarge

Design in Fusion 360

I started by taking a picture of the light to get my pin placement. I set a scale by measuring a known distance then printed and tested. It took about 3 iterations to get them to line up in real life. Keep in mind camera lenses distort reality and knew It would take a couple times. I would just let a few layers print then stop and line everything up. I had a mostly working prototype in a couple hours. I did have to go back and add an additional pin after I found out that 100 needed to be grounded when powering up so took a couple more tries to line that pin up. The first couple times pressing into place it is very snug. After 3 or 4 times it becomes easier to remove.

Click to Enlarge

Click to Enlarge

Click to Enlarge

First Iteration

Building the Jig

I built this thing too many times, but I finally settled a reproducible method. First print at least 2 copies of the jig. Insert pins in jig then place on 2ng jig with pins up. 2nd jig is only for alignment and to keep straight. Once aligned super glue the pins to the jig and let dry. Do not get glue inside the pins or they will get stuck. When I was first putting this together I was doing it the other way, and glue kept on seeping down to the pins and making them stick. This method of gluing worked the first time.

After gluing solder on your leads, use some shrink tube, and make sure to connect pin 100 to the ground. I thought it needed to be temporary, but I forgot to disconnect one flash. I test flashed the light about a dozen time with 100% success.

The method I used to connect is with the leads connected to PC, I press the jig in place slightly offset clockwise a couple degrees. Press in, then turn counter clockwise until you hear a click. When it clicks into the pads and PC dings it is ready to flash.

This was a fun little project and if you would like to print it you can find it here.

Click to Enlarge

 

Review of Sonoff RF Bridge, Sonoff 4ch Pro, and Sonoff POW with Sonoff-Tasmota Firmware

September 12th, 2017 No comments

Karl here. Today we are going to look at 2 new and one older Sonoff devices.

I spent very little time with the stock firmware on the device. I don’t like the fact that an Internet connection is needed, and I am not in control. As of the time of this writing I found the Ewelink was not configurable enough to meet my needs. There is one feature that is really nice that I could easily see keeping stock firmware. It is the Alexa Skill. It worked. I am also currently reviewing Vobot Smart Alarm Clock with Alexa integration and had no trouble controlling the Sonoff devices with Alexa. But unfortunately I am lazy and want everything automatic so I can’t keep it. With the RF bridge I was unable to trigger a light from a motion sensor. In comes Arendst ‘s Sonoff-Tasmota firmware  to the rescue. It gets better all the time. It is dead simple, and so configurable now. He continues to add features and devices.

RF Bridge

You may have seen my previous article building a 433toMQTTto433 bridge to use cheap 433mhz devices. I never did build a case for it, and it’s a little bit of an eyesore. When I found out about a nicely packaged one, I was excited to check it out. Like I stated previously, it didn’t work as I anticipated and was glad when I found out Arendst got one as well. He has a good wiki with on the github page and all the needed information to flash and configure so I won’t go into it. It flashed uneventfully. I was a little scared by the design that it was only going to be able to receive 16 individual codes and pass onto MQTT but that is not the case. It passes everything it receives. You can only send 16 different codes right now which need to be saved ahead of time. So after monitoring the MQTT server I ran into first hurdle. I was getting this example json value.

And actually I found after much frustration that “Data” is a nested json value. This took a while for me to figure out. After that it was relatively easy to parse in Home Assistant and move my automations over from the previous bridge.

and

From the previous article payload off is a made up value and is only used internally to turn the sensor off after a minute.

Just a couple gripes about the rf bridge which are superficial. There is a noticeable increased delay over the homemade bridge from the time it senses a trigger until the light comes on. It is only about half a second but a noticeable difference. And my wife pointed quickly that the led indicating it is on is very bright. I might remove it or install a varistor to tone it down. The receiver does not appear to be as good or might just be that it is in a case or my positioning. I am still able to cover my house but the trigger on my mailbox across the street doesn’t trigger. It was hit or miss on the old one but never triggers now.

FYI I am still running off the same batteries I initially installed in the 433mhz motion sensors over 6 months ago.

Sonoff 4ch Pro

Click to Enlarge

Click to Enlarge

Click to Enlarge

I also received the Sonoff 4ch Pro with 433mhz transmitter remote.

I tested it with stock Ewelink software and all tests done before worked. I quickly installed the alternative firmware from above, and again no loss in functionality. I was still able to pair and clear the 433 MHz remotes. It is weird that it does not indicate with a light that it is in pairing mode as of right now but when you press the button the light blinks when it is learned. The inching, self locking and interlock continued to work as well via switches. I can definitely see this being used for lighting, or if you needed to control multiple items in close proximity. Maybe simple access control. Possibilities are endless. On the product page, it shows wiring with motors as well which looks cool. If I find a unique or interesting project I will share.

The 4 button transmitter is very powerful. It transmits further than any of my other 433mhz devices.

Sonoff POW

Click to Enlarge

A buddy of mine gave me a Sonoff POW to play with. The Sonoff POW is very similar to the Sonoff Basic, but has the ability to measure power usage. I didn’t bother testing the stock software. I went straight to Arendst software. I didn’t have anything to measure power before and this is a welcome addition to my tools arsenal. I don’t need super accurate readings just a good idea what the draw is. I installed a light rated at 75w to test and got the results below. If a more accurate load is available you can calibrate the POW and instructions are in the Wiki.

OTA Firmware

Who wants to drag all their devices back to the PC and flash new firmware? I finally checked it out. It is really simple to do.

First uncomment BE_MINIMAL then export compiled Binary. After a while you will have a bin file in your sketch folder.

Click to Enlarge

After uploading comment BE_MINIMAL, upload again. The 2 steps procedure is because he is running out of space with all the features. He is trying to reduce the code down, and hopefully make this a single step in the future. If you have a web server there are instructions to automate this.

Conclusion

I would like to thank Itead Studio for sending the Sonoff RF Bridge, 4ch Pro and 4 button 433 MHz transmitter. They keep expanding their Sonoff line and make them hacker friendly. I would also like to thank Arendst for his tireless work on Sonoff-Tasmota firmware. If you are just looking to control your lights via Alexa, and don’t mind requiring the Internet to be available the stock firmware might work for you.

1btn is a Battery Powered Open Source ESP8266 WiFi Button

July 8th, 2017 17 comments

If you have some WiFi power switch like Sonoff TH16 at home, you’d normally control them using a mobile app or a web interface. This is all good, but getting your phone, unlocking it, and launching the app to turn on or off an appliance is not the most efficient way to operate, and in some cases, some people in the household may not know how to use a smartphone. Physical WiFi buttons are the solution, but there aren’t so many for sale. We’ve seen previously it was possible to hack an Amazon Dash, but it’s not really that flexible, and 1btn could potentially be a better option, as it’s open source and based on Espressif ESP8266 WiSoC.

1btn specifications:

  • WiFi Module – ESP-12F based on Espressif ESP8266
  • MCU – Microchip Atmel ATmegaxx8 AVR MCU
  • Connectivity – 802.11 b/g/b WiFi up to ~50 meter range
  • USB – 1x USB port for charging and programming (via on-board USB to Serial chip)
  • Misc – User button, multi-color LED, power on/off switch
  • Expansion –
    • AVR MCU – 2x 8-pin headers with ADC, I2C, SPI, RESET, 3.3V, and GND signals
    • ESP8266 – 1x 8-pin header with GPIO, Tx/Rx signals, 3.3V and GND signals
  • Battery – Rechargeable 3.7V/500mAh battery
  • Dimensions – Around 60 mm side to side
  • Weight – ~50 grams

The hardware design files, mechanical design, and NodeMCU (Lua) based firmware can all be found on Github, releases under an MIT license. The button can be used to send an email, text message (via Twilio SMS), or a tweet, as well as invoke an URL action allowing to use all sort of APIs and services such as IFTTT.


The Atmel MCU is used to keep battery life under check, as the button will only connect to WiFi then you press the button. It takes about 5 to 7 seconds to wake up from sleep, and send the message, after which the button goes back to sleep. The battery will last around 300 presses before it needs to be recharged, or about 5 months if you use the button twice a day.

1btn sells on Tindie for $40 plus shipping. That’s a little more than expected, so tried to look for alternative beside Amazon Dash, and I found “ESP8266 IFTTT WiFI Button Dev Kit” – aka Abutton – on Aliexpress going for $13.43 shipped. The button can be re-programmed with custom firmware, and is based on Apixel  ESP8266 dev board with an ESP8266, but not MCU, so it has to rely on ESP8266 low power mode, so battery life is likely to be quite lower than 1btn. Talking about batteries, there are none, and instead there’s a compartment for 2 AA batteries. The Arduino or NodeMCU source code for Abutton can also be found on Github.

Click to Enlarge

WiFi is not exactly the ideal wireless solution for this, that’s maybe why Bluetooth buttons are much more common, and quite cheaper, so maybe having a ESP32 wireless power switch with WiFi and Bluetooth, plus a BT button would be both a better and cheaper solution. The only problem is that AFAIK ESP32 wireless switches don’t exist right now, except in board form factor, and not in a neatly packaged product like the Sonoff switch.

Sonoff B1 is an $18 Hackable WiFi RGB LED E27 Light Bulb based on ESP8285 WiSoC

July 4th, 2017 6 comments

Earlier this year, I wrote about an ESP8266 based RGB LED “AI Light” lightbulb that was hacked to run ESPurna open source firmware. That’s all good, except some people tried to get one, and ended with a different hardware. So if you’d like something that’s more of a “sure thing”, ITEAD Studio has designed Sonoff B1 dimmable RGB LED E27 light bulb based on ESP8285 processor, and with a “4 pads” to allow for custom firmware flashing.

Sonoff B1 hardware specifications:

  • Typical Lumen Output – 600lm
  • Beam Angle – 120 degrees typ.
  • Color Temperature –  2800K-6500K & RGB full color
  • Connectivity – WiFi 802.11 b/g/n @ 2.4GHz
  • Power Supply – 90-260V AC 50/60Hz via E27 base
  • Power Consumption – Light off: 0.5W Max; rated power: 6W
  • Temperature Range – Operating: 0ºC~ 40ºC; storage: -20ºC~ 80ºC
  • Operating Humidity – 5%-90% RH

Sonoff B1 with stock firmware can be controlled using the usual eWelink Android / iOS app to turn the light on and off, define timers, select the color, and/or dim the light. The aopp also supports 4 scenes for resting, reading, partying and casual use that you can customize as you wish. The LED bulb is also compatible with Amazon Alexa, and Google Assistant services so you can use voice commands to control the light instead. Bear in mind that you may need to wait a little longer to get custom firmware working for it, unless you are willing to get your hands dirty. But this looks so similar to “AI Light”, that I’d expect a port not to be too difficult.

You can purchase Sonoff B1 light bulb for $18 + shipping on ITEAD Studio website.