Saturday, 13 January 2018

Web-Configured ESP8266

A unique feature of Internet-enabled "things" is that they often have an Internet connection and little else. First-configuration of these devices therefore presents a challenge, which most solve by creating their own wireless access point, to allow their owner to supply credentials for the local wireless network.

Web-Configured ESP is an attempt to abstract away the boilerplate required for this task, and other related ones. It's a "starter" sketch providing the following basic features:

  • Creation of a temporary Access Point ("MyESP") allowing the configuration at the conventional url,
  • A basic web-server running at this address, serving config.json and storing updates to it
  • An HTTP update server, allowing upload of new sketches "over the air"
  • An mDNS responder allowing access at http://myesp.local
Together, these features allow bootstrapping of sketches without requiring the devices to be tethered to a development machine, and user-provisioning of the finished article in the field.

Wednesday, 8 November 2017


My title will no doubt remind regular readers of 2013's Weather Guy, a weather app which completely maxed out an ATMega328. Well it's had a technology refresh replacing Ethernet with Wifi, XML with JSON and AVR with ESP. A surprising amount of display code survived the upgrade and can be found on GitHub (along with Eagle files and Gerbers).

The hardware has also been simplified and now comprises merely:
The Wemos has been mounted on the underside of the board as can be seen above, because I soldered its pin headers on the wrong side; however this suggests to rotate the display by 180 degrees, making the build more compact.

The software is built on the following fine components:
Perhaps the most interesting aspect of this build is its configuration:
  • Stored in JSON format in the onboard flash filesystem
  • An index.html is served to a browser which loads the configuration file and initialises form input items (via Transparency)
  • Submission of the configuration form transmits the form values in JSON format to the server where it is stored back in the filesystem
  • The index page also supports firmware upgrade
This pattern, where the client assembles a UI for the user out of pieces obtained from the server is finally becoming prevalent in the wider web, but nowhere is it more useful than here where the client has maybe 200x the power of the serving microcontroller.

The Weather Underground API provides current conditions, a 5-day forecast and astronomical information. Two of these can be seen below.

Sunrise and Moon Phase

Current Weather Conditions

Friday, 6 October 2017

Autumn Update

Some recent updates on the Github:

  • Interrupted is now compatible with the Arduino (1.8.4 and above) and Energia (18 and above) IDEs. However you have to cut-and-paste the examples, for now.
  • Tasks is also compatible with the Arduino and Energia IDEs, and (maybe) PlatformIO. Ditto caveat about examples.
  • uC-Makefile has been updated for the latest Arduino and Energia IDEs. Unfortunately Energia has discontinued support for the Stellarpad, so this option is now busted.
  • invaders now compiles under Energia 17, the last release to support Stellarpads.
  • WeatherGuy has had an ESP8266 refresh as WifiWeatherGuy. Stay tuned for more information on that.

Friday, 17 February 2017

ESP12-e Emergency Development Board

Mini-breadboards or DIY ESP Development Board?

What do you do when you can't wait for cheap breadboards to arrive from China? Build a development board of course!

The picture shows the work of an afternoon, to make a dev-board for the ESP-12 "IO Adapter Plate Expansion" (ebaysoldered up last time, which inconveniently didn't fit any breadboards around the house.

The circuit is based on this one except that it's powered from the FTDI cable.

The following week the mini-breadboards arrived. Haven't used them yet!

Thursday, 15 December 2016

Further adventures in ESP8266

ESP-12E with Adapter Board
This neat piece of bargain-priced kit arrived in the post from China recently and today I got around to soldering it together. You-Tube-r RandomHacks has a nice video describing how he did it; I'll just summarize my experience here:

  • You really want a magnifying glass!
  • Solder flux is nice to have but not essential.
  • Mount the adapter plate on the header strips and insert in a breadboard before soldering.
  • Tin two pins of the WiFi module at opposing corners and solder them first to hold it secure while soldering the others.
Despite all this I failed to solder a couple of the pins correctly at the first attempt; the magnifying glass to the rescue once again!

Frustratingly the adapter plate is exactly the wrong size for the breadboards I had at hand (too wide for a single one and too narrow for two side-by-side) so I had to connect it with male-female breadboard jumper wires. To program it, I found I had to connect the following pins:
  • Gnd, GPIO15 and GPIO0 to FTDI Gnd
  • Vcc, GPIO2 and CH_PD to FTDI Vcc
  • TxD to FTDI RxD
  • RxD to FTDI TxD
  • Rest to Gnd (momentary, to return to program mode)
Note that my FTDI connector supplied enough current to power the board at 3.3v; you may not be so lucky.

Tuesday, 13 September 2016

Sonoff Wireless Switch

All for less than a fiver!
This little baby is an ESP8266-powered wireless mains relay from ITead. Although it comes with firmware installed which will suit most people, that requires an internet connection as it needs to talk to the Amazon cloud. Luckily for us, some people have done a lot of hard work to provide several flavours of open replacement. I went with the Arduino one and version 1.6.11 of the IDE.


  1. Get the ESP8266 core for Arduino by following the instructions. I used the git version.
  2. Get the Arduino version of the Sonoff firmware and read the prerequisite section of its wiki.
  3. I also had to specify version 3.1 of MQTT in PubSubClient.h for correct interoperation with mosquitto on Raspian.
  4. Edit the sketch's user_config.h for your LAN.
  5. Under the IDE tools menu, set Flash size: "1M (64K SPIFFS)"
  6. Solder a pin header onto the board and connect an FTDI cable to the headers.
  7. Holding the Sonoff button down, plug the FTDI cable into the host and upload the firmware.


  • The Arduino serial monitor comes in handy for troubleshooting, set the baud rate to 115200.
  • The Arduino IDE allows specification of debug level, under the Tools menu, to get firmware debugging messages on the serial port. (Set this prior to upload, obviously.)
  • I had to enable 802.11b networking on my router, before the Sonoff would connect.
  • I installed mosquitto on a Raspberry Pi, and enabled rsyslog on it. I also installed mosquitto-clients on my laptop to keep an eye on the MQTT stream.
  • On power-up the Sonoff creates a temporary access point, allowing direct configuration of networking parameters, if you've made a mistake, at IP address (This configuration page is also available during normal operation, at whatever address you've configured for it.)
  • Once this firmware has been flashed, it can be upgraded OTA. (I installed nginx on my laptop and had it serve files from my ~/www directory to facilitate this.) 

Friday, 26 August 2016

A Tinier Tiny

Now even tinier!
The photo shows an upgrade to last year's tiny ATtiny development board: now even smaller and with fewer components but with better breadboard performance!

The schematic and board layout (for Eagle) along with gerbers can be found here. The pcb (from Seeed, 1€) was cut down to size with a Dremel.