Trouble Flashing Your ESP8266? Meet DIO and QIO

[Pete] was building a hot tub controller, using a WEMOS board based on the venerable ESP8266. After assembly, the board was plugged into USB and [Pete] hit the flash button. No dice. Investigation with some terminal software indicated a checksum error.

Assuming the board was dead, [Pete] grabbed another — and suffered the same problem.  The WEMOS boards wouldn’t program, but other boards had no issues. Sensing that something may be amiss, further research was in order. A forum post turned up discussing different programming modes for the ESP8266.

It turns out that there are different types of flash used with the ESP8266, and the correct programming mode must be selected for a given hardware setup. These modes are known as DIO and QIO, meaning “dual IO” and “quad IO” respectively. This refers to the number of IO line used to talk to the flash memory. There are also further modes, known as DOUT and QOUT. It’s important to identify the modes supported by the flash chip on board, by looking at the datasheet. Obviously this can be difficult on some pre-built modules, so experimentation is the key here.

With the wrong mode selected, writes to the flash will fail, and reading back will turn up a checksum error. It’s a simple matter of changing a line in the make file and trying different modes, to see which one works. This forum post has a more in-depth coverage of the issue. 

By choosing different flash memory parts and selecting the DIO or DOUT modes, it’s actually possible to free up more GPIO pins as well. This knowledge is handy when optimizing ESP8266 designs for memory speed or maximum IO flexibility. It’s a good lesson that it always pays to look at the datasheet to get the best out of your parts.

LAMEBOY is Handheld Gaming on the ESP8266

We’ve had our eye on [davedarko’s] LAMEBOY project for a while now, a handheld setup in roughly the same form factor as the classic Nintendo Game Boy. It’s remarkable how approachable portable electronic design has become, and that’s really what makes this interesting. The design is beautiful, and the closer you look, the more respect you have for what [dave] is doing.

Right now his proof of concept has a 3D printed enclosure whose face is the printed circuit board. We love how the lower left corner of the PCB slips under a pocket in the case, which makes it possible to use just one screw to secure the two together in the upper right.

The LAMEBOY is built around an ESP8266 module. Anyone who has used one knows this chip contains a fair amount of horsepower, but very little I/O. [Dave] has a lot going on with an LCD screen, six user buttons, a USB to I/O chip, and an SD card slot. He took two approaches to solve this dilemma. First he grabbed a PCF8574 port expander, and second he’s offloaded the color control of the screen backlights to an ATtiny85 (running a BlinkM clone).

Below you can see some early game tests on the perfboard prototype. We haven’t seen game play on the most recent prototype (there is a screen color test video in his latest project log) but it sounds as though [dave] plans to make use of the Gamebuino framework. This should mean that there will be no shortage of cool ROMs to load.

Continue reading “LAMEBOY is Handheld Gaming on the ESP8266”

Datalogger uses ESP32 and ESP8266 Low Power Modes

[G6EJD] wanted to design a low power datalogger and decided to look at the power consumption of an ESP32 versus an ESP8266. You can see the video results below.

Of course, anytime someone does a power test, you have to wonder if there were any tricks or changes that would have made a big difference. However, the relative data is interesting (even though you could posit situations where even those results would be misleading). You should watch the videos, but the bottom line was a 3000 mAh battery provided 315 days of run time for the ESP8266 and 213 days with the ESP32.

Continue reading “Datalogger uses ESP32 and ESP8266 Low Power Modes”

ESP8266 Adds Slick Touchscreen Controls to a Stretch Limo

The popularity of the ESP8266 WiFi module has a lot to do with its ability to inexpensively connect to the Internet. However, [hwhardsoft]’s stretch limousine environmental control system explores another use for these modules: a simple way to tie together disparate systems with a common user interface.

On a basic level, the problem is one we’ve all faced: multiple devices with multiple control interfaces create an awkward user experience. Have you ever worked in an office with 6 brands of air conditioner requiring 6 different remotes? Because of its low-cost, support for Wi-Fi, serial, and GPIO, ESP8266 boards are a reasonable candidate to create a unified control system for multiple devices. This is even more true for the ESP32, as it adds Bluetooth support.

[hwhardsoft]’s use case is fairly straightforward. The limousine (a Lincoln stretch) has multiple LED lighting controllers, climate control, and a laser projector. This was not exactly a smooth user experience, so [hwhardsoft] tied all the controls to two slick touchscreen interfaces (presumably one for the driver and one for the passengers).

