A couple of weeks ago I got a bunch of Olimex ESP8266 development boards (MOD-WIFI-ESP8266-DEV) for IoT prototyping. ESP8266 itself is a neat little WIFI-enabled SOC by Espressif. It has 16 GPIO pins, support for I2C, SPI, UART etc. and even an ADC. Unfortunately, it also lacks good documentation. Flashing the ESP8266 is done over UART but as there are plenty of ESP8266 modules and USB-to-UART devices available, it’s not always easy to find instructions. I have the SparkFun FT231X Breakout which is nice general purpose USB-to-UART device thanks to its full set of pins. As I couldn’t find a tutorial for it, I had to go through some trial and error to get everything working. This is a brief tutorial of what kind of setup I currently have for programming Olimex ESP8266 development boards.
After playing around with the AT Demo and NodeMCU, I decided I’d need a real SDK and toolchain. I will not cover installing the SDK and building software in this post as the instructions are available on GitHub page. In this post I’ll talk about schematics for programming Olimex ESP8266 and instructions for flashing the board with esptool.py. Esptool is included in the toolchain and is a really nice utility that can automatically boot ESP8266 to “UART download” mode and write the new firmware to it.
Wiring from FT231X to ESP8266:
- GND –> GND
- TX –> GPIO3
- RX –> GPIO01
- DTR –> CHIP_E
- RTS pulls GPIO0 low when active. This puts ESP8266 in “UART download” mode which allows flashing the chip.
- I use an external 3.3V power source. The FT231X has a VCC pin but I’ve heard suggestions that it may not be able to provide enough current.
- Remember to set your FT231X to 3.3V mode! ESP8266 does not tolerate 5V voltages.
- For this tutorial I removed the IO0JP jumper completely, but it turns out it is also possible to keep the IO0JP as “1” and omit the 3.9 kilo ohm resistor from the schematics.
Programming Olimex ESP8266
After wiring the system, you are ready for programming Olimex ESP8266. The linked SDK and toolchain includes esptool.py which can be utilized to flash new firmware on the board.
esptool.py --port /dev/ttyUSB0 write_flash 0x00000 firmware/0x00000.bin 0x40000 firmware/0x40000.bin
Once esptool.py is done, ESP8266 should restart with new firmware up and running.
 It turns out that the ADC only measures 0-1V range. This can be a limiting factor in many applications.