Getting Started with the ESP32 Development Board

This article is a getting started guide for the ESP32 development board. If you’re familiar with the ESP8266, the ESP32 is its sucessor. The ESP32 is loaded with lots of new features. The most relevant: it combines WiFi and Bluetooth wireless capabilities and it’s dual core.

Find the differences between the ESP32 and the ESP8266: ESP32 vs ESP8266 – Pros and Cons


In this post, we’ll be using the ESP32 DEVKIT DOIT board as a reference. But the information on this page is also compatible with other ESP32 development boards with the ESP-WROOM-32 chip.

Here’s some examples of ESP32 boards:

Where to Buy?

Our ESP32 projects are build using mainly the ESP32 DEVKIT DOIT board and that’s the one we recommend getting.

You can also read the following article that compares several ESP32 development boards: ESP32 Development Boards.

You can use the preceding links or go directly to to find all the parts for your projects at the best price!


When it comes to the ESP32 chip specifications, you’ll find that:

  • The ESP32 is dual core, this means it has 2 processors.
  • It has Wi-Fi and bluetooth built-in.
  • It runs 32 bit programs.
  • The clock frequency can go up to 240MHz and it has a 512 kB RAM.
  • This particular board has 30 or 36 pins, 15 in each row.
  • It also has wide variety of peripherals available, like: capacitive touch, ADCs, DACs, UART, SPI, I2C and much more.
  • It comes with built-in hall effect sensor and built-in temperature sensor.

To learn more about the ESP32 GPIOs, read our GPIO reference guide: ESP32 Pinout Reference: Which GPIO pins should you use?

Programming Environments

The ESP32 can be programmed in different programming environments. You can use:

  • Arduino IDE
  • Espressif IDF (IoT Development Framework)
  • Micropython
  • JavaScript
  • LUA

In our projects, we program the ESP32 mainly with Arduino IDE.

Preparing the ESP32 Board in Arduino IDE

There’s an add-on for the Arduino IDE allows you to program the ESP32 using the Arduino IDE and its programming language. Follow one of the next tutorials to prepare your Arduino IDE:

ESP32 Pinout Guide

The ESP32 has more GPIOs with more functionalities compared to the ESP826.

With the ESP32 you can decide which pins are UART, I2C, or SPI – you just need to set that on the code. This is possible due to the ESP32 chip’s multiplexing feature that allows to assign multiple functions to the same pin. If you don’t set them on the code, the pins will be used as default – as shown in the figure below (the pin location can change depending on the manufacturer).

Version with 30 GPIOs

Version with 36 GPIOs

You can read our detailed ESP32 Pinout Reference Guide.

Upload Code to the ESP32 using Arduino IDE

To show you how to upload code to your ESP32 board, we’ll build a simple example to blink an LED.

Copy the following code to your Arduino IDE:


// ledPin refers to ESP32 GPIO 23
const int ledPin = 23;

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin ledPin as an output.
  pinMode(ledPin, OUTPUT);

// the loop function runs over and over again forever
void loop() {
  digitalWrite(ledPin, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                  // wait for a second
  digitalWrite(ledPin, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                  // wait for a second

View raw code

In this code, we’re controlling an LED connected to GPIO 23.

const int ledPin = 23;

So, connect an LED to your ESP32 by following the next schematic diagram.

Important: always check the pinout for your specific board before building any circuit.

Here’s a list of the parts you need to build this previous circuit:

Plug your ESP32 development board to your computer and follow these next instructions:

1) Go to Tools > Board, scroll down to the ESP32 section and select the name of your ESP32 board. In my case, it’s the DOIT ESP32 DEVKIT V1 board.

2) Go to Tools > Port and select a COM port available.

3) Press the upload button.

That’s it!

Note: If you get the following error when trying to upload code, it means that your ESP32 is not in flashing/uploading mode.

Failed to connect to ESP32: Timed out... Connecting...

