Setup guide

What Is ESP32? Complete Beginner's Guide

ESP32 is a family of programmable microcontroller chips from Espressif. A development board adds the power and USB circuitry needed to connect one to your computer. Start with a classic ESP32-WROOM DevKit, upload a simple program, then add one circuit at a time.

Beginner introduction · Updated 2026-10-29

ESP32 board overview workspace for a beginner guide
Jump to a section

Before you start

Example board
Classic ESP32-WROOM-32/32E DevKit with a USB-to-UART bridge. ESP32-DevKitC V4 is the pinout reference; clone layouts can differ.
Software route
Arduino IDE 2 and esp32 by Espressif Systems. Arduino-ESP32 3.3.2 is this site’s API review baseline, not a latest-release claim.
First result
The linked setup guide prints ESP32 upload OK in Serial Monitor with no external circuit. Then follow the external-LED Blink guide. Documentation reviewed; no compilation or hardware test performed for this introduction.

Chip, module and development board

Chip (SoC)
The silicon device containing the processor, on-chip memory and peripherals. It runs firmware rather than a desktop operating system.
Module
A small board containing the chip and supporting parts. ESP32-WROOM-32E adds flash, a crystal and an antenna; module markings identify the particular product.
Development board
A larger board carrying a module, regulator, USB-to-UART bridge, buttons and headers. This is the convenient starting point for breadboard projects.

For example, an ESP32-WROOM module is soldered onto a DevKitC board. The board’s USB connector is not a GPIO input. Check the DevKit pinout and power reference before attaching wires.

A real ESP32 development board

Explore the build photos and recorded results. Open any image to inspect the details.

About this recorded build

These contributed photos show an ESP-32-marked USB-C development board. The exact module revision and board manufacturer are not established by the photographs; do not treat them as an official DevKitC V4 pin map.

Use the printed labels on your own board. The USB connector supplies the board and provides its upload connection; the GPIO signal-voltage limits remain separate.

Front of the supplied ESP-32-marked development board with USB-C connector and two header rows
Image 01

Front view of the supplied board. This is a hardware photograph, not the conceptual chip/module diagram.

View full-size image
Supplied ESP32 development board pin labels with the USB connector on the left
Image 02

Pin-label close-up, rotated for readability. Read GPIO labels rather than counting header positions.

View full-size image
Close-up of the supplied board’s BOOT and EN buttons beside USB-C
Image 03

BOOT and EN labels on this particular board. Button placement and USB bridge designs vary.

View full-size image

Start here: your first working project

Use this existing beginner sequence. Finish each guide’s expected result before moving to the next; its wiring and software assumptions take precedence over generic board labels.

  1. Arduino IDE setup: install the board package, choose board and port, then verify a Serial-only upload. You need the DevKit, a USB data cable and a supported computer.
  2. Blink LED: add an external LED, a 220 Ω series resistor, breadboard and jumper wires. Learn how a digital output switches a small circuit. Do not assume an onboard LED is on GPIO2.
  3. Button input: add a tactile button and the pull resistor specified by that tutorial. Learn how a stable input controls the LED.
  4. DHT11 sensor: add the documented DHT11 and its required pull-up arrangement. Read temperature and humidity. This DHT11 tutorial retains its historical URL; it is not a DHT22 example.
  5. OLED display: add the specified 128×64 SSD1306 I2C module and display text using the documented SDA/SCL wiring.

These links lead to complete tutorials; there is no separate sketch to copy from this introduction. After the five steps, try a BME280 weather clock. An analog sensor or local web dashboard is a later extension, not an unfinished example here.

What the classic ESP32 example supports

The WROOM-32E example uses a dual-core Xtensa LX6 processor, with a rated maximum clock of 240 MHz. It supports 2.4 GHz Wi-Fi and Bluetooth Classic plus Bluetooth LE. These are properties of this classic hardware, not every chip with ESP32 in its name.

The classic chip has 520 KB of on-chip SRAM; firmware and wireless software use part of it, so this is not the available space for your variables. Flash stores the program, and its capacity depends on the module variant. PSRAM is extra memory present on some modules; do not assume a WROOM board includes it or that more flash fixes a RAM allocation problem.

