¿Qué pines GPIO deberías usar en ESP32?

Libro Guía del Microcontrolador ESP32

El ESP32 es uno de los microcontroladores más populares del mundo IoT, y una de las razones es su enorme flexibilidad: 48 pines con múltiples funciones que puedes reasignar por software. Sin embargo, esa libertad tiene trampas. No todos los pines están expuestos en todas las placas de desarrollo, y algunos no se pueden usar bajo ningún concepto sin arriesgar el funcionamiento del chip.

Esta guía responde a las preguntas más repetidas cuando alguien empieza con el ESP32: ¿qué pines debo usar? ¿qué pines debo evitar en mis proyectos? Lo que viene a continuación es una referencia completa, clara y directa del pinout del ESP32, pensada para que la consultes una y otra vez mientras trabajas en tus proyectos.

Nota importante: No todos los GPIO están accesibles en todas las placas de desarrollo, pero cada GPIO específico funciona igual sin importar la placa que uses. Si estás empezando con el ESP32, te recomendamos leer primero nuestra guía de introducción a la placa de desarrollo ESP32.

Periféricos del ESP32: todo lo que trae integrado

El ESP32 integra una cantidad sorprendente de periféricos en un solo chip. Estos son los que trae de fábrica:

18 canales de Conversor Analógico-Digital (ADC), 3 interfaces SPI, 3 interfaces UART, 2 interfaces I2C, 16 canales de salida PWM, 2 Conversores Digital-Analógico (DAC), 2 interfaces I2S y 10 GPIOs con sensor táctil capacitivo.

El ADC y el DAC están asignados a pines estáticos y específicos, es decir, no se pueden mover. Sin embargo, tú decides qué pines son UART, I2C, SPI, PWM y demás, simplemente asignándolos en el código. Esto es posible gracias a la característica de multiplexación del chip ESP32, una de sus mayores virtudes y la clave de su enorme flexibilidad.

Aunque puedes definir las propiedades de los pines por software, existen pines asignados por defecto. En la placa ESP32 DEVKIT V1 DOIT de 36 pines, por ejemplo, los pines I2C por defecto son GPIO 21 (SDA) y GPIO 22 (SCL), y los pines SPI por defecto son GPIO 23 (MOSI), GPIO 19 (MISO), GPIO 18 (CLK) y GPIO 5 (CS). Ten en cuenta que la ubicación exacta de los pines puede variar según el fabricante, pero la numeración lógica del GPIO siempre se mantiene.

Además, hay pines con características específicas que los hacen más o menos adecuados para un proyecto concreto. La siguiente tabla es la referencia más importante de toda esta guía: muestra qué pines son mejores como entradas, como salidas, y cuáles requieren precaución.

Los pines marcados como OK se pueden usar sin problema. Los pines marcados como “precaución” también se pueden usar, pero debes prestar atención porque pueden tener un comportamiento inesperado, sobre todo al arrancar. Los pines marcados como ❌ no se recomiendan ni como entradas ni como salidas.

GPIOEntradaSalidaNotas
0pull-up internoOKEmite señal PWM al arrancar. Debe estar en LOW para entrar en modo flasheo
1Pin TX❌Salida de depuración al arrancar
2OKOKConectado al LED integrado. Debe quedar flotante o en LOW para entrar en modo flasheo
3OKPin RX❌
4OKOK
5OKOKEmite PWM al arrancar. Strapping pin
6❌❌Conectado a la flash SPI integrada
7❌❌Conectado a la flash SPI integrada
8❌❌Conectado a la flash SPI integrada
9❌❌Conectado a la flash SPI integrada
10❌❌Conectado a la flash SPI integrada
11❌❌Conectado a la flash SPI integrada
12OKOKEl arranque falla si se pone en HIGH. Strapping pin
13OKOK
14OKOKEmite PWM al arrancar
15OKOKEmite PWM al arrancar. Strapping pin
16OKOK
17OKOK
18OKOK
19OKOK
21OKOK
22OKOK
23OKOK
25OKOK
26OKOK
27OKOK
32OKOK
33OKOK
34OK❌Solo entrada
35OK❌Solo entrada
36OK❌Solo entrada
39OK❌Solo entrada

