The ESP32, Explained: A Beginner's Guide

A plain-English tour of Espressif's ESP32 family: what the chip is, how the versions differ, what the pins can and cannot do, how the boards are powered and programmed, and the mistakes that catch nearly every beginner. Checked against Espressif's datasheets and documentation as of October 2026.

The whole thing in one box

What it is
A small, cheap computer chip made by Espressif Systems, with Wi-Fi built in and, on most versions, Bluetooth too.1
What you buy
A development board: the chip already mounted on a small board with a USB socket, a voltage regulator, and two push buttons.15
Power
The chip runs at 3.3 volts. A board's USB socket takes the 5 volts that USB supplies and converts it down.215
How you program it
From a computer over USB, using the Arduino IDE, Espressif's own ESP-IDF, MicroPython, or ESPHome.
A safe first buy
A practical suggestion (not an official requirement): an ESP32-S3 development board, because it is current, fast, has a built-in USB port, and every tool in this guide supports it.312
The one rule
Never connect a 5 volt signal to a pin. The pins are 3.3 volt only, and the datasheet's absolute maximum is 3.6 volts.4

1. What an ESP32 is, and why it exists

In short An ESP32 is a microcontroller, a tiny self-contained computer, with a radio built in. That combination is the reason it exists: it puts a small project on your home network without a separate radio module.

A microcontroller is a computer shrunk onto one chip: a processor, some memory, and a set of pins you can connect to buttons, lights, sensors, and motors. Unlike the processor in a laptop, it has no screen, no keyboard, and no operating system in the everyday sense. You write one program, load it onto the chip, and the chip runs that program every time it powers up.

The ESP32 is made by Espressif Systems, a chip company based in Shanghai.1 Its earlier Wi-Fi chips, the ESP8266 and ESP8285, came out before 2016.29 The ESP32's datasheet was first released in August 2016, and the chip added a faster dual-core processor, Bluetooth, and many more pins and built-in features.5

Strictly, an ESP32 is a system on a chip, or SoC: the processor, the memory, and the Wi-Fi and Bluetooth radios all sit on the same piece of silicon. You almost never buy the bare chip. It comes inside a metal-shielded module, which adds the flash memory your program is stored in and an antenna, and that module is what gets soldered onto the board you actually hold.

What is inside an ESP32 board A development board contains a module, which contains the ESP32 chip plus flash memory and an antenna. The board adds a USB socket, a 3.3 volt regulator, and BOOT and EN buttons. Development board (what you buy) Module (the metal can) ESP32 chip (SoC) Processor (CPU) Working memory (RAM) Wi-Fi radio Bluetooth radio Pin controllers Flash memory holds your program Antenna printed on the module, or a connector for an external one USB socket power and programming 3.3 V regulator 5 V from USB down to 3.3 V BOOT and EN buttons for loading new programs
Figure 1. Three layers: the chip, inside a module, soldered to a board. You program the board; the chip runs your program. Drawn for this guide from the component lists in Espressif's DevKit user guides.15
Why "ESP32" names a whole family, not one chip chip, module, board

Espressif kept the name and added suffixes. The original chip is simply the ESP32. Later chips are the ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6, and ESP32-H2, each a different design aimed at a different job. People say "an ESP32" to mean any of them, which is usually fine and occasionally confusing, because they do not all have the same features, and a compiled program for one will not run on another. Section 2 sorts them out.

The names go one level deeper. ESP32-WROOM-32E, for example, is not a chip but a module: an original ESP32 chip plus flash memory inside a metal shield. ESP32-DevKitC is a board that carries such a module.15 Chip, module, board: three different things, and shop listings mix them freely.

↑ Contents

2. The chip families

In short Six chips matter for a beginner. They differ in processor type, wireless features, pin count, and whether they have a built-in USB port. All of them are programmed with the same tools.

Every figure in Table 1 comes from that chip's own datasheet. Where a chip is sold in several versions, the table gives the series as the datasheet describes it, and notes where versions differ.

The six chips, side by side

