Stax
Tools

ESP32 Pinout Reference

Complete ESP32 WROOM-32 pinout with GPIO, ADC, SPI, I2C, UART pins.

PowerGPIOAnalog/ADCSpecial/ReservedGND
ESP32 WROOM-32 / DevKitC — 38-pin layout reference. Click any pin for details.

ESP32 pinout reference — GPIO, ADC, DAC, SPI, I2C, and more

The ESP32 is one of the most capable microcontroller modules available, combining dual-core processing (up to 240 MHz), built-in WiFi, Bluetooth 4.2 and BLE, 34 GPIO pins, 18 ADC channels, 2 DAC channels, 3 UARTs, 2 I2C buses, 3 SPI buses, and capacitive touch sensing — all for under $5. Its flexibility makes it the go-to choice for IoT projects, home automation, wearables, and anything that needs wireless connectivity. This interactive pinout reference documents every GPIO pin's functions, restrictions, and best-use guidance.

Input-only pins — GPIO 34, 35, 36, 39

Four GPIO pins on the ESP32 are input-only: GPIO 34, 35, 36 (VP), and 39 (VN). These pins do not have internal pull-up or pull-down resistors and cannot drive output signals. They are optimised for ADC use and connected to the Hall effect sensor (GPIO 36 and 39) and the internal temperature sensor. Never attempt to use these as digital outputs — it will not work and may confuse your circuit debugging.

ADC limitations with WiFi enabled

ESP32's ADC2 (GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27) cannot be used while WiFi is active — the WiFi radio uses ADC2 internally. If your project uses both WiFi and analog sensors, use ADC1 pins exclusively: GPIO 32, 33, 34, 35, 36, 39. ADC accuracy on the ESP32 is also non-linear at the extremes (below 0.1 V and above 3.1 V on a 3.3V supply) — use the built-in ADC calibration or add an op-amp buffer for precision measurements.

Strapping pins — avoid for general GPIO

Several ESP32 GPIO pins are "strapping pins" that the chip reads at boot to determine operating mode: GPIO 0 (boot mode), GPIO 2 (must be LOW for flash download), GPIO 12 (flash voltage selection), GPIO 15 (enables debug output). Pulling these pins HIGH or LOW at boot can prevent the ESP32 from starting correctly. Avoid using GPIO 0, 2, 12, and 15 for general I/O if you can. If you must use them, ensure external pull-ups or pull-downs do not conflict with the boot-time requirements.

Touch sensing pins

The ESP32 has 10 capacitive touch pins (T0–T9) on GPIO 0, 2, 4, 12, 13, 14, 15, 27, 32, 33. Touch inputs work by measuring capacitance changes when a finger approaches the pin. They can be used to build touch buttons, sliders, and proximity sensors without any additional components. Use touchRead() in Arduino IDE or esp_touch in ESP-IDF. Touch sensing is not reliable on the same pins while using them for I2C or SPI — use dedicated GPIOs for each function.

Frequently asked questions

Which ESP32 pins are input-only?
Pins GPIO 34, 35, 36 (labeled VP), and 39 (labeled VN) are input-only pins on the ESP32. They do not have internal pull-up or pull-down resistors and cannot be configured as outputs. They are best used for reading analog sensors or external digital signals where output capability is not required.
Which pins should I avoid on ESP32?
Avoid using GPIO 6 through 11 — these pins are internally connected to the SPI flash memory chip and using them in your sketch can corrupt flash access and crash the device. GPIO 0, 2, 12, and 15 are strapping pins that the ESP32 checks during boot to determine operating mode. They can be used after boot but must be in specific states (HIGH or LOW) during power-on reset or programming.
How many ADC channels does the ESP32 have?
The ESP32 has two ADC units with 18 channels total. ADC1 covers GPIOs 32 through 39 and can be used freely even when Wi-Fi is active. ADC2 covers GPIOs 0, 2, 4, 12–15, 25, 26, and 27, but it cannot be used while Wi-Fi is active because the Wi-Fi subsystem uses ADC2 internally. For reliable analog readings in Wi-Fi projects, always use ADC1 pins.

Related tools