Sigue leyendo para un análisis más detallado y profundo de cada grupo de pines del ESP32 y sus funciones específicas.

Pines solo de entrada: GPIO 34 a 39

Los GPIO 34 a 39 son GPIs (pines solo de entrada). Esto significa que no pueden usarse como salidas bajo ninguna circunstancia, y además no tienen resistencias internas de pull-up ni pull-down. Debes usarlos únicamente como entradas: GPIO 34, GPIO 35, GPIO 36 y GPIO 39.

Su gran ventaja es que todos pertenecen a ADC1, lo que los convierte en los pines ideales para leer sensores analógicos cuando vas a usar Wi-Fi, como veremos más adelante.

Flash SPI integrada: los GPIO 6 a 11 prohibidos

Los GPIO 6 a GPIO 11 están expuestos en algunas placas de desarrollo ESP32, pero están conectados a la memoria flash SPI integrada en el chip ESP-WROOM-32 y no se recomiendan para ningún otro uso. Si intentas usarlos, el ESP32 no arrancará o se comportará de forma impredecible.

No los uses jamás en tus proyectos: GPIO 6 (SCK/CLK), GPIO 7 (SDO/SD0), GPIO 8 (SDI/SD1), GPIO 9 (SHD/SD2), GPIO 10 (SWP/SD3) y GPIO 11 (CSC/CMD).

GPIOs con sensor táctil capacitivo: 10 pines táctiles integrados

El ESP32 tiene 10 sensores táctiles capacitivos internos. Estos pueden detectar variaciones en cualquier cosa que tenga carga eléctrica, como la piel humana. Por eso pueden detectar cambios cuando tocas los GPIO con un dedo. Estos pines se pueden integrar fácilmente en pads capacitivos y reemplazar botones mecánicos en tus proyectos. Además, los pines táctiles también pueden usarse para despertar el ESP32 desde deep sleep, lo que los hace perfectos para dispositivos de bajo consumo.

Los sensores táctiles internos están conectados a estos GPIO: T0 (GPIO 4), T1 (GPIO 0), T2 (GPIO 2), T3 (GPIO 15), T4 (GPIO 13), T5 (GPIO 12), T6 (GPIO 14), T7 (GPIO 27), T8 (GPIO 33) y T9 (GPIO 32).

Conversor Analógico-Digital (ADC): 18 canales de 12 bits

El ESP32 tiene 18 canales de entrada ADC de 12 bits (mientras que el ESP8266 solo tiene 1 canal de 10 bits). Esto representa una mejora enorme en precisión y capacidad respecto a su predecesor. Estos son los GPIO que se pueden usar como ADC y sus canales respectivos:

ADC1: CH0 (GPIO 36), CH1 (GPIO 37), CH2 (GPIO 38), CH3 (GPIO 39), CH4 (GPIO 32), CH5 (GPIO 33), CH6 (GPIO 34), CH7 (GPIO 35).

ADC2: CH0 (GPIO 4), CH1 (GPIO 0), CH2 (GPIO 2), CH3 (GPIO 15), CH4 (GPIO 13), CH5 (GPIO 12), CH6 (GPIO 14), CH7 (GPIO 27), CH8 (GPIO 25), CH9 (GPIO 26).

Nota crítica: Los pines de ADC2 no se pueden usar cuando el Wi-Fi está activo, porque el driver de Wi-Fi se apropia de esa unidad. Si estás usando Wi-Fi y tienes problemas para obtener el valor de un GPIO de ADC2, considera usar un GPIO de ADC1 en su lugar. Eso debería resolver tu problema de inmediato.

Los canales de entrada ADC tienen una resolución de 12 bits. Esto significa que puedes obtener lecturas analógicas que van de 0 a 4095, donde 0 corresponde a 0V y 4095 a 3.3V. También puedes ajustar la resolución de tus canales y el rango del ADC por código.

