Los pines que hay que evitar o usar con cuidado
El ESP32 tiene 34 GPIO, pero en una DevKit solo unos dos tercios se comportan como pines normales. Cuatro grupos necesitan atención.
GPIO 6 a 11: ocupados por la flash
Estos seis pines conectan el chip con la flash SPI que hay dentro del módulo. Las DevKitC los sacan como CLK, SD0, SD1, SD2, SD3 y CMD, pero tocarlos cuelga el programa o impide que la placa arranque.
GPIO 0, 2, 5, 12 y 15: pines de strapping
El chip lee estos pines en el reset para decidir cómo arrancar. Con el programa en marcha son GPIO normales, así que funcionan bien como salidas o para botones. Los problemas vienen de cualquier cosa que imponga el nivel equivocado al encender, como una resistencia de pull-up, un módulo que controla la línea o un sensor que la mantiene.
| GPIO | Valor en el reset | Qué elige | En la práctica |
|---|---|---|---|
| 0 | Pull-up (ALTO) | Modo de arranque: ALTO ejecuta el programa, BAJO entra en modo de descarga | Nada debe mantenerlo en BAJO al encender |
| 2 | Pull-down (BAJO) | Debe estar en BAJO o sin conectar para el modo de descarga | Sin pull-up; a menudo es el LED de la placa |
| 5 | Pull-up (ALTO) | Temporización SDIO esclavo, junto con GPIO15 | Sirve para casi todo |
| 12 | Pull-down (BAJO) | Tensión de la flash: BAJO 3,3 V, ALTO 1,8 V | Nunca en ALTO durante el reset |
| 15 | Pull-up (ALTO) | Log de arranque por UART0: ALTO lo imprime, BAJO lo silencia | Seguro; BAJO solo oculta el log |
GPIO 34 a 39: solo entrada
Estos pines no tienen etapa de salida ni pull-up o pull-down internos. Son un buen sitio para lecturas analógicas y para botones con una resistencia externa, pero no pueden controlar un LED, un relé ni una línea de bus. GPIO 37 y 38 existen en el chip, pero no salen al exterior en los módulos WROOM.
GPIO 1 y 3: el puerto USB-serie
La UART0 va al conversor USB-serie y lleva tanto la carga de programas como Serial. En un proyecto terminado puedes reutilizar estos pines, pero pierdes el monitor serie y la carga puede fallar mientras haya algo conectado.
El ADC2 deja de funcionar con el WiFi encendido
El ESP32 tiene dos ADC. El ADC1 está en los GPIO 32 a 39 y el ADC2 en los GPIO 0, 2, 4, 12 a 15 y 25 a 27. El driver del WiFi usa el ADC2, así que en cuanto arranca el WiFi las lecturas en esos pines fallan o devuelven valores sin sentido. En un proyecto conectado, pon todas las entradas analógicas en el ADC1. ¿Quieres medir la batería? Lo habitual es GPIO 34 o 35 con un divisor resistivo.
Incluso en el ADC1 las lecturas no son lineales cerca de los extremos. Con la atenuación de 12 dB, Espressif recomienda quedarse más o menos entre 0,15 V y 2,45 V para obtener resultados precisos, así que dimensiona el divisor para mantener la señal en esa ventana.
Tabla completa de GPIO del ESP32
| GPIO | Estado | ADC | Táctil | RTC | Notas |
|---|---|---|---|---|---|
| GPIO0 | Con cuidado | ADC2_CH1 | T1 | RTC_GPIO11 | strapping |
| GPIO1 (TX) | Con cuidado | — | — | — | USB-serie, UART0 TX |
| GPIO2 | Con cuidado | ADC2_CH2 | T2 | RTC_GPIO12 | strapping, LED en algunas placas |
| GPIO3 (RX) | Con cuidado | — | — | — | USB-serie, UART0 RX |
| GPIO4 | Libre | ADC2_CH0 | T0 | RTC_GPIO10 | — |
| GPIO5 | Con cuidado | — | — | — | strapping, VSPI SS |
| GPIO6 (CLK) | No usar | — | — | — | flash SPI |
| GPIO7 (SD0) | No usar | — | — | — | flash SPI |
| GPIO8 (SD1) | No usar | — | — | — | flash SPI |
| GPIO9 (SD2) | No usar | — | — | — | flash SPI |
| GPIO10 (SD3) | No usar | — | — | — | flash SPI |
| GPIO11 (CMD) | No usar | — | — | — | flash SPI |
| GPIO12 | Con cuidado | ADC2_CH5 | T5 | RTC_GPIO15 | strapping, HSPI MISO |
| GPIO13 | Libre | ADC2_CH4 | T4 | RTC_GPIO14 | HSPI MOSI |
| GPIO14 | Libre | ADC2_CH6 | T6 | RTC_GPIO16 | posible actividad al arrancar, HSPI SCK |
| GPIO15 | Con cuidado | ADC2_CH3 | T3 | RTC_GPIO13 | strapping, HSPI SS |
| GPIO16 | Libre | — | — | — | PSRAM en WROVER, RX2/TX2 en algunas placas |
| GPIO17 | Libre | — | — | — | PSRAM en WROVER, RX2/TX2 en algunas placas |
| GPIO18 | Libre | — | — | — | VSPI SCK |
| GPIO19 | Libre | — | — | — | VSPI MISO |
| GPIO21 | Libre | — | — | — | I2C SDA |
| GPIO22 | Libre | — | — | — | I2C SCL |
| GPIO23 | Libre | — | — | — | VSPI MOSI |
| GPIO25 | Libre | ADC2_CH8 | — | RTC_GPIO6 | — |
| GPIO26 | Libre | ADC2_CH9 | — | RTC_GPIO7 | — |
| GPIO27 | Libre | ADC2_CH7 | T7 | RTC_GPIO17 | — |
| GPIO32 | Libre | ADC1_CH4 | T9 | RTC_GPIO9 | cristal de 32 kHz |
| GPIO33 | Libre | ADC1_CH5 | T8 | RTC_GPIO8 | cristal de 32 kHz |
| GPIO34 | Solo entrada | ADC1_CH6 | — | RTC_GPIO4 | solo entrada |
| GPIO35 | Solo entrada | ADC1_CH7 | — | RTC_GPIO5 | solo entrada |
| GPIO36 (VP) | Solo entrada | ADC1_CH0 | — | RTC_GPIO0 | solo entrada |
| GPIO39 (VN) | Solo entrada | ADC1_CH3 | — | RTC_GPIO3 | solo entrada |
Los pines RTC pueden despertar al chip del deep sleep (ext0 para un pin, ext1 para un grupo), y los pines táctiles pueden despertarlo con un toque. Las funciones por defecto son las de Arduino-ESP32: Wire en 21/22 y SPI (VSPI) en 18/19/23/5. Los pines por defecto de Serial2 cambiaron con el core 3.x, así que indícalos siempre.
Preguntas frecuentes
¿Qué pines del ESP32 se pueden usar sin problemas?
En una DevKit los GPIO sin restricciones son 4, 13, 14, 16 a 19, 21 a 23, 25 a 27, 32 y 33. Los GPIO 34 a 39 sirven como entradas. Los GPIO 0, 2, 5, 12 y 15 funcionan con el programa en marcha, pero deciden cómo arranca el chip, y los GPIO 6 a 11 pertenecen a la flash. En los módulos WROVER, los GPIO 16 y 17 los ocupa la PSRAM.
¿Puedo usar los pines ADC2 con WiFi?
No. El driver del WiFi usa el ADC2, así que las lecturas analógicas en los GPIO 0, 2, 4, 12 a 15 y 25 a 27 fallan con el WiFi encendido. Usa los pines del ADC1, los GPIO 32 a 39. El ADC2 vuelve a funcionar solo con el WiFi apagado.
¿Por qué mi ESP32 no arranca después de conectar algo al GPIO12?
El GPIO12 fija la tensión de la flash en el reset. Si un pull-up o un módulo conectado lo mantiene en ALTO, el chip alimenta la flash a 1,8 V y los módulos con flash de 3,3 V no arrancan. Mueve la conexión a otro pin, o graba la tensión de la flash en los eFuse con espefuse set-flash-voltage 3.3V. Este último paso es permanente y no se puede deshacer.
¿Qué pines pueden despertar al ESP32 del deep sleep?
Los GPIO RTC: 0, 2, 4, 12 a 15, 25 a 27 y 32 a 39. Usa ext0 para despertar con un pin y ext1 para despertar con un grupo de pines. Los pines táctiles también pueden despertar al chip con un toque.
¿Cuáles son los pines I2C y SPI por defecto del ESP32?
En Arduino-ESP32, Wire usa el GPIO 21 para SDA y el 22 para SCL, y SPI usa los pines VSPI: 18 SCK, 19 MISO, 23 MOSI y 5 SS. Gracias a la GPIO matrix puedes moverlos a casi cualquier pin que admita salida pasando los pines a Wire.begin() o SPI.begin().
¿Los pines del ESP32 toleran 5 V?
No. Los GPIO trabajan a 3,3 V y Espressif no los garantiza para 5 V. Conecta las señales de 5 V a través de un conversor de niveles lógicos o de un divisor resistivo.