To upload code, you need to follow the next steps (make sure you have the right board selected:

  • Hold-down the “BOOT” button in your ESP32 board

  • After you see the  “Connecting….” message in your Arduino IDE, release the finger from the “BOOT” button:

  • After that, you should see the “Done uploading” message.

That’s it. After uploading the new sketch, you can press the “ENABLE” button to restart the ESP32 and run the new uploaded sketch.

Note: Learn how to fix the “Failed to connect to ESP32: Timed out waiting for packet header” error permanently when trying to upload new code to your ESP32 board once for all.


After uploading the code, the LED connected to GPIO 23 should be blinking every other second.

Wrapping up

We hope you’ve found this getting started guide useful. The blinking LED is just a simple project to get you started with the ESP32. This is also a great way to learn the procedure you need to do to upload code to your board.

If you like ESP32, we have more than 20 projects with the ESP32 you can find in our repository of ESP32 projects:

You may also like:

If you like ESP32 make sure you subscribe to our blog, so you don’t miss upcoming projects.

Do you have any questions? Leave a comment down below!

Thanks for reading,

P.S. If you like the ESP32, you might also enjoy our ESP32 course: Learn ESP32 with Arduino IDE

Learn how to program and build projects with the ESP32 and ESP8266 using MicroPython firmware DOWNLOAD »

Learn how to program and build projects with the ESP32 and ESP8266 using MicroPython firmware DOWNLOAD »

Enjoyed this project? Stay updated by subscribing our weekly newsletter!

35 thoughts on “Getting Started with the ESP32 Development Board”

    • It won’t be able to stream, but with the ESP you can create a web server that has a camera stream embedded (for example, as you would embedded a youtube video in an HTML page).

  1. How about a little more about the dev board? What are the user-accessible components – buttons, ports, pins,. A look at the back of the board? What are the dimensions? When you said press the Upload button it sounds like there is a button on the board called the Upload button but I think you meant select Upload from the Sketch menu in the Arduino IDE. Is that correct? You might want to make that clearer.

    • Hi Don,
      Thanks for the comment! The back of the board has no components, it looks like the ESP-12E NodeMCU Kit module.
      There’s only two buttons in the ESP32 Dev Module: EN and BOOT. I’ve updated the image in the blog post to highlight those two buttons and make it easy to see them.
      The Upload button I’ve mentioned in the post was for the Arduino IDE – I’ve also fixed that sentence.
      The image in the “Pin assignment” section describes exactly the function of each pin.

      I hope this helps,
      Thank you!

  2. Hi RUI I wanted to know about the esp32 so now I can start playing thsnks so much love all your getting started projects jeff

  3. Rui I am a bit confused about your course Build a Home Automation System for $ 100 because I see the need to make a wiring for each element that wants to automate starting from a single ESP8266 this prevents me from using it in an existing construction wasting the wireless qualities of the ESP8266 module by Please tell me what I understood? Thank you

  4. Thanks for posting this. So many people think that going with ESP8266 and ESP32 you have to learn a whole new system and can’t run under the Arduino ide. So many are stuck with limited I/O, processing power, etc. So hopefully getting this sort of information into their hands will help. Thanks.

  5. Great tutorials, you have got me into both the ESP 32 and ESP8266.

    Worth pointing out that the Arduino IDE now has lots of examples of using these devices. I used these with your tutorial and got going by just plugging the device into the PC USB port – no extra circuitry necessary.

    • Hi Ken!
      That’s true there are lots of examples on the Arduino IDE that help you get started! That’s great for beginners!
      Thank you for sharing!
      Sara 🙂

      • I also use Visual Micros IDE for Arduino which uses the Arduino IDE but is an add on for Microsoft Visual Studio. That is really nice because it makes available the power of Visual Studio with for example Intellisense, online debugging and GIT sotware backup and revision control. The community edition of VS is free for small scale users, as is Visual Studio Team Services – their GIT Server. Your tutorials for the ESP32 and ESP8266 work in this environment too.

        Best Regards


  6. So you have to press the button on the esp32 to upload. Won’t that little button wear out soon . for me because I make too many mistakes and have to reload. Is there a work around?

    • Hi Franklin.
      In our first ESP32 boards we didn’t need to press the button to upload code.
      But recently, we have to do that every time we want to upload new code.
      I know it is a bit frustrating to press the boot button every time you need to upload new code, specially when there are a lot a mistakes and we want to test things right away.
      Unfortunately I don’t have any work around to share. You really need to press that button.
      However, if anyone knows any work around, please share.
      Sara 🙂

  7. Thank you Rui and Sara for sharing. It has helped me tremendously as I am sure many others. The projects are well put together and very helpful and easy to understand. You are kind in your answers.

    • Hi Kevin.
      Yes, the ESP32 has analog pins: digital to analog converter pins(DAC) and analog to digital converter (ADC) pins.
      If you want to read analog sensors, just use the ADC pins. These are the ADC pins: GPIOs: 0, 2, 4, 12, 13, 14, 15, 25, 26, 27 32, 33, 34, 35, 36, and 39.
      If you want to produce analog signals, use the DAC pins: GPIO25 and 26.
      Sara 🙂

  8. Trying to compile the blinking LED project I get a compilation error in line 34:
    Importers of: No module named serial
    Can you help, please?

  9. Although I am not running Windows but Ubuntu 18, the problem was the same: missing module “serial” in python. In my case the solution was to run
    sudo apt-get install python-serial
    Now it works OK!!!

  10. Are you planing to create similar ESP32 course using esp-idf instead of arduino?
    or can you please refer me to a website that teaches how to use esp-idf? Thank you very much

    • Hi Saber.
      At the moment, we don’t have anything planned about esp-idf.
      We’re working on a new course using MicroPython that will be available soon.
      I don’t know any good website that teaches how to use esp-idf.
      A good starting point is the official documentation:
      I hope this helps.
      Sara 🙂

  11. So far great work :)..

    question, I used this to upload a sketch, it worked the first time. Now I want to do it again but it fails..

    any sugestions?

    the error i get from the arduino IDE;
    /////////////////// v2.3.1
    Chip is ESP32D0WDQ6 (revision 1)

    A fatal error occurred: Timed out waiting for packet header
    A fatal error occurred: Timed out waiting for packet header

      • Thnx,

        well, I guess I did it wrong a couple of times, again pressing the boot button until connecting…. and now it worked again 😀

        thnx for the quick response.

  12. Hi
    i am working on esp32 dev kit,for developing Home automation,
    suddenly i got struck with spi flash boot error, i am trying to resolve it, but we cannot, please can any one help us solve the problem.

  13. Nice example but you don’t mention that if you use GPIO 2 instead of GPIO23, there is already a blue LED connected to the dev board.

Leave a Comment

Download our Free eBooks and Resources

Get instant access to our FREE eBooks, Resources, and Exclusive Electronics Projects by entering your email address below.