esp32-detalles-hardware-pinout

Pinout y detalles del hardware del ESP32

Si queremos manejar un CPU, lo primero que deberíamos hacer conocer y familiarizarnos con detalles de su hardware.

El ESP32 es una máquina mucho potente Arduino “convencional” o un ESP8266. Ofrece muchos más GPIO, muchas más funcionalidades, y tiene muchos más componentes.

A cambio, también es considerablemente más complejo. Sobre todo por la gran cantidad de opciones de configuración y posibilidades de conexión.

Por tanto vamos a ver un resumen de las principales características del ESP32. Empezamos recordando la tabla de características técnicas del ESP32.

FeatureESP32 Series
Launch year2016
CoreXtensa® dual-/single core 32-bit LX6
Wi-Fi protocols802.11 b/g/n, 2.4 GHz
Bluetooth®Bluetooth v4.2 y BLE
Typical frequency240 MHz (160 MHz for ESP32-S0WD)
SRAM520 KB
ROM448 KB
External flashUp to 16 MB device
External RAMUp to 8 MB device
GPIO34
ADC2x 12-bit
DAC2x 8-bit
Timers4x 64-bit, 3x watchdog
Temperature sensor✖️
SPI4
LCD interface1
UART3
I2C2
I2S2
LED PWM16
Pulse counter8
Touch sensor10
Hall sensor1
Camera interface1

Si estáis usando un ESP32-S3, tenéis un resumen similar en esta entrada Pinout y detalles del hardware del ESP32-S3

Pinout del ESP32

Comenzamos viendo el esquema de patillaje (pinout) de la placa oficial de desarrollo de Espressif para el ESP32, la ESP32 DevKitC.

esp32-devkitc

Ten en cuenta que estas son las características de esta placa en concreto. La que tengáis en vuestro dispositivo dependerá del SoM y la placa de desarrollo que estemos usando.

Si tenéis dudas sobre que es un SoC, un SoM y una placa de desarrollo, consultad esta entrada Qué es un SoC y un SoM

Ante cualquier duda sobre vuestra placa lo mejor es que consultéis la documentación oficial de Espressif y, sobre todo, la información del fabricante del dispositivo.

Aquí os dejo el enlace a la documentación oficial de Espressif sobre la placa Esp32 DevKitc 1.

ESP32-DevKitC V4 Getting Started Guide - ESP32 - — ESP-IDF Programming Guide latest documentation

Multiplexación

La multiplexación de pines es una de las características más importantes y útiles del ESP32.

Básicamente, en el ESP32 podemos resignar la mayoría de las funciones para que actúen en otro pin, sin afectar al rendimiento.

Por lo que, los valores que vamos a ver son los valores por defectos, pero generalmente podrás cambiarlo por otros, según te convenga.

El RTC

El RTC (Real Time Clock) ocupa un lugar fundamental durante los modos de Sleep. El RTC se compone de las siguientes partes:

  • RTC controlador (que incluye timers y periféricos IO)
  • RTC memoria (fast y slow)
  • Ultra Low Power (ULP) coprocessor

El ESP32 cuenta con 8 kB de SRAM en la parte RTC, llamada memoria RTC rápida. Los datos guardados aquí no se borran durante el modo de sueño profundo (deep sleep).

Además hay otros 8kB de SRAM llamados slow memory, que se usan para el procesador ULP.

Pines digitales

Pines GPIO

El ESP32 tiene hasta 34 pines GPIO que pueden asignarse a diferentes funciones mediante la programación.

La mayoría de estos GPIO digitales se pueden configurar con resistencias internas de pull-up o pull-down.

Pines de Configuración (Strapping) del ESP32

Existen cinco pines Strapping.

  • GPIO 0 (debe ser LOW para entrar en modo de arranque)
  • GPIO 2 (debe estar flotante o LOW durante el arranque)
  • GPIO 4
  • GPIO 5 (debe estar HIGH durante el arranque)
  • GPIO 12 (debe ser LOW durante el arranque)
  • GPIO 15 (debe estar en estado ALTO durante el arranque)

Estos pines intervienen en la configuración durante el arranque. Así que evita usarlos en tu proyecto.

Más información en esta entrada leer más ⯈

Pines GPIO de Entrada Únicamente

Estos pines no pueden emplearse como salidas, pero se pueden utilizar como entradas digitales o analógicas, o para otros propósitos.

  • GPIO 34
  • GPIO 35
  • GPIO 36
  • GPIO 39

Además, a diferencia de los otros pines GPIO, carecen de resistencias internas de pull-up y pull-down.

Pines de Interrupción del ESP32

Todos los pines GPIO se pueden configurar como interrupciones.

leer más ⯈

Pines GPIO RTC del ESP32

Algunos GPIO están conectados al subsistema de bajo consumo RTC y se conocen como GPIO RTC

  • RTC_GPIO0 - GPIO 36
  • RTC_GPIO3 - GPIO 39
  • RTC_GPIO4 - GPIO 34
  • RTC_GPIO5 - GPIO 35
  • RTC_GPIO6 - GPIO 25
  • RTC_GPIO7 - GPIO 26
  • RTC_GPIO8 - GPIO 33
  • RTC_GPIO9 - GPIO 32
  • RTC_GPIO10 - GPIO 4
  • RTC_GPIO11 - GPIO 0
  • RTC_GPIO12 - GPIO 2
  • RTC_GPIO13 - GPIO 15
  • RTC_GPIO14 - GPIO 13
  • RTC_GPIO15 - GPIO 12
  • RTC_GPIO16 - GPIO 14
  • RTC_GPIO17 - GPIO 27

