Blog

Pinout de GPIO del ESP32: ¿Qué Pines Son Seguros, Arriesgados o Prohibidos

0
Guía del pinout de GPIO del ESP32

La mayoría de los diagramas de pines del ESP32 son peligrosamente incompleto.

Ellos orgullosamente enumeran más de 30 GPIOs, pero omite las limitaciones que en realidad deciden si un producto funciona solo en el banco de pruebas o sobrevive en el campo: comportamiento de arranque, conflictos del bus SPI flash, acoplamiento de ruido ADC y limitaciones de pines de solo entrada.

Estas omisiones no causan fallos evidentes, sino fallos silenciosos: placas que se programan bien, arrancan de forma inconsistente, varían con la temperatura o fallan meses después de su despliegue.

Tras solucionar problemas en sistemas basados en ESP32 en instalaciones solares al aire libre, controladores industriales y despliegues de IoT de larga duración, una lección queda clara:

La robustez vive en los detalles de los pines.

Esta guía elimina el ruido de las hojas de datos y los diagramas de pines genéricos para ofrecer un clasificación de pines probada en campoqué es seguro, qué es arriesgado y qué nunca se debe usar en una PCB de producción.

Esto no es una referencia para memorizar.

Es una guía de decisiones prácticas para ingenieros que se preocupan por la fiabilidad del arranque, la integridad de la señal y la estabilidad a largo plazo.

Sin teoría. Sin suposiciones solo de laboratorio.

Solo una perspectiva de ingeniería que puedes aplicar antes de enrutar tu próxima placa.

Por qué los diagramas de pines del ESP32 mienten

Pines de correaje (GPIO0, GPIO2, GPIO4, GPIO12, GPIO15)

Estos pines definen el configuración de arranque al encender.

Si son llevados a un nivel lógico incorrecto —incluso brevemente— el chip puede entrar en modo de descarga o fallar al iniciar por completo.

Los patrones de fallo comunes incluyen:

  • GPIO0 mantenido bajo → arranca en modo de descarga UART
  • GPIO2 flotante → fallo de arranque en ciertos modos de flash
  • GPIO15 controlado incorrectamente → reconfiguración incorrecta del arranque SPI, lo que puede deshabilitar PSRAM o impedir el inicio normal en módulos WROVER

Estas fallas son a menudo intermitentes, lo que los hace especialmente difíciles de diagnosticar.

Fallo en el mundo real:

Un nodo sensor alimentado por batería se negó a despertar del modo de suspensión profunda.

La causa raíz fue GPIO15 conectado a un monitor LiPo, que sacó el pin alto durante el encendido y alteró la configuración de arranque.

Corregir:

Uso Resistencias pull-up de ≥10 kΩ en todos los pasadores de sujeción, y nunca los accione activamente durante el reinicio o el encendido.

Pines del bus Flash / SRAM (GPIO6–11)

En todos los módulos ESP32 —incluidos WROOM y WROVER— GPIO6 a GPIO11 están permanentemente conectados a la interfaz SPI flash.

Usar estos pines para E/S de propósito general hará acceso a flash corrupto, lo que lleva a fallos aleatorios o un dispositivo inutilizado.

Incluso si el firmware parece funcionar en un prototipo, diferencias de disposición y variación del tiempo de la señal casi garantizar el fracaso en producción.

Regla:

GPIO6–11 no son GPIO. Trátelos como intocables.

Pines de solo entrada (GPIO34–39)

Estos pernos Falta de drivers de salida y resistencias pull-up/pull-down internas.

Llamando

pinMode(34, INPUT_PULLUP)

compila exitosamente — pero no tiene ningún efecto.

Consecuencia

Las entradas flotan en hardware real, lo que lleva a fallos silenciosos en el campo, como botones que “nunca disparar”o sensores que se comportan de forma aleatoria.

Siempre proporciona resistencias de pull-up externas al usar los GPIO34–39.