Table 1. The ESP32 family. All the radios here work in the 2.4 GHz band only. GPIO counts are the programmable pins the datasheet gives for the chip; fewer are usable on a real board (Section 4).
ChipProcessorMax clockWirelessUSBGPIOADC / DACTypical use
ESP32 (original)Xtensa LX6, single or dual core5240 MHz (160 MHz on some versions)5Wi-Fi 4 (802.11b/g/n); Bluetooth Classic and Bluetooth LE, v4.25None on the chip34512-bit ADC, up to 18 channels; two 8-bit DACs5The classic, with the most tutorials. An older design: only some of its versions are still recommended for new products.5
ESP32-S2Xtensa LX7, single core6240 MHz6Wi-Fi 4 only. No Bluetooth.6USB OTG, full speed643612-bit ADC, up to 20 channels; two 8-bit DACs6USB gadgets where Bluetooth is not needed.
ESP32-S3Xtensa LX7, dual core3240 MHz3Wi-Fi 4; Bluetooth 5 LE. No Bluetooth Classic.3USB OTG and USB Serial/JTAG345312-bit ADC, up to 20 channels; no DAC3The general-purpose choice: fast, many pins, native USB, extra instructions for AI and signal processing.3
ESP32-C3RISC-V, single core7160 MHz7Wi-Fi 4; Bluetooth 5 LE7USB Serial/JTAG722 (16 on some versions)712-bit ADC, up to 6 channels; no DAC7Small and inexpensive; enough for most sensors and switches.
ESP32-C6RISC-V: 160 MHz main core plus a 20 MHz low-power core8160 MHz8Wi-Fi 6 (802.11ax); Bluetooth 5.3 LE; 802.15.4 for Thread 1.3 and Zigbee 3.08USB Serial/JTAG830, or 22 on versions with flash inside the chip812-bit ADC, up to 7 channels; no DAC8Newer Wi-Fi, or Thread, Zigbee, and Matter devices.
ESP32-H2RISC-V, single core996 MHz9No Wi-Fi. Bluetooth 5.3 LE; 802.15.4 for Thread 1.4 and Zigbee 3.09USB Serial/JTAG919912-bit ADC, up to 5 channels; no DAC9Low-power Thread, Zigbee, or Matter devices that do not need Wi-Fi.

Reading the table, one line per term: GPIO is a pin your program can read or switch. An ADC measures a voltage; a DAC produces one. USB OTG lets the chip act as a USB device such as a keyboard, or as a small USB host. USB Serial/JTAG is a simpler built-in USB port that shows up on your computer as a serial port and a debugger, so no separate USB chip is needed. Bluetooth LE is the low-energy kind of Bluetooth (Section 3).

What the processor names mean Xtensa, RISC-V, cores, MHz

Xtensa and RISC-V are two different processor designs, meaning two different machine languages. You will not notice the difference if you write Arduino or MicroPython code, because the tools translate for you. It matters only for low-level code: something written in assembly language for an Xtensa chip will not run on a RISC-V chip.

The original ESP32, the S2, and the S3 use Xtensa; the C3, C6, and H2 use RISC-V, an openly published design.57 "Single core" means one processor; "dual core" means two that can work at the same time, which helps when one task is busy with Wi-Fi while another reads sensors.

The clock speed, in megahertz (MHz), is how many millions of steps per second the processor takes. 240 MHz is quick for a microcontroller. 96 MHz, the H2's maximum, is still far more than a thermometer or a light switch needs.39

Newer chips that exist but are not in the table C5, P4, C2, C61

Espressif keeps releasing chips. These were checked only against Espressif's product pages, not datasheets, so they stay out of Table 1:

  • ESP32-C5: a single-core RISC-V at 240 MHz with 43 GPIO, which Espressif describes as a 2.4 GHz and 5 GHz dual-band Wi-Fi 6 microcontroller. It is the first in the family that can join a 5 GHz network.10
  • ESP32-P4: a dual-core RISC-V at 400 MHz for demanding jobs such as displays and cameras. It has no radio of its own; Espressif says to pair it with a C or S series chip as a wireless companion.11
  • ESP32-C2 and ESP32-C61: also supported by Arduino-ESP32, but its documentation says they need extra build steps rather than working out of the box.12

Which one should I pick?

Buy a board, not a bare chip, and choose it by the chip it carries. These are practical suggestions (not official requirements), each with its reason:

A practical suggestion (not an official requirement): the cheapest listing in an online marketplace is usually a no-name copy of an original-ESP32 board. It will generally work, but expect to install a USB driver (Section 6) and to check which pins it actually exposes (Section 4). A board from Espressif or another established maker with published documentation avoids most first-day problems.

↑ Contents

3. Wi-Fi and Bluetooth

In short Every chip here except the H2 speaks ordinary 2.4 GHz Wi-Fi, a band almost every home router offers. Bluetooth varies: only the original ESP32 speaks the older "Classic" kind.

Wi-Fi

Wi-Fi is the radio standard a laptop uses to join a network. The original ESP32, the S2, the S3, and the C3 support 802.11b, g, and n, the generation branded Wi-Fi 4, in the 2.4 GHz band only.5637 That band is crowded, but it reaches furthest through walls.

The ESP32-C6 moves up to Wi-Fi 6, which is 802.11ax. Two limits are worth knowing. It is still 2.4 GHz only, so it cannot join a 5 GHz network. And its datasheet says the 802.11ax mode uses 20 MHz channels only, and only when the chip joins a network rather than creating one. It also supports the older 802.11b/g/n.8 The ESP32-C5 is the family member that adds 5 GHz.10

How much power Wi-Fi uses why a weak USB port causes reboots

Transmitting takes a short, sharp gulp of current. The datasheets give the peak at the highest transmit power: about 240 mA for the original ESP32 at +19.5 dBm, and 335 mA and 354 mA for the C3 and C6 at +21 dBm.578 Receiving is cheaper, roughly 84 to 100 mA.57 The average over time is far lower, because the radio transmits in bursts, but the power supply has to survive each burst. That is the root of the "it reboots whenever it connects to Wi-Fi" problem in Section 9. (dBm is a unit of radio power; +20 dBm is 100 milliwatts.)