Estos pines se utilizan para despertar el ESP32 del modo de bajo consumo profundo cuando el coprocesador de ultra bajo consumo (ULP) está en funcionamiento.

Pines de táctiles (Touch) del ESP32

El ESP32 cuenta con 10 pines GPIO capacitivos de detección táctil.

  • TOUCH0 - GPIO 4
  • TOUCH1 - GPIO 0
  • TOUCH2 - GPIO 2
  • TOUCH3 - GPIO 15
  • TOUCH4 - GPIO 13
  • TOUCH5 - GPIO 12
  • TOUCH6 - GPIO 14
  • TOUCH7 - GPIO 27
  • TOUCH8 - GPIO 33
  • TOUCH9 - GPIO 32

Cuando una carga capacitiva (como un dedo humano) está cerca del pin GPIO, el ESP32-S3 detecta el cambio en la capacitancia.

leer más ⯈

Pin Enable (EN)

Enable (EN) es el pin que controla el regulador de 3V3. Está configurado con una resistencia pull-up, por lo que se conecta a tierra para desactivar el regulador de 3.3V. Por ejemplo, para reiniciar el ESP32.

Pines analógicos

Pines PWM del ESP32

La placa ESP32 tiene 16 canales PWM controlados por un controlador PWM. La salida PWM se puede utilizar para controlar motores y LEDs digitales.

leer más⯈

Pines ADC del ESP32

El ESP32 integra dos ADC y admite mediciones en 18 canales

  • ADC1_CH0 - GPIO 36
  • ADC1_CH1 - GPIO 37
  • ADC1_CH2 - GPIO 38
  • ADC1_CH3 - GPIO 39
  • ADC1_CH4 - GPIO 32
  • ADC1_CH5 - GPIO 33
  • ADC1_CH6 - GPIO 34
  • ADC1_CH7 - GPIO 35
  • ADC2_CH0 - GPIO 4
  • ADC2_CH1 - GPIO 0
  • ADC2_CH2 - GPIO 2
  • ADC2_CH3 - GPIO 15
  • ADC2_CH4 - GPIO 13
  • ADC2_CH5 - GPIO 12
  • ADC2_CH6 - GPIO 14
  • ADC2_CH7 - GPIO 27
  • ADC2_CH8 - GPIO 25
  • ADC2_CH9 - GPIO 26

Los ADC son de 12 bits, por lo que disponemos de 4096 (2^12) niveles discretos, lo que se traduce en una precisión de 0.8mV.

leer más ⯈

Pines DAC del ESP32

El ESP32 incluye dos canales DAC para convertir señales digitales en voltajes analógicos.

  • DAC1 - GPIO 25
  • DAC2 - GPIO 26

Estos DAC tienen una resolución de 8 bits, lo que significa que los valores que van desde 0 hasta 255 se convierten en un voltaje analógico que va desde 0 hasta 3.3V.

leer más ⯈

Pines de comunicación

Pines UART del ESP32

La placa de desarrollo ESP32-S3 tiene tres interfaces UART: UART0, UART1 y UART2, que admiten comunicación asíncrona (RS232 y RS485) e IrDA de hasta 5 Mbps.

Los pines UART0 están conectados al convertidor USB a serie y se utilizan para la programación y depuración. No se recomienda utilizar los pines UART0.

Por otro lado, el UART están reservados para el chip de memoria FLASH integrado. Los pines UART1 están reservados para el chip de memoria flash integrado.

Por lo que lo mejor es usar el UART2 es una opción segura para conectar dispositivos UART.

leer más ⯈

Pines I2C del ESP32

El ESP32 dispone de un bus I2C único que permite conectar hasta 112 sensores y periféricos. Los pines SDA y SCL están asignados por defecto a los siguientes pines.

  • SDA - GPIO 21
  • SCL - GPIO 22

Sin embargo, es posible utilizar cualquier pin GPIO para implementar el protocolo I2C mediante el comando wire.begin(SDA, SCL).

leer más ⯈

Pines SPI del ESP32

El ESP32 cuenta con tres interfaces SPI (SPI, HSPI y VSPI). Solo las interfaces VSPI y HSPI son interfaces SPI utilizables, y el tercer bus SPI se utiliza para la memoria flash integrada.

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

Los pines VSPI son comúnmente utilizados en bibliotecas estándar.

leer más ⯈

SPI FLASH

Estos pines están conectados a la memoria flash SPI integrada en el chip ESP32-S3. No utilices estos pines en tus proyectos.

  • GPIO 6 (SCK/CLK)
  • GPIO 7 (SDO/SD0)
  • GPIO 8 (SDI/SD1)
  • GPIO 9 (SHD/SD2)
  • GPIO 10 (SWP/SD3)
  • GPIO 11 (CSC/CMD)