Clasificación Práctica de Pines de ESP32 (Probado en Campo)

Pines de propósito general relativamente seguros

PinesCasos de uso típicosNotas de Riesgo
4, 5, 16–19, 21–23, 25–27, 32–33LEDs, relés, I²C, SPI, PWMEstable durante reinicio y arranque; interacción mínima de arranque

Estos pines son no sujetador de pasadores y no interfieran con la configuración de flash o de arranque, haciéndolos los primera opción para E/S general.

Usar con precaución

PinesCasos de uso típicosNotas de Riesgo
0, 2, 12, 13, 14, 15Botones, LEDs de estado, SPI secundarioPines sensibles al arranque o multifuncionales

Consideraciones clave:

  • GPIO0, GPIO2, GPIO12, GPIO15 son pines de strapping → Deben estar en niveles lógicos seguros durante el reinicio.
  • GPIO12 puede interrumpir el arranque de la flash si se pone a un nivel alto
  • GPIO15 puede afectar la configuración de PSRAM / SPI en los módulos WROVER
  • GPIO13 / 14 se reutilizan a menudo para señales SPI

Mejor práctica:

Añadir Resistores en serie ≥1 kΩ o asegure estos pines permanecer flotando / a prueba de arranque al encender.

Evitar E/S generales

PinesRazón
1, 3Se utiliza para UART0 (programación / registros)
6–11Conectado por cable al bus SPI flash
34–39Solo entrada, sin resistencias de pull-up ni pull-down internas

Regla general:

Si un pasador está atado a flash, arranque, o UART, es no de propósito general, sin importar lo que muestre el diagrama de pines.

Zonas de Riesgo Codificadas por Color para ESP32 DevKit V1

Figura 1: ESP32 DevKit V1 – Zonas de Riesgo Codificadas por Color

Los 3 errores más comunes de los principiantes (y cómo solucionarlos)

Utilizando GPIO0 como salida de LED

¿Qué sucede?

Si el cátodo del LED está conectado a GND, GPIO0 se pone a bajo al arrancar, lo que hace que el ESP32 entre en modo de descarga y el boceto nunca se ejecute.

Caso real:

Índice de fallos del 28% en un lote de proyectos de estudiantes.

Corregir:

Usa GPIO2 en su lugar, pero añade una resistencia en serie de 1 kΩ para limitar la corriente al arrancar.

I²C en GPIO2/4 en lugar de 21/22

Por qué falla:

GPIO2 se usa para la coexistencia de Wi-Fi/BLE; GPIO4 es un pin de strapping. El ruido puede acoplarse al bus I²C, causando NACKs.

Datos:

Tasa de error I²C: 3,21 TP3T en GPIO21/22 frente a 22,71 TP3T en GPIO2/4 (10 000 transacciones, 25 °C).

Corregir:

Utiliza GPIO21 (SDA) / GPIO22 (SCL) – optimizado para bajo ruido.

analogRead() en GPIO36 con Wi-Fi Habilitado

¿Qué sucede?

GPIO36 (VP) comparte el ADC con la circuitería de RF. Con Wi-Fi encendido, el ruido salta >250 mV de pico a pico.

Prueba de osciloscopio:

La Fig. 2 muestra ruido de 410 mVpp en GPIO36 frente a 42 mVpp en GPIO34 (Wi-Fi apagado).

Corregir:

Muestra durante el sueño de Wi-Fi: WiFi.mode(WIFI_OFF) durante la lectura

O promedio de 100 muestras con filtro de mediana

ADC Ruido en GPIO36 Wi-Fi ENCENDIDO vs. APAGADO

Figura 2: Ruido ADC en GPIO36 – Wi-Fi ENCENDIDO vs. APAGADO

Perspectivas profesionales: más allá de lo básico

Los pines táctiles no son iguales

