ESP32 Pinout Reference
Interactive ESP32 GPIO pinout guide. Click any pin to see its full capabilities including ADC, DAC, touch, SPI, I2C, and UART functions. Switch between ESP32, ESP32-S3, ESP32-C3, and ESP32-C6 variants. Search pins by function. Free, private, and works offline.
Pin Details
How to Use the ESP32 Pinout Reference
The ESP32 Pinout Reference is a free, interactive tool that helps makers, students, and engineers quickly identify the functions of every GPIO pin on ESP32 development boards. Select your board variant from the dropdown to see the correct pin layout for ESP32 (30-pin DevKit V1), ESP32-S3, ESP32-C3, or ESP32-C6. Click or tap any pin on the visual board diagram to see its full capabilities including analog-to-digital converter (ADC) channel, digital-to-analog converter (DAC) output, capacitive touch sensor number, SPI bus assignment, I2C compatibility, UART mapping, and any boot-related strapping behavior. Use the search box to instantly find pins by function name or GPIO number. Filter tags let you highlight all ADC, touch, SPI, I2C, or UART pins at once, making it easy to plan your wiring before writing a single line of code.
ESP32 GPIO Pin Functions Explained
The ESP32 provides up to 34 GPIO pins, each capable of multiple functions through a flexible multiplexing system. ADC (Analog-to-Digital Converter) pins convert analog voltages (0-3.3V) to 12-bit digital values (0-4095). ADC1 has 8 channels and works alongside WiFi, while ADC2 has 10 channels but cannot be used when WiFi is active. DAC (Digital-to-Analog Converter) provides true analog output on GPIO25 (DAC1) and GPIO26 (DAC2), generating voltages between 0-3.3V with 8-bit resolution. Capacitive Touch sensing is available on 10 pins (Touch0-Touch9), enabling button-free touch interfaces. SPI communication uses HSPI (GPIO12-15) and VSPI (GPIO18-23) buses for high-speed peripheral communication with displays, SD cards, and sensors. I2C default pins are GPIO21 (SDA) and GPIO22 (SCL) for connecting sensors, OLEDs, and other I2C devices. UART provides three serial ports: UART0 (GPIO1/GPIO3, used by USB), UART1, and UART2 (GPIO16/GPIO17) for serial communication with GPS modules, Bluetooth adapters, and other microcontrollers.
ESP32 Strapping Pins and Boot Behavior
Five GPIO pins on the ESP32 are designated as strapping pins that determine the boot mode of the chip when it powers on or resets. GPIO0 selects between normal boot (HIGH) and download/flash mode (LOW) and is connected to the BOOT button on most development boards. GPIO2 must be LOW or floating during boot for proper startup and also controls the onboard LED on many boards. GPIO5 controls the timing of the SDIO slave during boot. GPIO12 (MTDI) sets the flash voltage: HIGH selects 1.8V flash, LOW selects 3.3V flash. Setting GPIO12 HIGH accidentally on a 3.3V flash board causes a boot failure, which is one of the most common ESP32 troubleshooting issues. GPIO15 (MTDO) controls whether the chip outputs debug logs on UART0 during boot. You can use strapping pins in your projects, but you must ensure they are in the correct state during the boot sequence to prevent startup failures.
ESP32 vs ESP32-S3 vs ESP32-C3 Pin Differences
Espressif offers several ESP32 variants optimized for different use cases. The original ESP32 has a dual-core Xtensa LX6 processor, 34 GPIOs, 18 ADC channels, 2 DAC channels, and 10 touch pins. It remains the most widely used variant for general IoT projects. The ESP32-S3 upgrades to a dual-core Xtensa LX7 with up to 45 GPIOs, USB OTG support, and improved AI acceleration for edge ML applications. It adds more ADC channels and touch pins but removes DAC. The ESP32-C3 is a cost-optimized single-core RISC-V chip with 22 GPIOs, WiFi, and Bluetooth 5 LE. It has fewer peripherals but offers excellent value for simple IoT sensors and actuators. The ESP32-C6 adds WiFi 6, Zigbee, and Thread protocol support to the RISC-V architecture with 30 GPIOs, making it ideal for smart home applications that need Matter protocol compatibility. Choose your variant based on required GPIO count, processing power, wireless protocols, and peripheral needs. Based on Espressif official datasheets, last updated April 2026.
Frequently Asked Questions
Which ESP32 pins are safe to use?
Most GPIO pins are safe for general use. Avoid GPIO 6-11 (connected to internal flash), be cautious with strapping pins (GPIO 0, 2, 5, 12, 15) during boot, and note that GPIO 34-39 are input-only. For WiFi projects, prefer ADC1 pins (GPIO 32-39) since ADC2 cannot be used while WiFi is active.
Why can't I use GPIO 6-11?
GPIO 6-11 are internally connected to the SPI flash memory that stores your program. Using these pins in your project will interfere with flash read/write operations, causing crashes, boot failures, or data corruption. These pins are exposed on some development boards but should never be connected to external circuits.
What are strapping pins?
Strapping pins (GPIO 0, 2, 5, 12, 15) are read by the ESP32 during boot to determine the boot mode, flash voltage, and debug output settings. GPIO 0 selects between normal boot (HIGH) and flash/download mode (LOW). GPIO 12 sets flash voltage (HIGH = 1.8V, LOW = 3.3V). You can use these pins in your project, but they must be in the correct state at boot time.
Can I use ADC2 with WiFi?
No. When WiFi is active on the ESP32, the ADC2 peripheral is used internally by the WiFi driver and cannot be read by user code. If you need analog readings while using WiFi, use ADC1 channels (GPIO 32-39). This limitation applies to the original ESP32; the ESP32-S3 and newer variants have improved ADC behavior.
What is the difference between ESP32 and ESP32-S3?
The ESP32-S3 upgrades to a faster dual-core Xtensa LX7 processor (vs LX6), adds USB OTG support, increases GPIO count to 45, adds vector instructions for AI/ML workloads, supports up to 16MB PSRAM, and has 14 touch channels (vs 10). However, it removes the DAC peripheral. The S3 is ideal for projects needing USB host/device, camera interfaces, or edge AI.
Which pins support touch sensing?
The original ESP32 has 10 capacitive touch pins: Touch0 (GPIO4), Touch1 (GPIO0), Touch2 (GPIO2), Touch3 (GPIO15), Touch4 (GPIO13), Touch5 (GPIO12), Touch6 (GPIO14), Touch7 (GPIO27), Touch8 (GPIO33), Touch9 (GPIO32). The ESP32-S3 extends this to 14 touch channels. Touch pins detect changes in capacitance when a finger approaches, enabling button-free touch interfaces.