Diagrama de pines
Pines de ESP32 DevKit V1 (30 pines)

Pines
- EN
- VP — G36
- VN — G39
- D34 — G34
- D35 — G35
- D32 — G32
- D33 — G33
- D25 — DAC1
- D26 — DAC2
- D27
- D14
- D12
- GND
- D13
- VIN
- D23 — COPI
- D22 — SCL
- TX0 — G1
- RX0 — G3
- D21 — SDA
- D19 — CIPO
- D18 — SCK
- D5 — SS
- TX2 — G17
- RX2 — G16
- D4
- D2 — LED
- D15
- GND
- 3V3
Especificaciones
| Módulo | ESP32-WROOM-32 |
|---|---|
| CPU | Xtensa LX6 de doble núcleo, hasta 240 MHz |
| SRAM | 520 KB |
| Memoria flash | 4 MB (SPI externa) |
| Alimentación | 5 V por USB o VIN, regulador de 3.3 V en placa |
| Nivel lógico | 3.3 V (no tolera 5 V) |
| GPIO en el cabezal | 25 (GPIO34–39 solo entrada) |
| Corriente por GPIO | 40 mA de fuente / 28 mA de sumidero máx. por pin |
| ADC | SAR de 12 bits; ADC1 utilizable con Wi-Fi, ADC2 no |
| DAC | 2 × 8 bits (GPIO25, GPIO26) |
| Wi-Fi | 802.11 b/g/n, 2.4 GHz |
| Bluetooth | v4.2 Classic + BLE |
| USB | Micro-USB, USB-serie CP2102 o CH340 (varía según el clon) |
Arranque y pines de configuración
- GPIO12 (D12) es el que realmente bloquea el arranque: selecciona la tensión de alimentación del propio chip flash, y si está a nivel ALTO en el reset cambia esa línea a 1.8V — un chip flash estándar de 3.3V no se puede leer a esa tensión, así que la placa nunca arranca. Deja que lo que esté conectado a D12 quede flotante o lea nivel bajo al encender.
- GPIO15 (D15) solo controla si el bootloader de la ROM imprime su log de arranque por el puerto serie USB — a nivel BAJO en el reset silencia ese log, nada más. Si un cable en D15 parece detener la placa, mira el monitor serie antes de suponer una avería real.
- GPIO0, el pin detrás del botón BOOT de la placa, ni siquiera sale a un pin del cabezal en esta disposición de 30 pines. Mantener BOOT mientras pulsas EN baja a la vez GPIO0 y GPIO2, que es lo que realmente pone el chip en modo de grabación.
- GPIO2 (D2, también el LED de la placa en la mayoría de ellas) solo importa junto con GPIO0 al entrar en ese modo de grabación — no interviene en un arranque normal, así que conectar ahí un LED (su uso habitual) es seguro.
- GPIO5 (D5) es técnicamente un quinto pin de configuración, pero solo fija una opción de temporización de reloj del esclavo SDIO que esta placa nunca usa en un sketch normal de Arduino/ESP-IDF — de los cinco, es el que menos probabilidades tiene de causar un problema real.
Notas
- GPIO6–11 se conectan a la propia flash SPI del módulo y no salen a pines del cabezal en esta disposición de 30 pines — si un diagrama los muestra, es otra placa (normalmente de 38 pines), no esta.
- La lógica es solo de 3.3V. VIN/5V alimenta el regulador de la placa que baja a 3.3V; el propio chip ESP32 no tolera 5V en ningún GPIO.
- GPIO34, GPIO35, GPIO36 (VP) y GPIO39 (VN) son solo de entrada — sin driver de salida y sin pull-up/pull-down interno, así que uno sin conectar queda flotante y necesita su propia resistencia externa.
- ADC2 cubre GPIO0, 2, 4, 12, 13, 14, 15, 25, 26 y 27 — los diez dejan de dar lecturas útiles en cuanto el Wi-Fi está activo, ya que la radio y ADC2 comparten hardware. ¿Necesitas una lectura analógica con Wi-Fi? Usa un pin de ADC1 — en esta placa, VP/VN/D34/D35/D32/D33.
- No hay una numeración estándar "pin 1 a 30" para esta placa: los clones genéricos no coinciden en la disposición, y todas las referencias — incluida la serigrafía de la propia placa — solo nombran los pines por su número de GPIO.
- EN es el pin de reset activo a nivel bajo — ponlo brevemente a GND para reiniciar el chip en el circuito, el mismo papel que cumple RESET en una placa AVR.
- El regulador de la placa que baja VIN/5V a 3.3V suele estar especificado como mucho para unos cientos de mA (normalmente un AMS1117 o similar en esta clase de placa — comprueba el tuyo), mientras que el propio ESP32 puede pedir picos de corriente momentáneos de unos cientos de mA durante una ráfaga de transmisión Wi-Fi. Un cable/puerto USB débil más un regulador justo es la causa clásica de una placa que se reinicia al azar precisamente cuando el Wi-Fi está activo, y en ningún otro momento — un síntoma que parece un fallo de código pero en realidad es un problema de alimentación.







