El primer problema al usar un ESP32 es que sus pines no son todos iguales. Una placa Arduino UNO te deja usar casi cualquier pin; en el ESP32 algunos solo sirven de entrada, otros están conectados a la memoria flash y otros deciden cómo arranca la placa.
Esta guía explica el pinout de la ESP32-DevKitC V4 (la placa de 38 pines con módulo WROOM-32). Muchas placas genéricas de 30 pines usan el mismo chip y casi la misma distribución; comprueba los rótulos de la tuya antes de conectar nada. Para ver las especificaciones del chip, está la ficha del ESP32.

Cómo leer el diagrama
Cada pin tiene un nombre de la placa (IO23, VP, D2…) y un número de GPIO. En el código se usa siempre el número de GPIO: IO23 es 23; VP es GPIO36 y VN es GPIO39.
Resumen por tipo de pin
| Grupo | GPIO | Qué hacer |
|---|---|---|
| Uso general, seguros | 4, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33 | Úsalos como entrada o salida |
| Solo entrada | 34, 35, 36 (VP), 39 (VN) | Sensores y botones; nunca salidas |
| Memoria flash | 6, 7, 8, 9, 10, 11 | No los uses jamás |
| Arranque (strapping) | 0, 2, 5, 12, 15 | Cuidado con lo que les conectas |
| Consola serie (UART0) | 1 (TX), 3 (RX) | Déjalos libres para cargar y depurar |
Pines solo de entrada: 34, 35, 36 y 39
Estos cuatro pines no pueden ser salidas y tampoco tienen resistencias internas de pull-up o pull-down. Sirven para leer sensores analógicos o pulsadores, pero con un botón necesitas una resistencia externa:
const int BOTON = 34; // solo entrada: necesita resistencia externa
void setup() {
Serial.begin(115200);
pinMode(BOTON, INPUT); // INPUT_PULLUP no funciona en este pin
}
void loop() {
Serial.println(digitalRead(BOTON));
delay(200);
}
Conecta el botón entre el pin y 3,3 V, con una resistencia de unos 10 kΩ del pin a GND.
Pines de la memoria flash: 6 a 11
Los pines marcados CLK, D0, D1, D2, D3 y CMD (GPIO6 a GPIO11) son los que usa el ESP32 para leer su propio programa de la flash. Si los usas, el chip se reinicia o se cuelga. Las placas de 30 pines a veces los exponen: ignóralos.
Pines de arranque: 0, 2, 5, 12 y 15
Al encender, el chip lee el nivel de estos pines para decidir cómo iniciar:
| GPIO | Qué decide | Problema típico |
|---|---|---|
| 0 | Modo de descarga si está a nivel bajo (botón BOOT) | Un sensor lo mantiene a nivel bajo y la placa no arranca |
| 2 | Debe estar bajo o al aire para cargar un programa | El LED integrado suele estar aquí |
| 5 | Temporización de SDIO | Poco problemático, pero evítalo si puedes |
| 12 | Voltaje de la flash | Con nivel alto al arrancar, falla el inicio en módulos de 3,3 V |
| 15 | Muestra u oculta el registro de arranque | Un relé aquí puede cambiar el comportamiento |
Pueden usarse como GPIO normales una vez arrancado, pero no conectes cargas, módulos o resistencias fuertes que fuercen un nivel. Si el ESP32 no se deja programar, comprueba primero estos pines.
ADC1 frente a ADC2
El ESP32 tiene dos convertidores analógicos (ADC):
- ADC1: GPIO32, 33, 34, 35, 36 y 39.
- ADC2: GPIO0, 2, 4, 12, 13, 14, 15, 25, 26 y 27.
El ADC2 no funciona mientras el Wi-Fi está activo. Con Wi-Fi, lee sensores analógicos solo en los pines de ADC1. Es la causa de "mi sensor funcionaba y dejó de funcionar al agregar el Wi-Fi".
const int SENSOR = 34; // ADC1_6: válido con Wi-Fi
void loop() {
int lectura = analogRead(SENSOR); // 0 a 4095
Serial.println(lectura);
delay(500);
}
DAC y táctiles
- DAC (salida analógica real de 8 bits): GPIO25 y GPIO26.
- Sensores táctiles: GPIO4, 0, 2, 15, 13, 12, 14, 27, 33 y 32 (TOUCH0 a TOUCH9). Detectan un dedo sin pulsador.
Pines por defecto de I2C, SPI y UART
El ESP32 puede asignar casi cualquier periférico a cualquier pin libre, así que estos son solo los valores por defecto del núcleo de Arduino:
| Bus | Señal | GPIO |
|---|---|---|
| I2C | SDA / SCL | 21 / 22 |
| SPI (VSPI) | SS / MOSI / MISO / SCK | 5 / 23 / 19 / 18 |
| UART0 | TX / RX | 1 / 3 |
| UART2 | TX / RX | 17 / 16 |
Si cambias de placa o de versión del núcleo, escribe los pines en el código: Wire.begin(21, 22);.
Límites eléctricos
- Los GPIO son de 3,3 V; con 5 V puedes dañarlos. Usa un divisor de tensión o un conversor de nivel.
- No pidas más de unos 20 mA por pin. Para relés y motores usa un transistor o un módulo con optoacoplador. Más en cómo alimentar un ESP32.
- El pin
5V(VIN) sale del USB; no es una entrada de señal.
Lista de pines seguros
Para un proyecto con Wi-Fi:
- Salidas digitales y relés: 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27.
- Entradas digitales con pull-up: los mismos pines.
- Entradas analógicas: 32, 33, 34, 35, 36 y 39.
- Pulsadores y sensores: 4, 13, 14, 27, 32 y 33.
Preguntas frecuentes
¿Cuántos pines puedo usar realmente?
Una DevKitC de 38 pines expone unos 25 GPIO útiles. Descontando los de flash y los solo entrada, quedan unos 20 para salidas.
¿Por qué mi placa no arranca con algo conectado?
Casi siempre es un pin de arranque (0, 2, 5, 12 o 15) forzado por un módulo. Desconecta el módulo y reinicia.
¿Qué diferencia hay con el pinout del ESP32-S3?
El S3 tiene más GPIO, USB nativo y otros pines de arranque. Está explicado en pines del ESP32-S3.
ESP32 DevKitC WROOM-32
La placa de 38 pines de este diagrama.
Enlace de afiliado: si compras, el sitio recibe una comisión sin costo extra para ti.



