Flashing ESP-01 with new Firmware

Flashing the ESP-01

I used a breadboard to wire up the programmer just because I thought it was easier. You could wire these chips directly to each other, just don’t solder them. My components came with the pins in different spots than what I’ve seen in tutorials so I’ve used a schematic to show the connections.


Make sure the jumper on the FTDI programmer is set to 3.3v!

It may be important to note at my ESP-01 didn’t have a pin labeled CH_PD. Instead it was EN, so use that if your module is the same as mine.

Now that we have the connections set up, we need firmware to update the module. Luckily there’s a slick cloud service to create your own build. I selected the following modules to be included just as a test:¬†file, gpio, http, mdns, net, node, tmr, uart, wifi. As far as I know this module will require the 1.5.4 branch to have enough space for modules and sketches. You’ll be given two builds of the firmware, an integer one and float one. I don’t know all the differences but if you’re planning on using floating point numbers you’ll want to install the float version.

Once you have your firmware you’ll need an application or script to flash the ESP-01. There are a few ways to do this, I prefer the NodeMCU-flasher application. It’s simple to use and hasn’t let me down yet. In the future I’ll try some cross-platform approaches because I prefer to be on Linux,

So, if everything is wired up correctly you can go ahead and plug it in. If you have the NodeMCU flasher started , in the ‘Operation’ tab you’ll notice it’s likely selected the port you’re plugged into.

In the ‘Config’ tab, you’ll want to add your firmware that you had customized from the cloud service.¬† To open it, click on the gear looking symbol and find your firmware. Make sure your Offset is set to 0x00000 to install at the base of the module.

In the ‘Advanced’ tab the only thing I had to change was the Baud Rate. It defaulted to 203400 but the firmware should be flashed at 115200.


That’s it! Back on the Operation tab you can hit Flash. You’ll notice it’ll find the 2 MAC’s typically one character off from each other.

Once the flashing is complete you’ll see a green circle with a check mark if it completed successfully.


To confirm this, connect to the device through a serial terminal, I use PuTTY. Same COM number as you’ve flashed, and the baud rate will be 115200.


Disconnect the GPIO_0 pin from GND (ground). Take a jumper cable and connect it to RST on the ESP-01. Carefully tap the RST wire to GND to reset the module. You should see something like the following:


Don’t worry about the lua error. It’s common to see that when you haven’t uploaded any code to run on startup.

Troubleshooting the NodeMCU Firmware Flash

While getting to know this little module I had a hell of a time getting things to work. Here are a few problems I had:

Write flash timeout

This was pretty cryptic because I had all the settings correct but it just wouldn’t flash. The problem was there just wasn’t enough power to flash the module from my USB 2.0 port. Once connected to a USB 3.0 port it worked fine.

After hitting the flash button, it just spins/hangs/does nothing.

This could be because the module didn’t receive power while connected correctly. Double check the connections, take a jumper cable, connect it to the RST pin and tap it to ground. This resets the module, try flashing again and it should work.