Bluetooth

Bluetooth comes in two incompatible kinds. Bluetooth Classic is the older one, used for audio and for the "virtual serial cable" links that older gadgets use. Bluetooth Low Energy, or BLE, is built for small bursts of data: sensors, switches, and a phone talking briefly to a gadget. A chip that speaks one does not automatically speak the other.

Thread, Zigbee, and Matter

The C6 and H2 add a third radio standard, IEEE 802.15.4, the low-power radio underneath Thread and Zigbee.89 Both are mesh networks, where devices can pass messages along for each other. The practical reason to care is Matter, the cross-brand smart-home standard, which runs over Wi-Fi and Thread and uses Bluetooth LE to set devices up.32 A C6 can do Matter over either network. An H2 can do Thread, but having no Wi-Fi, it cannot join a Wi-Fi network at all.9

↑ Contents

4. Pins: GPIO, ADC, DAC, and PWM

In short The numbered pins along the board's edges are GPIO. Some can also measure a voltage, and most can produce a dimming signal. A few are quietly reserved for the chip's own memory, and using them stops the chip working.

GPIO stands for general-purpose input/output. Each one is a pin the program can either read, to see whether a button is pressed, or set, to turn a light on. They are 3.3 volt pins: "high" is about 3.3 V and "low" is 0 V. The original ESP32 datasheet's absolute maximum is 3.6 V, so a 5 V signal from an older sensor can damage the chip.4

A practical grouping of pins on an original-ESP32 DevKitC Three groups: pins that are generally free, pins shared with booting, serial or input-only limits, and pins connected to the flash memory that must be left alone. Generally free GPIO 4, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33 16 and 17 are reserved on WROVER-module boards. 13 and 14 double as JTAG debug pins. Usable, with a catch 0, 2, 5, 12, 15: strapping 1, 3: USB serial (TX, RX) 34, 35, 36, 39: input only, no internal pull resistors Fine once you know what else depends on them. Leave alone GPIO 6, 7, 8, 9, 10, 11 Wired to the flash memory inside the module. Labelled CLK, CMD, D0 to D3 on the DevKitC. Using one stops the chip reading its program.
Figure 2. A practical grouping (not an official Espressif list) of the pins on an ESP32-DevKitC V4, built from the restrictions in the DevKitC guide and the ESP-IDF GPIO page.1415 Other chips in the family reserve different pin numbers, so check your board's own pinout.

Input-only pins

On the original ESP32, GPIO34, 35, 36, and 39 can only be inputs. They cannot drive an LED, and unlike the other pins they have no internal pull-up or pull-down resistor (a resistor that holds an unconnected pin at a steady high or low). A button wired to one needs a physical resistor, or it will read random noise when not pressed.14 ESP-IDF also warns against using interrupts on GPIO36 and GPIO39 while the ADC or Wi-Fi and Bluetooth are running with sleep enabled.14

Pins that belong to the flash memory

Your program lives in a flash memory chip inside the module, and the processor talks to it over a handful of pins. On original-ESP32 modules those are GPIO6 to GPIO11. Many boards bring them out to the headers anyway; Espressif's DevKitC guide says to avoid them, because using them disrupts access to the flash. On boards with a WROVER module, GPIO16 and GPIO17 are reserved too, for the extra PSRAM memory.15

The later chips use different pins for flash: GPIO26 to 32 on the S2 and S3, GPIO12 to 17 on the C3, GPIO24 to 30 on the C6, and GPIO15 to 21 on the H2.14 The safe habit is the same everywhere: if the board's pinout marks a pin as flash or PSRAM, leave it out of your circuit.

Strapping pins

A few pins are read once, at the instant the chip starts, to decide how to boot. These are the strapping pins. On the original ESP32 they are GPIO0, 2, 5, 12, and 15.14 The key one is GPIO0: held low while the chip resets, it starts the built-in serial bootloader, ready to receive a new program; left high, the chip runs the program already in flash. That is what the board's BOOT button does.16

The others matter when something in your circuit holds them high or low at power-on. The classic trap is GPIO12. Driven high, it tells the chip to run its flash memory at 1.8 V instead of 3.3 V, and a 3.3 V flash chip then fails to start.16

The strapping pins on each chip from the ESP-IDF GPIO pages
  • ESP32: GPIO0, 2, 5, 12, 15.14
  • ESP32-S2: GPIO0, 45, 46. GPIO46 is input-only.14
  • ESP32-S3: GPIO0, 3, 45, 46.14
  • ESP32-C3: GPIO2, 8, 9.14
  • ESP32-C6: GPIO4, 5, 8, 9, 15.14
  • ESP32-H2: GPIO2, 3, 8, 9, 25.14

The boot-mode choice itself is made by GPIO0 and GPIO46 on the S2 and S3, and by GPIO8 and GPIO9 on the C6 and H2, with download mode entered by holding GPIO0 or GPIO9 low respectively. On the C3, GPIO2, GPIO8, and GPIO9 are all involved, and again GPIO9 low selects download mode.63789 The ESP32-H2-DevKitM-1 guide, for example, labels its GPIO9 header pin as BOOT.26

ADC: measuring a voltage

An ADC, an analog-to-digital converter, reads a voltage and turns it into a number. Every chip in this family has a 12-bit one, so the answer is a number from 0 to 4095.53 How many pins can be measured varies: up to 18 on the original ESP32, 20 on the S2 and S3, but only 6 on the C3, 7 on the C6, and 5 on the H2.563789

Two things catch beginners. The first is range. The converter does not read the whole span from 0 to 3.3 V equally well. The original ESP32's datasheet gives its calibrated useful ranges as about 100 to 950 mV at the most sensitive setting and 150 to 2450 mV at the least sensitive one. It warns that above roughly 2450 mV, accuracy is worse than its stated figures.5 So a voltage near 3.3 V will read low or flat; divide it down with two resistors first.

The second is accuracy. The raw numbers do not follow a perfectly straight line: the same datasheet allows a differential nonlinearity of up to ±7 counts and an integral nonlinearity of up to ±12, and says results differ by about ±6% from chip to chip before calibration.5 ESP-IDF's calibration driver uses values stored in the chip at the factory to correct much of this, and averaging several readings smooths out the rest.175

Nonlinearity in one paragraph DNL, INL, and attenuation

Differential nonlinearity (DNL) is how unevenly spaced neighbouring steps are: some steps are a little wider than others. Integral nonlinearity (INL) is how far the whole curve bends away from a straight line. Both are measured in counts, called LSB, of the 0 to 4095 scale. Attenuation is the setting that lets the ADC accept a larger voltage by scaling it down internally; ESP-IDF calls the four settings atten 0 to 3, and the higher the setting, the wider the range but the larger the error. The datasheet's calibrated total error grows from ±23 mV at atten 0 to ±60 mV at atten 3.5 The S3 is better on paper, with DNL of ±4 and INL of ±8.3

ADC2 and Wi-Fi. On the original ESP32, the second converter, ADC2, shares hardware with Wi-Fi. ESP-IDF's GPIO page says ADC2 pins cannot be used while Wi-Fi is in use, and suggests moving the signal to an ADC1 pin.14 On a DevKitC, the ADC1 pins are GPIO32, 33, 34, 35, 36 (marked VP), and 39 (marked VN).15 If an analog reading works until your board joins the network and then fails, this is why.

DAC: producing a voltage

A DAC, a digital-to-analog converter, does the reverse: it turns a number into a steady voltage. Only two chips in this family have one. The original ESP32 has two 8-bit channels, on GPIO25 and GPIO26, and the ESP32-S2 also has two.5618 Eight bits means 256 levels, from 0 up to roughly the chip's supply voltage.18 The S3, C3, C6, and H2 have no DAC; for those, use a small external DAC chip, or smooth a PWM signal with a resistor and capacitor.

PWM: dimming and motor speed

PWM, pulse-width modulation, switches a pin on and off very fast. The bigger the share of each cycle the pin spends on, called the duty cycle, the brighter an LED or the faster a motor. The part of the chip that does this is called LEDC, LED control, though it works for any PWM job. The original ESP32 has 16 channels, in a high-speed group and a low-speed group of 8; the S2 and S3 have 8; the C3, C6, and H2 have 6.56378919 Each channel drives one pin, so even the smallest of these chips can dim several LEDs independently, and the hardware can fade between brightness levels without the processor's help.19

↑ Contents

5. Power and deep sleep

In short Feed a board 5 V through its USB socket, or feed its 3.3 V pin from a supply that can deliver enough current. Never put 5 V on the chip itself. To run for months on a battery, use deep sleep, which cuts the current from tens of milliamps to a few microamps.

The two voltages

The chip's recommended supply is nominally 3.3 V. The datasheets give a recommended range of 3.0 to 3.6 V for the S3, C3, C6, and H2, and 2.8 to 3.6 V for most of the S2's supply pins; the original ESP32's minimum is 3.0 V on versions with flash or PSRAM inside the chip package and 2.3 V on versions without.263789 The absolute maximum on the original ESP32's supply pins is 3.6 V.4 The datasheets also ask for a supply able to deliver at least 0.5 A (0.35 A for the H2).239

A development board hides most of this. Its USB socket takes USB's 5 V, and an on-board regulator reduces it to 3.3 V. Espressif's DevKitC can instead be powered through its 5V pin or its 3V3 pin, but the guide warns that you must use exactly one of those three options, because powering it two ways at once can damage the board or the power source.15

The supply must also be strong enough. Espressif's esptool guide says the 3.3 V output of FTDI serial adapters and Arduino boards cannot power an ESP chip reliably, and that a supply can be good enough for flashing yet still fall short once the program is running.20

What the chip draws

The figures depend on what the chip is doing, and each datasheet measures under its own conditions, so treat these as a sense of scale rather than a promise:

Table 2. Typical current for the chip alone, from each datasheet. 1 mA = 1000 µA.
SituationOriginal ESP32ESP32-S3ESP32-C3ESP32-C6ESP32-H2
Wi-Fi transmitting, peak at max power240 mA5340 mA3335 mA7354 mA8No Wi-Fi; BLE peak 140 mA at +20 dBm9
Light sleep0.8 mA5240 µA3130 µA7180 µA885 µA9
Deep sleep, with timer and sleep memory on10 µA57 µA35 µA77 µA87 µA9
Powered off by the enable pin1 µA51 µA31 µA71 µA81 µA9

The original ESP32's datasheet also gives 20 to 68 mA with the processor running and the radio idle, depending on clock speed and core count.5 The newer datasheets list active-mode figures per configuration rather than one range, so no single number is quoted for them here. The S2 measures 310 mA peak transmit and 20 µA in its lowest timer-only deep sleep.6 These are chip figures. A whole development board draws more, because its regulator, power LED, and USB chip all use current too; measure your own board if battery life matters.

Sleep, and how it wakes up

An ESP32 that stays fully awake on Wi-Fi will empty a small battery in hours. Deep sleep is how projects last months. In deep sleep the processors, most of the memory, and the digital peripherals are switched off; only the real-time clock (RTC) section and a little memory stay alive, watching for a reason to wake up.21 Waking from deep sleep behaves like a fresh boot: the program starts again from the top, and ordinary variables are gone. Anything you need to keep must be stored in the small RTC memory, which ESP-IDF lets you mark with RTC_DATA_ATTR, or in flash.21

Light sleep is the gentler version. The processor and peripherals are paused rather than switched off, so the program carries on from where it stopped, with everything in memory intact. It saves less power.21

A deep-sleep cycle The chip boots, works briefly, for example reading a sensor and sending the value over Wi-Fi, then enters deep sleep. A timer or a pin wakes it, which starts the program from the beginning again. Boot program starts at the top Awake: do the work read sensor, send by Wi-Fi Deep sleep roughly 5 to 10 µA (chip) Wakes by timer, or by a signal on a wake-capable pin
Figure 3. The pattern behind nearly every battery project: wake, work for a moment, sleep for many minutes. Current figures are the chip-only typicals from Table 2.521

ESP-IDF documents these wake-up sources for the original ESP32:21

One limit surprises people: Wi-Fi and Bluetooth connections do not survive deep or light sleep. The radios are powered down and the connection is lost. To stay connected while saving power, ESP-IDF offers "modem sleep" combined with automatic light sleep, which wakes the radio whenever the network needs it.21

↑ Contents

6. The development boards

In short Espressif's own boards are called DevKits: DevKitC boards carry a full-size module, DevKitM boards a smaller one. Copies from other makers follow the same idea but often use a cheaper USB chip, and that chip is the one you may need a driver for.

Espressif's own boards

Each DevKit carries a module, brings most of its pins out to two rows of header pins, adds a regulator and two buttons, and can sit in a breadboard (a plug-in board for building circuits without soldering).15

Table 3. Espressif's entry-level boards for each chip, from their user guides.
BoardModule it carriesUSBNotable parts
ESP32-DevKitC V4ESP32-WROOM-32E, WROVER-E and other modules, some now end of life15One Micro-USB socket, through a USB-to-serial bridge15BOOT and EN buttons; 5 V power LED; 38 header pins15
ESP32-DevKitM-1ESP32-MINI-1 or MINI-1U, with 4 MB of flash in the chip package22One Micro-USB socket, through a bridge22Boards made before 2 December 2021 carry a single-core module22
ESP32-S3-DevKitC-1ESP32-S3-WROOM-1, WROOM-1U, or WROOM-223Two: Micro-USB through a bridge, plus a port wired to the chip's own USB23Addressable RGB LED on GPIO38 (v1.1 board)23
ESP32-C3-DevKitM-1ESP32-C3-MINI-1 or MINI-1U24One Micro-USB socket, through a bridge24Addressable RGB LED on GPIO824
ESP32-C6-DevKitC-1ESP32-C6-WROOM-1 or 1U, with 8 MB of flash25Two USB-C sockets: one through a bridge, one to the chip25Addressable RGB LED on GPIO8; jumper for measuring current25
ESP32-H2-DevKitM-1ESP32-H2-MINI-1 or MINI-1U26Two USB-C sockets: one through a bridge, one to the chip26Addressable RGB LED on GPIO826

On boards with two USB sockets, one goes through the USB-to-serial bridge and appears on your computer under the bridge maker's name, such as "Silicon Labs CP210x". The other connects straight to the chip and appears as an Espressif device. Both can power the board and load programs; Espressif labels them on its boards.2328 Using the "other" socket does no harm, but the port name will differ from the one a tutorial tells you to pick.

The original ESP32 has no USB of its own, so its boards always rely on a bridge chip.28

Copies, and the USB chip that matters

The boards most beginners actually buy are third-party copies of the original-ESP32 DevKit, sold under names like "ESP32 DevKit V1" or "ESP-WROOM-32" and commonly with 30 or 38 pins. They are not Espressif products, so there is no official specification for them; what follows describes what to check rather than a guaranteed layout.

The first thing to check is the USB-to-serial bridge, the small chip that translates USB into the serial signals the ESP32 understands. ESP-IDF's setup guide lists the CP210x (from Silicon Labs) and FTDI bridges used on most Espressif boards and links their drivers, adding that drivers are normally bundled with the operating system.27 Many copies use a CH340-series bridge from WCH instead, whose driver comes from WCH.33 If you plug a board in and no new serial port appears, the board is usually fine: check the cable first, then the driver.28

The second is the pin layout. Two copies with the same pin count can order their pins differently, and some leave out pins entirely. Go by the labels printed on your own board, not a pinout diagram made for a different one.

↑ Contents

7. Programming one

In short You write a program on a computer, and a tool copies it into the board's flash memory over USB. The chip has to be in "download mode" to accept it. Espressif boards switch into that mode automatically; the buttons are the manual fallback.

Four environments cover almost everyone. All of them end with the same step, called flashing: your compiled program travels over USB into the flash memory inside the module.

Table 4. The main ways to program an ESP32, with release versions current in October 2026.
EnvironmentYou writeBest forNotes
Arduino IDE with the Arduino-ESP32 coreC++, in the Arduino "sketch" styleBeginners, and the largest supply of examplesSupported by Espressif and the community. Stable support for the original ESP32, S2, S3, C3, C5, C6, H2, and P4. Release 3.3.12, September 2026.12
ESP-IDFCFull control, careful power saving, finished productsEspressif's official development framework, on Windows, Linux, and macOS. Release v6.1, late August 2026.29
MicroPythonPythonInteractive experiments and teachingReady-made firmware for the original ESP32, S2, S3, C3, C6, and H2. Release 1.29.0, August 2026.13
ESPHomeA short configuration file, or choices in a visual editorHome Assistant sensors, switches, and lightsYou describe what is connected to which pin, and ESPHome builds the program. Its devices work with Home Assistant out of the box.30
How the Arduino IDE learns about ESP32 boards the Boards Manager URL

The Arduino IDE does not include ESP32 support out of the box. You add it by pasting Espressif's package address, https://espressif.github.io/arduino-esp32/package_esp32_index.json, into the "Additional Board Manager URLs" field in Preferences, then installing the esp32 platform from the Boards Manager. After that, the ESP32 boards appear in the board menu.12

What flashing actually involves

The chip cannot run a program straight from USB. At every reset it checks its strapping pins and, normally, starts running whatever is in its flash memory.16 To accept a new program, it has to be reset while GPIO0 (GPIO9 on the C3, C6, and H2) is held low. That is download mode: a small receiver built permanently into the chip's ROM, read-only memory, waits for the new program.167

How a program gets onto the board The computer runs the upload tool. Over a data-capable USB cable it resets the board into download mode, writes the program into flash, and resets the board again so it runs the new program. Your computer Arduino IDE, ESP-IDF, or MicroPython tools USB cable must carry data, not charge only The board 1. EN pulled low: chip resets 2. BOOT pin low: download mode 3. Program written to flash 4. Reset again: program runs
Figure 4. The upload path. On Espressif's boards, steps 1, 2, and 4 are done automatically through the USB chip's control lines; the BOOT and EN buttons are the manual fallback.16

You rarely do this by hand. On a board with a USB-to-serial bridge, two of the bridge's control lines are wired to the chip's reset pin, EN, and to GPIO0, so the upload tool, called esptool, can reset the board into download mode and back again by itself. Espressif's documentation says all of its boards include this circuit.16 When it fails, do it manually: hold the BOOT button, press and release EN (sometimes labelled RST or RESET), release BOOT, and start the upload.1516

The messages you see at startup what the ROM prints at 115200 baud

Open a serial monitor at 115200 baud (the serial speed in bits per second) and reset an original-ESP32 board. Among the first lines the ROM prints is one beginning rst: and showing a boot: mode. SPI_FAST_FLASH_BOOT is the normal mode: the chip is running your program. A mode containing DOWNLOAD means the chip is waiting for an upload, which usually means the BOOT button is held or GPIO0 is wired to ground.16

If you see Brownout detector was triggered, the supply voltage dipped too low and the chip reset itself rather than misbehave. ESP-IDF enables this detector by default.31 The fix is better power, not different code.

↑ Contents

8. First projects

In short A suggested order (not an official curriculum). Each project adds one new idea and proves the previous step worked.

  1. Blink the onboard LED. Proves the cable, driver, tools, and upload all work. On the S3, C3, C6, and H2 DevKits the LED is an addressable RGB LED on a single data pin (GPIO38 on the S3-DevKitC-1 v1.1, GPIO8 on the others), so a plain "switch a pin on and off" example will not light it. Use the RGB LED example instead.23242526
  2. Read a button. One pin as an input. Teaches pull-up resistors, and teaches you not to use a strapping pin for it.
  3. Dim an LED with PWM. Your first use of LEDC, and the pattern for servos and buzzers later.
  4. Read a sensor. A potentiometer on an ADC1 pin, or a digital temperature sensor. On the original ESP32, this is where choosing an ADC2 pin causes trouble once Wi-Fi is on.
  5. Join your Wi-Fi. Print the board's network address to the serial monitor. This is where a weak power supply shows itself.
  6. Serve a small web page, or, in a Home Assistant home, let ESPHome publish your sensor for you.30
  7. Deep sleep. Wake every few minutes, take one reading, send it, and sleep again.

↑ Contents

9. Beginner gotchas

In short Nearly every "my board is dead" moment turns out to be the cable, the driver, the power supply, a strapping pin, or a pin that belongs to the flash memory.

5 V signals on pins. The pins are 3.3 V, and the original ESP32's absolute maximum is 3.6 V.4 A sensor, display, or Arduino output running at 5 V needs a level shifter (a small converter board) or at least a resistor divider on the way in. The board's 5V pin is a power input, not a signal source, and powering a DevKitC from more than one source at once can damage it.15

↑ Contents

10. Glossary

ADC
Analog-to-digital converter. Measures a voltage and reports it as a number; 12 bits means a number from 0 to 4095.
Bluetooth (Classic and LE)
A short-range radio. Classic carries continuous streams such as audio; Low Energy (LE or BLE) carries small, occasional messages. They are not compatible with each other.
DAC
Digital-to-analog converter. Turns a number into a steady output voltage. Only the original ESP32 and the ESP32-S2 have one.
Deep sleep
A power-saving mode in which the processor and radios are off and only a clock and a little memory stay on. Waking restarts the program.
Espressif Systems
The Shanghai-based company that designs the ESP8266 and the ESP32 family.
Flash memory
Memory that keeps your program when the power is off. It sits inside the module, on dedicated pins.
Flashing
Writing a compiled program into the flash memory, usually over USB.
GPIO
General-purpose input/output: a numbered pin your program can read or switch, such as GPIO21.
LEDC
LED control, Espressif's name for the PWM hardware in its chips.
Matter
A cross-brand smart-home standard that runs over Wi-Fi and Thread and uses Bluetooth LE for setup.
Microcontroller
A small computer on one chip, with a processor, memory, and pins, made to run a single program.
Module
The metal-shielded package containing the chip, its flash memory, and an antenna. WROOM, WROVER, and MINI are Espressif module families.
PWM
Pulse-width modulation. Switching a pin on and off quickly to vary average power, used for dimming LEDs and controlling motor speed.
RISC-V
An openly published processor design, used in the ESP32-C3, C6, H2, and newer chips. Pronounced "risk five".
SoC
System on a chip: a single chip combining a processor, memory, and other functions, here including the radios.
Strapping pin
A pin whose level is read once at startup to choose boot options, such as running the stored program or waiting for a new one.
Thread
A low-power mesh network for smart-home devices, built on the IEEE 802.15.4 radio. Supported by the ESP32-C6 and ESP32-H2.
USB OTG
"On-the-go" USB: the chip can act as a USB device, such as a keyboard or storage, or as a simple USB host. On the S2 and S3.
USB Serial/JTAG
A built-in USB port that appears on a computer as a serial port plus a JTAG debugger, so no separate USB chip is needed. On the S3, C3, C6, and H2.
Wi-Fi 4 and Wi-Fi 6
Generations of Wi-Fi: Wi-Fi 4 is 802.11n, Wi-Fi 6 is 802.11ax. Most of the family uses Wi-Fi 4; the ESP32-C6 uses Wi-Fi 6. All work at 2.4 GHz.
Xtensa
The processor design used in the original ESP32 (LX6) and the S2 and S3 (LX7).
Zigbee
A long-established low-power mesh network, also built on IEEE 802.15.4. Supported by the ESP32-C6 and ESP32-H2.

↑ Contents

Sources