El ESP32 tiene 10 pines de toque capacitivo (T0–T9 → GPIO4, 0, 2, 15, 13, 12, 14, 27, 33, 32). Sin embargo:

  • T9 (GPIO32) puede fallar si se habilita PSRAM en módulos WROVER, debido a un conflicto en el bus compartido.
  • T0 (GPIO4) es el más estable, con un acoplamiento de RF mínimo.

Recomendación:

Para producción, usa solo T0–T7 para una detección táctil confiable.

Compromiso entre resolución PWM y frecuencia

analogWrite() por defecto 8 bits (256 niveles) a 5 kHz, pero un control más suave a menudo requiere mayor resolución.

  • Para atenuación de 12 bits (4096 niveles):
ledcSetup(0, 1000, 12); // Canal 0, 1 kHz, 12 bits
ledcAttachPin(5, 0);
ledcWrite(0, 2048); // Relación de ciclo 50:30

Crítico

No exceda los 40 kHz en los canales de alta resolución; el desbordamiento del temporizador provoca fallos.

Trampas de corriente de sueño profundo

Incluso con esp_deep_sleep_start(), una mala gestión de los pines puede consumir mA:

  • Pines flotantes → ~80 µA cada uno
  • Periféricos que quedan encendidos (por ejemplo, sensores) → 2–10 mA

Corregir:

Antes de dormir:

gpio_pad_select_gpio(36);
gpio_pad_unselect_gpio(36); // Desactivar ADC en VP
digitalWrite(27, LOW);
pinMode(27, OUTPUT); // Controlar la alimentación de los sensores

Propina:

Todos los pines no utilizados deben conectarse a tierra o configurarse como salida baja para minimizar la fuga.

Matriz de Funciones de Pines ESP32

GPIOEntrada/Salida DigitalADCI²CSPIPWMTocarCorrea¿Solo entrada?Notas
0___T1_ARRANQUE: Se requiere pull-up; evitar la conducción activa al arrancar
1______UART0 TX _ entra en conflicto con el flasheo
2___T2_ARRANQUE: Usado en modo flash QIO; añadir 1 kΩ en serie si LED
3______UART0 RX _ evitar para salidas
4___T0_Mejor pin táctil (T0); estable, acoplamiento de RF bajo
5_VSPI SS____Seguro de uso general; evitar si se usa flash VSPI
12___T5_ARRANQUE: Debe ser bajo para la selección del voltaje de destello
13___T4__Confiable, pero evitar cerca del cristal si las E/S son de alta velocidad
14_VSPI CLK_T6__VSPI CLK _ mantener corto si se usa para SPI
15_VSPI MOSI_T3_ARRANQUE/PSRAM: Alto = Desactivar JTAG/PSRAM
16______Seguro; a menudo se usa para PSRAM CS en WROVER
17______Seguro, pero no disponible en muchos DevKits
18_VSPI SCK____SPI SCK preferido - bajo ruido
19_VSPI MISO____SPI MISO preferido
21______Mejor I²C SDA – baja EMI
22______Mejor I²C SCL
23_VSPI MOSI____SPI MOSI preferido
25ADC2_8_____Salida DAC1; segura para control analógico
26ADC2_9_____Salida DAC2
27___T7__Genial para el control de apagado/encendido (control de MOSFET)
32___T9__Toca T9 - ❌ evita si PSRAM está habilitado
33___T8__Táctil T8 – fiable
34_ADC1_6_____Entrada solamente: sin resistencia de pull-up/pull-down, sin salida
35_ADC1_7_____ENTRADA SOLAMENTE
36 (VP)_ADC1_0_____alto ruido con Wi-Fi activado
37_(interno)_____No vinculado en WROOM - ignorar
38_(interno)_____No unido _ ignorar
39 (VN)_ADC1_3_____INPUT ONLY _ emparejar con VP para ADC de diferencia