Importante: Los pines ADC del ESP32 no tienen un comportamiento lineal. Es probable que no puedas distinguir entre 0 y 0.1V, o entre 3.2 y 3.3V. Esto se debe a que la curva del ADC se aplana en los extremos de su rango, ofreciendo lecturas poco fiables fuera de la zona central. Ten esto muy en cuenta cuando uses los pines ADC para mediciones precisas; si necesitas alta exactitud, considera usar un ADC externo.

Conversor Digital-Analógico (DAC): salida analógica real

Hay 2 canales DAC de 8 bits en el ESP32 para convertir señales digitales en salidas de voltaje analógico. A diferencia del PWM (que simula una señal analógica), el DAC genera un voltaje analógico real. Estos son los canales DAC: DAC1 (GPIO 25) y DAC2 (GPIO 26).

GPIOs RTC: los pines que sobreviven al deep sleep

Existe soporte para RTC GPIO en el ESP32. Los GPIO enrutados al subsistema de baja potencia RTC pueden usarse cuando el ESP32 está en deep sleep, un modo en el que el consumo baja a microamperios. Estos RTC GPIO pueden usarse para despertar el ESP32 desde deep sleep cuando el coprocesador Ultra Low Power (ULP) está corriendo.

Los siguientes GPIO pueden usarse como fuente de despertar externa: RTC_GPIO0 (GPIO36), RTC_GPIO3 (GPIO39), RTC_GPIO4 (GPIO34), RTC_GPIO5 (GPIO35), RTC_GPIO6 (GPIO25), RTC_GPIO7 (GPIO26), RTC_GPIO8 (GPIO33), RTC_GPIO9 (GPIO32), RTC_GPIO10 (GPIO4), RTC_GPIO11 (GPIO0), RTC_GPIO12 (GPIO2), RTC_GPIO13 (GPIO15), RTC_GPIO14 (GPIO13), RTC_GPIO15 (GPIO12), RTC_GPIO16 (GPIO14) y RTC_GPIO17 (GPIO27).

PWM: 16 canales independientes

El controlador LED PWM del ESP32 tiene 16 canales independientes que se pueden configurar para generar señales PWM con propiedades diferentes. Todos los pines que pueden actuar como salida se pueden usar como pines PWM (recuerda: los GPIO 34 a 39 no pueden generar PWM porque son solo de entrada).

Para configurar una señal PWM, necesitas definir estos parámetros en el código: la frecuencia de la señal, el ciclo de trabajo (duty cycle), el canal PWM y el GPIO donde quieres sacar la señal.

I2C: dos canales y pines reasignables

El ESP32 tiene dos canales I2C y cualquier pin puede configurarse como SDA o SCL. Al usar el ESP32 con Arduino IDE, los pines I2C por defecto son: GPIO 21 (SDA) y GPIO 22 (SCL).

Si quieres usar otros pines con la librería Wire, solo tienes que llamar a Wire.begin(SDA, SCL); con los números de GPIO que prefieras. Esta flexibilidad es una de las grandes ventajas del ESP32 frente a otras plataformas.

SPI: VSPI y HSPI

Por defecto, el mapeo de pines para SPI es el siguiente:

SPIMOSIMISOCLKCS
VSPIGPIO 23GPIO 19GPIO 18GPIO 5
HSPIGPIO 13GPIO 12GPIO 14GPIO 15

Ten en cuenta que GPIO 12 y GPIO 15 son strapping pins, así que si usas HSPI, presta especial atención a esos dos pines durante el arranque.

UART: tres puertos serie

El ESP32 soporta hasta tres interfaces UART: UART0, UART1 y UART2, dependiendo del modelo de placa que uses. UART0 suele reservarse para la comunicación con el monitor serie durante la carga y la depuración. Sin embargo, también puedes usarlo para comunicarte con otros dispositivos una vez cargado el código, si no necesitas el monitor serie. UART1 y UART2 están disponibles para comunicarse con dispositivos externos. Al igual que I2C y SPI, estos pines UART pueden mapearse a cualquier GPIO del ESP32. Sin embargo, tienen una asignación por defecto en la mayoría de modelos de placa.