All accessed in October 2026. Datasheet details refer to the revision named.

  1. [1] Espressif Systems, ESP32 product page and company pages (Shanghai address).
  2. [2] Espressif Systems, ESP32 Series Datasheet v5.3, Table 5-2, Recommended Power Supply Characteristics: 3.3 V typical, 3.6 V maximum, minimum 3.0 V or 2.3 V by version, supply current 0.5 A or more.
  3. [3] Espressif Systems, ESP32-S3 Series Datasheet v2.2: dual-core LX7 up to 240 MHz; Wi-Fi 802.11b/g/n; Bluetooth 5 (LE); 45 GPIOs; USB OTG and USB Serial/JTAG; two 12-bit ADCs, up to 20 channels; 8 LED PWM channels; Table 5-2 (voltage), 5-5 (ADC), 5-7 and 5-10 (current).
  4. [4] ESP32 Series Datasheet v5.3, Table 5-1, Absolute Maximum Ratings (−0.3 V to 3.6 V), and Table 5-3, DC Characteristics (input high level up to VDD + 0.3 V).
  5. [5] ESP32 Series Datasheet v5.3: first released August 2016; 802.11b/g/n; Bluetooth v4.2 BR/EDR and Bluetooth LE; single or dual-core LX6 up to 240 MHz; 34 GPIOs; 18 ADC channels; two 8-bit DACs; up to 16 LED PWM channels; Table 4-2 (power modes), 4-3 and 4-4 (ADC), 5-4 (RF current); series comparison for version status.
  6. [6] Espressif Systems, ESP32-S2 Series Datasheet v1.9: single LX7 up to 240 MHz; 802.11b/g/n, no Bluetooth; 43 GPIOs; full-speed USB OTG; up to 20 ADC channels; two 8-bit DACs; 8 LED PWM channels; boot control on GPIO0 and GPIO46; Tables 5-2, 5-7, 5-9.
  7. [7] Espressif Systems, ESP32-C3 Series Datasheet v2.4: single RISC-V up to 160 MHz; 802.11b/g/n and Bluetooth 5 (LE); 22 GPIOs (16 on C3FH4X and C3FH4AZ); USB Serial/JTAG; up to 6 ADC channels; 6 LED PWM channels; Table 3-3 (boot mode), 5-2, 5-7, 5-9.
  8. [8] Espressif Systems, ESP32-C6 Series Datasheet v1.5: 160 MHz high-performance and 20 MHz low-power RISC-V cores; 2.4 GHz Wi-Fi 6 (802.11ax, 20 MHz-only in station mode) plus 802.11b/g/n; Bluetooth 5.3 LE; 802.15.4 with Thread 1.3 and Zigbee 3.0; 30 or 22 GPIOs; up to 7 ADC channels; 6 LED PWM channels; Table 3-3, 5-2, 5-7, 5-11.
  9. [9] Espressif Systems, ESP32-H2 Series Datasheet v1.3: RISC-V up to 96 MHz; Bluetooth LE (5.3 certified) and Bluetooth Mesh; 802.15.4 with Thread 1.4 and Zigbee 3.0; no Wi-Fi; 19 GPIOs; up to 5 ADC channels; 6 LED PWM channels; Table 3-3, 5-2, 5-6, 5-9.
  10. [10] Espressif Systems, ESP32-C5 product page ("2.4 and 5 GHz Dual-band Wi-Fi 6 MCU") and SoC product listing (single-core RISC-V, 240 MHz, 43 GPIO).
  11. [11] Espressif Systems, ESP32-P4 product page: high-performance SoC; a C or S series chip serves as wireless companion when needed.
  12. [12] Espressif Systems, Arduino-ESP32: Getting Started (supported SoCs) and Installing (Boards Manager URL); releases (3.3.12, 18 September 2026).
  13. [13] MicroPython, General information about the ESP32 port; firmware pages for ESP32, S2, S3, C3, C6, and H2 (v1.29.0, 24 August 2026).
  14. [14] Espressif Systems, ESP-IDF Programming Guide v6.1, GPIO & RTC GPIO: ESP32, S2, S3, C3, C6, H2: strapping, flash, input-only, and ADC2 notes.
  15. [15] Espressif Systems, ESP32-DevKitC V4 user guide: modules, buttons, power options, header pins, flash-pin and GPIO16/17 notes.
  16. [16] Espressif Systems, esptool: Boot Mode Selection: GPIO0 and GPIO2, GPIO12 flash voltage, automatic and manual bootloader entry, boot messages.
  17. [17] ESP-IDF Programming Guide v6.1, ADC Calibration Driver and ADC Oneshot Mode Driver (hardware limitations).
  18. [18] ESP-IDF Programming Guide v6.1, Digital To Analog Converter (DAC): GPIO25 and GPIO26, values 0 to 255.
  19. [19] ESP-IDF Programming Guide v6.1, LED Control (LEDC): high- and low-speed channel groups, hardware fading.
  20. [20] Espressif Systems, esptool: Troubleshooting: insufficient power, capacitance, and power supply rating.
  21. [21] ESP-IDF Programming Guide v6.1, Sleep Modes: light and deep sleep, wake-up sources, RTC memory, Wi-Fi and Bluetooth in sleep.
  22. [22] Espressif Systems, ESP32-DevKitM-1 user guide.
  23. [23] Espressif Systems, ESP32-S3-DevKitC-1 v1.1 user guide.
  24. [24] Espressif Systems, ESP32-C3-DevKitM-1 user guide.
  25. [25] Espressif Systems, ESP32-C6-DevKitC-1 user guide.
  26. [26] Espressif Systems, ESP32-H2-DevKitM-1 user guide.
  27. [27] ESP-IDF Programming Guide v6.1, Establish Serial Connection with ESP32: CP210x and FTDI drivers, port names, the dialout group, closing the terminal before flashing.
  28. [28] Arduino-ESP32, Troubleshooting: charge-only cables, USB ports and power, drivers, the two USB connectors.
  29. [29] Espressif Systems, ESP-IDF repository README (ESP8266 and ESP8285 released before 2016) and v6.1 release (published 26 August 2026, US Central time).
  30. [30] ESPHome, home page and ESP32 platform (supported variants).
  31. [31] ESP-IDF Programming Guide v6.1, Fatal Errors: Brownout.
  32. [32] Connectivity Standards Alliance, Matter: runs on Wi-Fi and Thread, Bluetooth LE for commissioning.
  33. [33] WCH (Nanjing Qinheng Microelectronics), CH340 product page and Windows driver download.