Aziz Bench

Pinout ESP32: qué GPIO usar y cuáles evitar

Toca un pin para ver qué puede hacer y qué hay que vigilar. Luego anota los pines de tu proyecto: el planificador señala los pines de strapping, los GPIO de solo entrada y los pines ADC2 que dejan de funcionar con el WiFi.

Pinout Raspberry Pi Pico →
  • Libre
  • Con cuidado
  • Solo entrada
  • No usar
  • Alimentación y control
Proyecto

Los pines ADC2 dejan de funcionar mientras el WiFi está encendido.

Añadir pin

Mi plan de pines

    Todavía no hay pines. Elige uno en el mapa o añádelo con el formulario.

    Listo para pegar al principio de un sketch o en una issue.

    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.

    GPIOValor en el resetQué eligeEn la práctica
    0Pull-up (ALTO)Modo de arranque: ALTO ejecuta el programa, BAJO entra en modo de descargaNada debe mantenerlo en BAJO al encender
    2Pull-down (BAJO)Debe estar en BAJO o sin conectar para el modo de descargaSin pull-up; a menudo es el LED de la placa
    5Pull-up (ALTO)Temporización SDIO esclavo, junto con GPIO15Sirve para casi todo
    12Pull-down (BAJO)Tensión de la flash: BAJO 3,3 V, ALTO 1,8 VNunca en ALTO durante el reset
    15Pull-up (ALTO)Log de arranque por UART0: ALTO lo imprime, BAJO lo silenciaSeguro; 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

    GPIOEstadoADCTáctilRTCNotas
    GPIO0Con cuidadoADC2_CH1T1RTC_GPIO11strapping
    GPIO1 (TX)Con cuidado———USB-serie, UART0 TX
    GPIO2Con cuidadoADC2_CH2T2RTC_GPIO12strapping, LED en algunas placas
    GPIO3 (RX)Con cuidado———USB-serie, UART0 RX
    GPIO4LibreADC2_CH0T0RTC_GPIO10—
    GPIO5Con 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
    GPIO12Con cuidadoADC2_CH5T5RTC_GPIO15strapping, HSPI MISO
    GPIO13LibreADC2_CH4T4RTC_GPIO14HSPI MOSI
    GPIO14LibreADC2_CH6T6RTC_GPIO16posible actividad al arrancar, HSPI SCK
    GPIO15Con cuidadoADC2_CH3T3RTC_GPIO13strapping, HSPI SS
    GPIO16Libre———PSRAM en WROVER, RX2/TX2 en algunas placas
    GPIO17Libre———PSRAM en WROVER, RX2/TX2 en algunas placas
    GPIO18Libre———VSPI SCK
    GPIO19Libre———VSPI MISO
    GPIO21Libre———I2C SDA
    GPIO22Libre———I2C SCL
    GPIO23Libre———VSPI MOSI
    GPIO25LibreADC2_CH8—RTC_GPIO6—
    GPIO26LibreADC2_CH9—RTC_GPIO7—
    GPIO27LibreADC2_CH7T7RTC_GPIO17—
    GPIO32LibreADC1_CH4T9RTC_GPIO9cristal de 32 kHz
    GPIO33LibreADC1_CH5T8RTC_GPIO8cristal de 32 kHz
    GPIO34Solo entradaADC1_CH6—RTC_GPIO4solo entrada
    GPIO35Solo entradaADC1_CH7—RTC_GPIO5solo entrada
    GPIO36 (VP)Solo entradaADC1_CH0—RTC_GPIO0solo entrada
    GPIO39 (VN)Solo entradaADC1_CH3—RTC_GPIO3solo 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.