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 que un 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.
Feature | ESP32 Series |
---|---|
Launch year | 2016 |
Core | Xtensa® dual-/single core 32-bit LX6 |
Wi-Fi protocols | 802.11 b/g/n, 2.4 GHz |
Bluetooth® | Bluetooth v4.2 y BLE |
Typical frequency | 240 MHz (160 MHz for ESP32-S0WD) |
SRAM | 520 KB |
ROM | 448 KB |
External flash | Up to 16 MB device |
External RAM | Up to 8 MB device |
GPIO | 34 |
ADC | 2x 12-bit |
DAC | 2x 8-bit |
Timers | 4x 64-bit, 3x watchdog |
Temperature sensor | ✖️ |
SPI | 4 |
LCD interface | 1 |
UART | 3 |
I2C | 2 |
I2S | 2 |
LED PWM | 16 |
Pulse counter | 8 |
Touch sensor | 10 |
Hall sensor | 1 |
Camera interface | 1 |
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.
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 :::link Más información en este artículo :::
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.
Más información en este artículo
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.
Más información en este artículo
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.
Más información en este artículo
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.
Más información en este artículo
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.
Más información en este artículo
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.
Más información en este artículo
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).
Más información en este artículo
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.
SPI | MOSI | MISO | CLK | CS |
---|---|---|---|---|
VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 5 |
HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 15 |
Los pines VSPI son comúnmente utilizados en bibliotecas estándar.
Más información en este artículo
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)