Para la mayoría de placas ESP32, la asignación es la siguiente:

Puerto UARTTXRXComentarios
UART0GPIO 1GPIO 3Usado para monitor serie y carga de código; puede reasignarse a otros GPIO
UART1GPIO 10GPIO 9Debe reasignarse a otros GPIO
UART2GPIO 17GPIO 16Puede reasignarse a otros GPIO

Sobre UART1 (GPIO 9 y GPIO 10): estos GPIO están conectados a la memoria flash SPI del ESP32, así que no puedes usarlos tal cual. Para usar UART1 con otros dispositivos, debes definir pines diferentes usando la librería HardwareSerial.

Si estás usando un ESP32-S3, la asignación es completamente diferente, ya que este chip introduce USB nativo y un mapa de pines rediseñado.

Interrupciones: todos los GPIO pueden usarse

Todos los GPIO pueden configurarse como interrupciones. Esto significa que puedes conectar un botón, un sensor de movimiento o cualquier señal digital a cualquier pin y disparar una rutina de servicio de interrupción (ISR) cuando cambie de estado.

Strapping Pins: los pines que deciden el arranque

El chip ESP32 tiene los siguientes strapping pins: GPIO 0 (debe estar en LOW para entrar en modo boot), GPIO 2 (debe quedar flotante o en LOW durante el arranque), GPIO 4, GPIO 5 (debe estar en HIGH durante el arranque), GPIO 12 (debe estar en LOW durante el arranque) y GPIO 15 (debe estar en HIGH durante el arranque).

Estos pines se usan para poner el ESP32 en modo bootloader o flasheo. En la mayoría de placas de desarrollo con USB/Serial integrado, no necesitas preocuparte por el estado de estos pines, porque la placa los pone en el estado correcto para flashear o arrancar automáticamente.

Sin embargo, si tienes periféricos conectados a esos pines, puedes tener problemas al intentar cargar código nuevo, flashear el ESP32 con firmware nuevo o resetear la placa. Si tienes periféricos conectados a los strapping pins y tienes problemas para cargar código o flashear, puede ser porque esos periféricos están impidiendo que el ESP32 entre en el modo correcto. Después de resetear, flashear o arrancar, esos pines funcionan como se espera.

Pines en HIGH al arrancar: cuidado con las salidas inesperadas

Algunos GPIO cambian su estado a HIGH o emiten señales PWM al arrancar o resetear. Esto significa que si tienes salidas conectadas a estos GPIO (como un relé, un LED o un motor), puedes obtener resultados inesperados cuando el ESP32 se resetee o arranque. Los pines afectados son: GPIO 1, GPIO 3, GPIO 5, GPIO 6 a GPIO 11 (conectados a la memoria flash SPI integrada — no recomendados), GPIO 14 y GPIO 15.

Si tu proyecto controla algo crítico, evita estos pines como salidas o añade circuitería externa que mantenga el estado seguro durante el arranque.

Enable (EN): el pin de reset por hardware

Enable (EN) es el pin de habilitación del regulador de 3.3V. Está en pull-up, así que conéctalo a GND para deshabilitar el regulador de 3.3V. Esto significa que puedes usar este pin conectado a un pulsador para reiniciar tu ESP32, por ejemplo, sin necesidad de desconectar la alimentación.

Corriente máxima por GPIO: no lo sobrecargues

La corriente máxima absoluta por GPIO es de 40mA, según la sección “Recommended Operating Conditions” del datasheet del ESP32. Superar este valor puede dañar permanentemente el pin. Para cargas mayores (motores, relés, tiras LED), usa siempre un transistor, MOSFET o driver externo.

Sensor de efecto Hall integrado

El ESP32 también incluye un sensor de efecto Hall integrado que detecta cambios en el campo magnético a su alrededor. Es una característica poco común en microcontroladores de esta gama y puede usarse para detectar imanes, medir proximidad o incluso construir brújulas sencillas.

Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio