ESP8266 Arduino Reset Program Circuit


It is possible to setup a circuit that automatically resets and programs the ESP8266 with Arduino. This is a little tricky due to how the ESP8266 is programmed conflicting with the way that the Arduino serial port works. On the official documentation for and Arduino ESP8266 project, they present the following circuit.

esp8266 arduino program circuit bad

This circuit will allow for automatic programming, but, when you open the serial monitor, the board is held in reset mode as the Arduino serial monitor pulls both DTR and RTS low. One option is to use a separate serial monitor that allows for control of the pins, to be used. I have used Real Term before and it works well. It does create a bit of a hassle because you have to be sure to close the serial port before programming, and turn it back on after programming, something the Arduino serial monitor does automatically.

What I do in my own designs, is use a variation of the Node MCU reset circuit as shown below.

Esp8266 Reset Program Circuit

I have used this design with a lot of success in many of my projects. It allows for automatic programming and using the serial port in Arduino. The only thing you have to be cautious with is to be sure to not add an additional pull up to GPIO0 and the reset pins, as this circuit has the required pull ups. If you put a higher value pull up, it will not work reliably. I found this out the hard way. In my own designs I use a 4 resistor network resistor and the MMDT3904 dual transistor. This makes it so I only need 2 components for the entire circuit.

One more note, when using this circuit, be sure to select the nodemcu reset from the Arduino board menu.

I am currently experimenting with some other ideas to further simplify the circuit and I will post an update if, and when, I figure something easier out.


About Author

I love to tinker, code, and create electronics. I primarily focus on Raspberry Pi (and other linux SBCs) and Arduino (and other microcontrollers that run on the Arduino platform).

  • Shoji Yamamoto

    RTS=High and DTR=High then a ESP8266 runs.
    If an Arduino’s sketch to set GPIO0=Low, one of transistor’s Vceo becomes negative voltage.
    Is it OK?

    I know the circuit is famous and it works great.

    But I have never see maximum rating of Vceo for negative voltage in part’s datasheet.