ESP32 GPIO Limitations

ESP32 (and its DevKit boards) has a number of limitations with respect to its GPIOs. Here is a table of issues to keep in mind.

The took the list of ESP32 GPIO limitations from a Randomnerd Tutorials post and added a handful more limitations, unusual/undocumented behaviors, tips and tricks that we have noticed.

GPIOInputOutputNotes
0Pulled up internally, CautionCautionOutputs a signal at boot. Must be LOW to enter flashing mode. Connected to BOOT button on Dev Kit boards. May be used as input, e.g. to read the BOOT button status: pinMode(0, OUTPUT); uint8_t boot = digitalRead(0);
1TX pin, CautionCautionOutputs signal at boot. This pin is used for serial code upload. You may use this pin for other purposes after the code upload (or if your code loads from flash), but doing so may break your serial communication.
2OKOKConnected to on-board LED in ESP32 Dev Kits. Must be left floating or LOW to enter the flashing mode.
3CautionRX pin, CautionThis pin is used for serial code upload. You may use this pin for other purposes after the code upload (or if your code loads from flash), but doing so may break your serial communication.
4OKOK
5Pulled up internally, CautionCautionOutputs a signal at boot. This is a strapping pin that sets the timing of the SDIO slave.
6xxConnected to the integrated SPI flash. Leave unconnected.
7xxConnected to the integrated SPI flash. Leave unconnected.
8xxConnected to the integrated SPI flash. Leave unconnected.
9xxConnected to the integrated SPI flash. Leave unconnected.
10xxConnected to the integrated SPI flash. Leave unconnected.
11xxConnected to the integrated SPI flash. Leave unconnected.
12CautionOKBoot fails if pulled high. Don’t pull this pin up or down externally.
13OKOK
14CautionCautionOutputs a signal at boot. Toggles while Arduino IDE is waiting for the user to press the BOOT button to upload firmware code.
15CautionCautionOutputs a signal at boot.
16OKOKGPIO16 should be pulled up and left unused in ESP32-WROOM-32E modules using QSPI RAM ESP32D0WDR2V3 IC
17OKOK
18OKOK
19OKOK
20OKOK
21OKOK
22OKOK
23OKOK
24OKOK
25OKOK
26OKOK
27OKOK
28OKOK
29OKOK
30OKOK
31OKOK
32OKOK
33CautionCautionSometimes goes high (instead of normal low) during reset (EN button pressed).
34OKOK
35OKOK
36OKOK
39OKOK

Leave a Reply

Your email address will not be published. Required fields are marked *