Interactive pinout

Select your variant, then click any GPIO for its full profile. This is a logical reference — physical pin position varies by board/module, so match by GPIO number, not location.

Pinout diagram — credit: . Shown for reference; refer to it alongside the interactive explorer below to confirm physical pin positions.
General purpose Strapping / boot-sensitive Caution (shared use) Reserved (unusable) Input only

Click a GPIO on the left to see its full profile.

Quick scenarios

Highlight which pins fit a common need on the currently selected board.

Pin composer

Pick pins from the current board, name each one, set it as input or output, and get a minimal sketch — just the variable declarations and pinMode() calls. Nothing else.

Only pins available on the board selected above are listed.

No pins added yet — pick one above to get started.

Arduino code
// Add pins above to generate code.

Pin type glossary

What each pin type actually means, with a quick visual for how it's wired.

GPIO

General-Purpose Input/Output — a single pin that can be configured in software as a digital input or output. It's the base building block every other pin type below is layered on top of.

I2C

A 2-wire bus (SDA for data, SCL for clock) that lets one ESP32 talk to many devices on the same two pins, each with its own address — common for OLEDs and sensor breakouts.

SPI & VSPI

SPI is a fast 4-wire bus (MOSI, MISO, CLK, CS) for one device at a time per CS line — used for SD cards, TFT displays, radios. The classic ESP32 has two SPI controllers, HSPI and VSPI; VSPI is the one Arduino's default SPI object uses unless you remap it.

Capacitive touch

A handful of pins have a built-in touch sensor that measures capacitance change from a nearby finger — no external component needed, so you can build a hidden touch button under a panel or enclosure.

ADC / DAC

ADC pins read a varying analog voltage (potentiometers, sensors) as a digital number. DAC pins do the reverse, outputting a real analog voltage. ADC2 channels share hardware with Wi-Fi and become unreliable once Wi-Fi is active — use ADC1 for anything measured while connected.

Strapping pins

A small set of pins the ESP32 samples for a fraction of a second at boot to decide things like flash voltage and boot mode. Wiring an external component that holds one of these HIGH or LOW at power-on can stop the board from booting or flashing at all.

About this tool

Why ESP32 pin choice trips people up

The ESP32 family now spans multiple chip designs — the original dual-core Xtensa ESP32, the newer Xtensa S2/S3 line, and the RISC-V C-series and H-series — and each one has a different set of strapping pins, reserved flash/PSRAM pins, and ADC/touch layouts. A pin that's perfectly safe on one variant can be a strapping pin, a flash pin, or simply nonexistent on another, which is exactly how boards end up silently booting into the wrong mode or refusing to flash.

What this tool does

Pick your variant and click any GPIO to get a straight answer on the questions that actually matter before you wire something up: is it safe to drive as an output, can it do PWM, which ADC channel (if any) is it on and does that channel conflict with Wi-Fi, is it a default I2C pin, can it do capacitive touch, and does it have any boot-time restrictions you need to design around.

Why it's useful

Most references cover one board at a time, so cross-referencing several variants means digging through multiple datasheets. This tool puts the four most-used ESP32 variants side by side with one consistent set of questions, sourced from Espressif's own documentation, so you can check a pin in seconds instead of re-reading a datasheet section.

Who should use it

Anyone wiring up an ESP32 board — from a first breadboard prototype to a custom PCB — who wants to avoid the classic mistakes: driving an output-only assumption onto an input-only pin, wiring a sensor to a strapping pin that blocks flashing, or reading an ADC2 pin and getting garbage the moment Wi-Fi turns on.

A note on accuracy

Data reflects the general-purpose chip and typical devkit modules, drawn from Espressif's official ESP-IDF documentation and chip datasheets. Some pin reservations (especially flash/PSRAM ranges) vary between specific module part numbers — always cross-check against your exact module's datasheet before finalizing a PCB design.

PS — image credits: ESP-WROOM-32 38-pin diagram via uPesy; ESP32 30-pin diagram via the board's original manufacturer listing; ESP32-CAM diagram via DroneBot Workshop; ESP32-S3 (YD-ESP32-S3 DevKitC-1 clone) diagram via Renzo Mischianti (mischianti.org); Seeed XIAO ESP32-S3 and XIAO ESP32-C3 diagrams via Seeed Studio. All diagrams are hotlinked from their original sources and remain their creators' work — used here for reference only.