Choosing an ESP32 GPIO is not just a matter of finding an unused pin number. A pin can look available on a diagram and still create boot failures, break analog measurements when Wi-Fi starts, interfere with flash or PSRAM, or silently remove your debugging interface.
esp32pin.com is an interactive pinout reference designed around those constraints. Espressif highlighted the project on its Developer Portal in August 2026, noting that its pin data is generated from Espressif’s official KiCad libraries and cross-validated against the esp-gpio-tool dataset. That makes it useful as a fast design aid—but the final authority for a production design should still be the datasheet, module documentation, board schematic, and ESP-IDF documentation for the exact ESP32 variant you are using.
What the ESP32 pinout tool actually solves
Traditional pinout images tell you where GPIO23 or GPIO34 is located. They often do not tell you whether a pin is sampled during reset, connected to external flash, input-only, shared with JTAG or USB, or affected by another peripheral.
The interactive reference adds those practical constraints to each pin. You can inspect warnings and filter pins according to the job you need them to perform. This is particularly valuable when moving from a breadboard to a custom PCB, because a pin choice that was easy to change during prototyping becomes expensive after fabrication.
Five ESP32 GPIO traps worth checking before wiring
1. Strapping pins can change startup behavior
On the original ESP32, GPIO0, GPIO2, GPIO5, GPIO12 and GPIO15 are strapping pins. Their levels are sampled during reset and influence boot-related configuration. External circuits connected to these pins therefore need to be designed so they do not force an unwanted level during startup.
This does not mean every strapping pin is forbidden. It means you must understand the required reset state before attaching pull resistors, sensors, transistors, LEDs, or other circuitry. For a deeper design workflow, see our guide to choosing ESP32 GPIO pins without triggering boot and flash problems.
2. Flash and PSRAM pins may already be occupied
Espressif’s ESP-IDF documentation notes that GPIO6 through GPIO11 on common original ESP32 modules are associated with SPI flash and should not be repurposed. Depending on the module and memory configuration, other pins can also be reserved for flash or PSRAM.
The important rule is to design against the module and board documentation, not a generic chip pinout. An ESP32-WROOM module, an ESP32-WROVER module, and newer ESP32-family devices do not expose exactly the same usable-pin set.
3. GPIO34–GPIO39 are input-only on the original ESP32
GPIO34, GPIO35, GPIO36, GPIO37, GPIO38 and GPIO39 are input-only on the original ESP32. ESP-IDF also documents that these pins do not provide software-controlled internal pull-up or pull-down resistors. They can be useful for digital inputs and ADC1 signals, but they cannot drive an LED, relay input, chip-select line, or other output.
If an input needs a defined idle state, add the appropriate external resistor rather than assuming INPUT_PULLUP will work on these pins.
4. ADC2 conflicts with Wi-Fi on the original ESP32
This is one of the easiest traps to miss. Espressif documents that ADC2 is shared with the Wi-Fi subsystem on the original ESP32. An analog sensor can therefore appear to work during a simple prototype and then stop behaving as expected after Wi-Fi is enabled.
For projects that require analog sampling while Wi-Fi is active, prefer a suitable ADC1 pin when possible and verify the limitations for your exact chip and ESP-IDF version. This is a silicon/peripheral constraint, not a problem that can be fixed by changing the sensor-reading formula.
5. Debug and communication pins can have a second job
GPIO1 and GPIO3 are commonly used by UART0 for flashing and serial logging on classic ESP32 development boards. GPIO12–GPIO15 are associated with JTAG on the original ESP32, while newer family members may have native USB or USB Serial/JTAG pins with their own restrictions.
Repurposing one of these pins may be valid, but first decide what debugging, programming, or USB functionality you are willing to lose. A design that works after programming but makes future firmware recovery difficult is not a good production pin assignment.
A practical pin-selection workflow
- Identify the exact chip, module and board. “ESP32” is a family name. Confirm whether you have the original ESP32, S2, S3, C3, C6, another variant, and which module or development board contains it.
- List every required signal. Mark outputs, interrupt inputs, ADC channels, I2C, SPI, UART, PWM, USB/JTAG, wake-up inputs and any high-speed interfaces.
- Eliminate reserved pins first. Remove pins committed to flash, PSRAM or board hardware before optimizing the remaining assignments.
- Check reset-time constraints. Review strapping pins and the external circuit levels that will exist while EN/reset is asserted and released.
- Check peripheral conflicts. For example, do not plan an original-ESP32 ADC2 measurement as if it were independent of Wi-Fi.
- Check electrical requirements. Verify input/output capability, pull resistors, voltage levels and drive requirements. ESP32 GPIO is not 5 V logic.
- Check the board schematic. A GPIO that is usable at chip level may already be connected to an LED, USB bridge, button or another component on a development board.
- Test startup and programming before PCB release. Power-cycle repeatedly, test firmware download mode, enable all intended radios/peripherals, and confirm that every signal still behaves correctly.
Example: selecting a pin for an analog sensor with Wi-Fi
Suppose a classic ESP32 project reads an analog pressure sensor and publishes data over Wi-Fi. Picking an ADC2-capable GPIO because it produced good readings in a sensor-only sketch is weak validation: the final firmware changes the hardware resource usage.
A better process is to identify an available ADC1 input, verify that the chosen development board actually exposes it, confirm the sensor voltage is within the ADC input requirements, then test readings with Wi-Fi continuously active. If the design uses GPIO34–GPIO39, remember that those pins are input-only and lack the internal software pull resistors described above.
How to use esp32pin.com without treating it as a substitute for documentation
The tool is most useful during the first pass of pin planning. Its constraint labels can quickly expose an assignment that deserves more investigation. For a custom PCB, follow that warning back to the primary documentation before freezing the schematic.
Espressif says the tool’s data pipeline uses its official KiCad libraries and cross-checks against esp-gpio-tool. The project also supports multiple ESP32-family devices and development boards. That is stronger than a hand-maintained generic pinout image, but board revisions and chip variants still matter.
Before you order the PCB
- Confirm the exact ESP32 chip and module part number.
- Check every strapping pin used by external hardware.
- Exclude flash/PSRAM pins reserved by the selected module.
- Verify input-only pins are never assigned as outputs.
- Check ADC and Wi-Fi coexistence requirements.
- Preserve programming and debugging access intentionally.
- Read the development-board schematic for onboard connections.
- Power-cycle and reflash the complete prototype with all peripherals connected.
Related ESP32 troubleshooting
Pin selection is only one source of unstable hardware. If a board resets when Wi-Fi, motors, relays or other loads become active, use our ESP32 random reboot and brownout troubleshooting guide. If the failure is specifically network recovery, see how to make an ESP32 recover from Wi-Fi disconnects.
Primary references
- Espressif Developer Portal: esp32pin.com pinout reference
- ESP-IDF Programming Guide: ESP32 GPIO and RTC GPIO
- Espressif FAQ: GPIO configuration considerations
Bottom line
An ESP32 pin is “free” only after you check its boot role, memory connections, direction capability, analog limitations, debug functions and board-level wiring. Interactive tools such as esp32pin.com make those conflicts easier to see early. Use them to narrow the choices, then verify the final assignment against Espressif’s documentation for the exact hardware before committing it to a PCB.