Other families differ. ESP32-S2 has no Bluetooth. ESP32-S3 supports Bluetooth LE rather than Classic and uses LX7 processors. ESP32-C3 uses a RISC-V processor. S2/S3 chips have native USB capabilities; whether a board exposes a suitable connector and how it uploads depends on that board and firmware. The classic WROOM DevKit used here uploads through its USB-to-UART bridge, not native chip USB.

GPIO labels, peripheral counts and memory arrangements also vary. See classic ESP32 versus ESP32-S3 before carrying a pin map or Bluetooth example to another family.

Supply voltage, GPIO logic and analog measurements

  • Board supply: use the documented USB power input for the first build. A regulator supplies the module’s operating rail. A USB or 5V supply label does not make the GPIO pins 5 V tolerant. DevKitC V4 power inputs are alternative methods, not inputs to connect together.
  • Signals: the classic board uses 3.3 V GPIO logic. Do not connect a 5 V output directly to a GPIO. Verify each sensor’s supply requirement and signal levels separately; use suitable level conversion where required.
  • ADC measurements: analog-capable pins convert voltage into a number. The usable measurement range depends on the chip and attenuation setting, and is not a universal 0–3.3 V range. A safe logic-level signal can still exceed the configured ADC measurement range. Raw counts are not automatically calibrated volts.

On classic ESP32, GPIO34–39 are input-only with no internal pull resistors, and not all are exposed on every module. Flash-connected and boot-strapping pins have other restrictions. ADC2 also shares hardware with Wi-Fi; prefer a documented ADC1 input for introductory analog builds.

Use the ADC guide for raw versus calibrated readings, attenuation and input limits rather than guessing a voltage conversion. Follow the actual board pin map before choosing a pin.

Power and deep sleep: board limits matter

Current changes with radio activity, CPU settings, attached loads and board design. Size the supply from the actual board and load documentation, including startup demand. A headline chip-current figure does not describe a complete DevKit. Motors, servos and relay coils need a suitable driver and rated supply; a GPIO is a control signal, not their power source.

Deep sleep powers down most of the classic chip while selected RTC functions can remain active. A timer or supported wake pin can restart the application; ordinary RAM state is not simply continued. The board’s regulator, USB bridge, LEDs and sensors can keep consuming power. Chip microamp specifications are not a promise for a USB DevKit or a battery runtime estimate. Follow the board-qualified deep-sleep guide when ready.

Compare named boards, not product families

Documented board examples; firmware support and expansion hardware can change what a project does.
FeatureDevKitC V4 with WROOM-32EArduino Uno Rev3Raspberry Pi Pico W
GPIO logic3.3 V5 V3.3 V
Onboard wireless2.4 GHz Wi-Fi; Bluetooth Classic and LENo onboard radio2.4 GHz Wi-Fi; Bluetooth Classic and LE with supported firmware
USB pathUSB-to-UART bridge for upload/SerialUSB-to-serial interfaceNative USB; available function depends on firmware
Choose forThe classic ESP32 examples on this siteUno Rev3 lessons or compatible 5 V shieldsRP2040/Pico-specific projects and software

These are microcontroller boards, not general-purpose Linux computers. A Raspberry Pi single-board computer is a different product class. Do not select a board by clock speed alone or assume all Arduino-branded boards have Uno Rev3 specifications.

If the first upload or circuit does not work

No USB port

Try a known data cable and another port. Identify the actual USB bridge before installing its manufacturer’s driver. Holding BOOT does not turn a charge-only cable into a data cable.

Upload fails

Check board family and port first. Only use BOOT/EN recovery when appropriate to the documented classic UART board; native USB boards can need different settings. Use the setup guide’s recovery steps.

Repeated resets

Disconnect external loads with power off and retest the Serial-only sketch. Read reset messages, inspect wiring and verify the rated supply/cable. Do not add an arbitrary large capacitor as a universal repair.

Blank Serial Monitor

Match the sketch’s baud rate (115200 in the linked first test), choose the correct port and reset the board. USB CDC settings apply only to a supported native-USB workflow, not every classic DevKit.

Noisy analog readings

Check common reference, voltage limits, ADC-capable pin and attenuation. On classic ESP32, account for ADC2/Wi-Fi sharing. See the ADC guide before averaging or claiming voltage accuracy.

Next steps

Begin with the Serial-only upload in the Arduino IDE setup guide, then wire the external LED exactly as the Blink tutorial shows. Add the remaining beginner circuits one at a time; do not treat specifications from one ESP32 family as a pinout for another.

FAQ

Technical references