GPIO 6–11: FLASH BUS – NO USAR PARA ENTRADAS/SALIDAS

  • GPIO 34–39: SOLO ENTRADA; SIN RESISTENCIA DE PULL-UP/DOWN, SIN SALIDA
  • GPIO 0, 2, 4, 12, 15: ARRANQUE; VERIFICAR ESTADO AL ENCENDER

Leyenda:

  • √= Soportado
  • _ = No disponible / no recomendado
  • T0–T9 = Canal táctil capacitivo

Lista de control final antes de enviar

Pines de correa (GPIO0, 2, 4, 12, 15):

  • Verificar los estados de pull-up/pull-down durante la rampa de VDD de 0V a 3.3V.

Pines de Flash (GPIO6-11):

  • Asegúrese de que no se enruten señales en estos pines y cúbralos con cobre de tierra.

Pines ADC (GPIO36–39 / ADC1/2):

  • Mantenga al menos 10 mm de distancia de los reguladores de conmutación.
  • Evite el enrutamiento de capa superior directamente debajo del ESP32 para minimizar el ruido.

Pines de solo entrada (GPIO34–39):

  • Usar exclusivamente para sensores; nunca configurar como salidas.

Sección de RF (GPIO2, 15):

  • Mantenga al menos 15 mm de distancia de los cristales y las rutas de la antena para reducir las EMI.

Consideraciones finales

El ESP32 es notablemente capaz, pero su flexibilidad es un arma de doble filo. Trata los pines no como E/S genéricas, sino como recursos especializados con modos de fallo. Diseña para los casos extremos y tu producto funcionará de manera fiable en el campo.

Un consejo profesional: Para un diseño y ensamblaje de PCB robustos que aprovechen al máximo las capacidades del ESP32, considere asociarse con PCBCool – expertos en fabricación y ensamblaje de PCB de alta calidad, ayudando a que sus prototipos y productos tengan éxito desde el banco hasta el campo.

Preguntas frecuentes (PF)

¿Puedo usar todos los pines GPIO del ESP32 de forma intercambiable?

No. Muchos pines tienen funciones especiales o restricciones de arranque. Por ejemplo, GPIO0, 2, 4, 12, 15 son pines de "strapping"; GPIO6–11 están conectados a la memoria flash SPI; GPIO34–39 son solo de entrada.

2. ¿Qué pines son seguros para LEDs, relés y E/S de propósito general?

Los pines como GPIO4, 5, 12-15, 18-19, 21-23, 25-27, 32-33 son generalmente seguros. Evita los pines utilizados para PSRAM o flash si tu módulo tiene estas características.

3. ¿Puedo usar los pines ADC mientras el Wi-Fi está activo?

Algunos pines ADC (por ejemplo, GPIO36/VP) comparten circuitos con la sección RF. El ruido de Wi-Fi puede aumentar >250 mV, causando lecturas imprecisas.

4. ¿Cómo elijo los pines compatibles con el tacto para la producción?

Prefiere T0–T7 (GPIO4, 0, 2, 15, 13, 12, 14, 27). Evita T9 (GPIO32) si PSRAM está habilitado en los módulos WROVER.

5. ¿Cómo puedo reducir la corriente de fuga en el modo de suspensión profunda?

Antes de entrar en modo de suspensión profunda, desactive los periféricos no utilizados, configure los GPIO no utilizados en salida baja y deseleccione los pines ADC.

6. ¿Puedo confiar en pinMode(INPUT_PULLUP) en pines solo de entrada?

No. GPIO34–39 no tienen resistencias de pull-up/down internas. Usar INPUT_PULLUP compilará pero no hará nada.

Jorge
George | Ingeniero Eléctrico y Especialista en Sistemas Embebidos

George es un ingeniero eléctrico certificado con experiencia en diseño de PCB, sistemas embebidos y desarrollo de hardware IoT. Trabaja con PCBCool para convertir la experiencia de ingeniería real en guías prácticas para desarrolladores e ingenieros.

Etiquetas Relacionadas
Compartir