Each touchscreen sends commands over Wi-Fi using UDP to a control board that switches relays to control the different devices, as we’ve seen previously.

While relays are arguably not the ideal solution here, these control boards already existed and were functional, so it would have been wasteful to throw them out. An easy improvement suitable for future projects would be to use NPN transistors to simulate button presses on the remote controls. This works quite well and lowers cost, power, and parts count, while being faster, more reliable, and quiet.

If you wanted to build something similar in your home or office, but want to use an Android smartphone instead of a touchscreen, the Kivy Python module allows you to do just that. It’s quite easy to set up a simple interface with buttons, dropdown lists, and text inputs that send data to an ESP8266 over UDP.

ESP8266 Based Internet Radio Receiver is Packed with Features

Have a beautiful antique radio that’s beyond repair? This ESP8266 based Internet radio by [Edzelf] would be an excellent starting point to get it running again, as an alternative to a Raspberry-Pi based design. The basic premise is straightforward: an ESP8266 handles the connection to an Internet radio station of your choice, and a VS1053 codec module decodes the stream to produce an audio signal (which will require some form of amplification afterwards).

Besides the excellent documentation (PDF warning), where this firmware really shines is the sheer number of features that have been added. It includes a web interface that allows you to select an arbitrary station as well as cycle through presets, adjust volume, bass, and treble.


If you prefer physical controls, it supports buttons and dials. If you’re in the mood for something more Internet of Things, it can be controlled by the MQTT protocol as well. It even supports a color TFT screen by default, although this reduces the number of pins that can be used for button input.

The firmware also supports playing arbitrary .mp3 files hosted on a server. Given the low parts count and the wealth of options for controlling the device, we could see this device making its way into doorbells, practical jokes, and small museum exhibits.

To see it in action, check out the video below:

[Thanks JeeCee]

Continue reading “ESP8266 Based Internet Radio Receiver is Packed with Features”

ESP8266 Dev Board Sports Flying Squirrel PCB Art

[Jarrett] has a box of Nokia phone batteries and decided to use them in a project. He designed and built WiFi throwies— these consist of ESP8266 WiFi chips attached to custom PCBs and powered by Nokia phone batteries. The board charges LiPoly/Li-Ion batteries over USB with the help of a MCP73831 charger chip and has USB-serial on-board. It’s much more of a powered ESP8266 dev board than a throwie, but we’ll give [Jarrett] the benefit of the doubt.

The PCB ended up larger than [Jarrett] would have liked, because of the size requirements of the phone battery connected to it. However, this gave him the canvas to create some fun PCB art. After designing the board he imported the Gerbers into Adobe Photoshop and converted each layer into a monocolor image based on the material of that layer—purple for OSHPark’s stencil mask, beige for DirtyPCB’s FR4, and so on. One challenge [Jarrett] encountered was how to get the art back into Altium Circuit Maker, his layout program of choice. After playing around with different methods for a few days, he wrote a tutorial sharing what he found out.

HaD has covered WiFi throwies before. We also appreciate a beautiful circuit board. Check out our posts on turning PCBs into art and making lapel pins out of circuit board fiberglass.

Practical IoT Cryptography on the Espressif ESP8266

The Espressif ESP8266 chipset makes three-dollar ‘Internet of Things’ development boards an economic reality. According to the popular automatic firmware-building site nodeMCU-builds, in the last 60 days there have been 13,341 custom firmware builds for that platform. Of those, only 19% have SSL support, and 10% include the cryptography module.

We’re often critical of the lack of security in the IoT sector, and frequently cover botnets and other attacks, but will we hold our projects to the same standards we demand? Will we stop at identifying the problem, or can we be part of the solution?

This article will focus on applying AES encryption and hash authorization functions to the MQTT protocol using the popular ESP8266 chip running NodeMCU firmware. Our purpose is not to provide a copy/paste panacea, but to go through the process step by step, identifying challenges and solutions along the way. The result is a system that’s end-to-end encrypted and authenticated, preventing eavesdropping along the way, and spoofing of valid data, without relying on SSL.

We’re aware that there are also more powerful platforms that can easily support SSL (e.g. Raspberry Pi, Orange Pi, FriendlyARM), but let’s start with the cheapest hardware most of us have lying around, and a protocol suitable for many of our projects. AES is something you could implement on an AVR if you needed to.

Continue reading “Practical IoT Cryptography on the Espressif ESP8266”