Tutorial on how to program the ESP32-WROOM-32 OR ESP32F

Since I had some free time, I made a step by step guide/tutorial on how to program the ESP32-WROOM-32 with the Arduino software. At some or another point I will forget the setup myself and this guide will hopefully save me some time and get me up to speed.

Two short clips, each less than 3 minutes, were recorded to ensure no mistakes are made and the magic smoke does not leave your electronic devices. I hope it will be easy to follow and you will be ready ASAP to try out your ideas. The list of parts used in this tutorial are:
1x USB to Serial port CP2102 – you can get one here.
1x ESP32-WROOM-32 (also known as ESP32-F) with PCB for it – you can get one here.
5x Dupont wire, female on both sides – you can get a set here.

If you ask yourself how to solder the ESP32-WROOM-32, I made a tutorial earlier. You can find it here.

Before you start, ensure you have successfully installed the Arduino programming software and added ESP32 support to it. If you are not sure what it is and how to do it, make sure you visit one of the following links, depending on what operating system you use. Windows Linux/MAC. Once you have completed adding support for the ESP32, feel free to continue.

Once the previous step was successfully completed, we can continue with the hardware setup/wiring or interconnecting the cables between the ESP32-WROOM and the USB to Serial port converter, which is the programmer. You can use other USB to Serial port converters as long as they operate in the range of 3V - 3.3V. Otherwise, if they use 5V or higher voltages, it may (highly probable) destroy your ESP32 I/O (Input-output) pins and make the part useless. If you are not sure and want to avoid the magic smoke appearing when you try this, then please use the CP2102 as I did in this guideline. Connect the GND to GND, 3V3 to 3V3 (read as 3.3V). The TXD pin on the CP2102 USB board to the RXD pin on the ESP32-F board. The RXD pin on the CP2102 USB board to the TXD pin on the ESP32-F PCB board. So that the ESP32-F boots into programming mode, the IO0 (I/O pin zero) should be connected to GND. To ensure you have connected everything properly, watch the video I recorded.

In case it was hard to follow on the video, just use the image schematic diagram and ignore the OLED screen (the diagram schematic image is from the seller, from whom I bought the ESP32-WROOM board.)

At this step, we are done with the wiring/interconnecting the two boards with Dupont wires. Check twice if you have connected everything properly, this will save you some frustrations, time and money (waiting time if you destroy the parts and have to reorder it again.) Plugin the CP2102 USB board into your USB port and start the Arduino software.

In the Arduino software make sure, you have selected the correct programming port, board type, upload speed, and flash frequency (all underlined in pink as well as shown with a green arrow, see the image below.)

Copy the following code block in the Arduino editor.

void setup() {
   // put your setup code here, to run once:
 void loop() {
   // put your main code here, to run repeatedly:
   Serial.println("ESP32-WROOM-32 was successfully programmed!");

Once you have plugged in the USB to Serial to the computer, make sure GND is connected to the IO0 pin. This will ensure, once the ESP32 is reset, boots into the programming mode. Then press the programming button. If everything was set up correctly you should have programmed the ESP32-WROOM successfully. Then disconnect the pin IO0 from GND. To avoid any errors and to ensure everything behaves correctly, watch the video of the execution steps.

Voilà, you have just completed your first successful ESP32-WROOM setup and programmed it correctly. Sometimes things won’t work from the start, do not lose your patience and check every single step twice. With experience, things will start to work. The problems that may appear: wrong board selection, wrong speed selection, wrong baud speed selection, loose Dupont wires make contacts, the CP2102 or your USB port do not have enough current to supply the ESP32-WROOM.

Just to mention it, on my web site I use an Icon made by Eucalyp from www.flaticon.com. Thank you 🙂

Refik Hadzialic Written by:


  1. Sven Rabung
    April 6, 2021

    I love it

  2. Mike Jasen
    June 28, 2021

    Thanks. I hope your doing well

  3. Chris
    January 31, 2022

    Hi, does the board with the ESP32 chip have any meaning here? Theoretically, ESP32 resets itself before uploading the program, so you don’t need to use buttons?

  4. vino
    February 20, 2022

    Love it.
    Thanks for the insturction, it was on point! 🙂

  5. Mohan Krishna
    March 8, 2022

    can u send esp 32 wroom 32 break out board schematic

  6. October 22, 2022

    I bought two Adafruit AirLift – ESP32 WiFi Co-Processor Breakout but after I updated them with their latest firmware (NINA_W102-1.7.4) they became inoperative. I erased and re-flashed them with the older and the same Firmware a few times using different software, but they are working. Any idea what I need to do next?

  7. Implementation defined
    March 2, 2023

    You forgot one very important thing. The EN pin has to be pulled up with a resistor to VCC. In your breakout board that might be already the case, but on a bare chip this is a very important detail.

Leave a Reply

Your email address will not be published. Required fields are marked *