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 DEVKIT DOIT

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 MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Specifications

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

Specifications – ESP32 DEVKIT V1 DOIT

Number of cores 2 (dual core)
Wi-Fi 2.4 GHz up to 150 Mbits/s
Bluetooth BLE (Bluetooth Low Energy) and legacy Bluetooth
Architecture 32 bits
Clock frequency Up to 240 MHz
RAM 512 KB
Pins 30 or 36 (depends on the model)
Peripherals Capacitive touch, ADC (analog to digital converter), DAC (digital to analog converter), I2C (Inter-Integrated Circuit), UART (universal asynchronous receiver/transmitter), CAN 2.0 (Controller Area Netwokr), SPI (Serial Peripheral Interface), I2S (Integrated Inter-IC Sound), RMII (Reduced Media-Independent Interface), PWM (pulse width modulation), and more.

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:

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

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 Pin GPIOs


Version with 36 Pin 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:

/*
  Blink
*/

// ledPin refers to ESP32 GPIO 23
const
int ledPin 
= 
<23
;
// the setup function runs once when you press reset or power the boardvoid 
setup
(
) 
{
// initialize digital pin ledPin as an output.
pinMode
(ledPin
, OUTPUT
)
;
}
// the loop function runs over and over again forevervoid 
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.

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.

Demonstration

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



Build-Web-Servers-with-ESP32-and-ESP8266-eBook-2nd-Edition-500px-h
Build Web Server projects with the ESP32 and ESP8266 boards to control outputs and monitor sensors remotely. Learn HTML, CSS, JavaScript and client-server communication protocols  DOWNLOAD »

Build Web Server projects with the ESP32 and ESP8266 boards to control outputs and monitor sensors remotely. Learn HTML, CSS, JavaScript and client-server communication protocols  DOWNLOAD »

Recommended Resources

Build a Home Automation System from Scratch »   With Raspberry Pi, ESP8266, Arduino, and Node-RED.

Home Automation using ESP8266 eBook and video course »   Build IoT and home automation projects.

Arduino Step-by-Step Projects » Build 25 Arduino projects with our course, even with no prior experience!

What to Read Next…

ESP32/ESP8266 MicroPython Web Server – Control Outputs

MicroPython: Program ESP32/ESP8266 using Mu Editor

ESP32 Digital Inputs and Digital Outputs (Arduino IDE)


Enjoyed this project? Stay updated by subscribing our newsletter!

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

Esp8266/esp32+usb camera stream to webpage is possible?

Learn ESP32

    ESP32 Introduction

    ESP32 Arduino IDE

    ESP32 Arduino IDE 2.0

    VS Code and PlatformIO

    ESP32 Pinout

    ESP32 Inputs Outputs

    ESP32 PWM

    ESP32 Analog Inputs

    ESP32 Interrupts Timers

    ESP32 Deep Sleep

Protocols

    ESP32 Web Server

    ESP32 LoRa

    ESP32 BLE

    ESP32 BLE Client-Server

    ESP32 Bluetooth

    ESP32 MQTT

    ESP32 ESP-NOW

    ESP32 Wi-Fi

    ESP32 WebSocket

    ESP32 ESP-MESH

    ESP32 Email

    ESP32 Text Messages

    ESP32 HTTP GET POST

    HTTP GET Web APIs

    HTTP POST Web APIs

    Server-Sent Events

Web Servers

    Output Web Server

    PWM Slider Web Server

    PWM Multiple Sliders Web Server

    Async Web Server

    Relay Web Server

    Servo Web Server

    DHT Web Server

    BME280 Web Server

    BME680 Web Server

    DS18B20 Web Server

    LoRa Web Server

    Plot/Chart Web Server

    Chart Multiple Series Web Server

    SPIFFS Web Server

    Thermostat Web Server

    Momentary Switch Web Server

    Physical Button Web Server

    Input Fields Web Server

    Images Web Server

    RGB LED Web Server

    Timer/Pulse Web Server

    HTTP Auth Web Server

    MPU-6050 Web Server

    MicroSD Card Web Server

    Stepper Motor Web Server

    Stepper Motor WebSocket

    Gauges Web Server

DIY Cloud

    ESP32 Weather Station

    Control GPIOs

    View Sensor Readings

    ESP32 MySQL

    ESP32 PHP Email

    ESP32 SIM800L

    Cloud Node-RED Dashboard

    Cloud MQTT Broker

    ESP32 Cloud MQTT

ESP-NOW

    ESP-NOW Introduction

    ESP-NOW Two-Way

    ESP-NOW One-to-Many

    ESP-NOW Many-to-One

    ESP-NOW + Wi-Fi Web Server

Firebase

    Firebase Realtime Database

    Firebase Web App

    Firebase Authentication

    Firebase BME280

    Firebase Web App Sensor Readings

    Firebase ESP32 Data Logging

Modules

    ESP32 Relay Module

    ESP32 DC Motors

    ESP32 Servo

    ESP32 Stepper Motor

    ESP32 MicroSD Card

    ESP32 MicroSD Card Data Logging

    ESP32 PIR

    ESP32 HC-SR04

    ESP32 I2C Multiplexer

Sensors

    ESP32 DHT11/DHT22

    ESP32 BME280

    ESP32 BME680

    ESP32 DS18B20

    ESP32 Multiple DS18B20

    ESP32 BMP180

    ESP32 BMP388

    MQTT DHT11/DHT22

    MQTT BME280

    MQTT BME680

    MQTT DS18B20

    ESP32 MPU-6050

Displays

    ESP32 OLED

    ESP32 LCD

    OLED Temperature

ESP32 Features

    ESP32 Hall Sensor

    ESP32 Touch Sensor

    ESP32 I2C

    ESP32 Flash Memory

    ESP32 Dual Core

Useful Guides

    ESP32 Troubleshooting

    ESP32 Access Point

    ESP32 Fixed IP Address

    ESP32 MAC Address

    ESP32 Hostname

    ESP32 OTA

    ESP32 OTA Arduino

    ESP32 OTA VS Code

    ESP32 Solar Panels

    ESP32 Alexa

    ESP32 Install SPIFFS

    ESP32 Time and Date

    ESP32 Epoch Time

    ESP32 Google Sheets

    ESP32 Email Altert

    ESP32 ThingSpeak

    Weather Station Shield

    ESP32 IoT Shield

    ESP32 Weather Station PCB

    ESP32 Wi-Fi Manager

    VS Code and PlatformIO

    VS Code SPIFFS

    VS Code Workspaces

    Save Data Preferences Library

    Reconnect to Wi-Fi

    Useful Wi-Fi Functions

Other Projects

    Telegram Control Outputs

    Telegram Sensor Readings

    Telegram Detect Motion

    Telegram Group

    ESP32 Status PCB

    ESP32 BMP388 Datalogger

    ESP32 Web Serial

    ESP32 Door Monitor

    ESP32 Door Telegram

    ESP32 NTP Timezones

ESP32 Boards

    ESP32 Camera

    ESP32 LoRa

    ESP32 OLED

    ESP32 SIM800L

Learn More

    Learn ESP32

    Learn ESP8266

    Learn ESP32-CAM

    Learn MicroPython

    Learn Arduino

    Build Web Servers eBook

    ESP32 Premium Course »