CENTRO DE ENSEÑANZA TÉCNICA Y SUPERIOR
Escuela de Ingeniería
Microcontroladores y Sistemas Embebidos
Actividad de Aprendizaje: Explorando el ESP32
Presenta:
Mexicali, B.C. a 27 de mayo del 2020.
Tabla de contenido
Parte 1: Arquitectura del ESP32................................................................................................................ 2
Componentes clave de la arquitectura del ESP32................................................................................... 2
Ventajas del sistema dual-core en comparación con un microcontrolador de un solo núcleo.................3
Parte 2: Recursos del Microcontrolador.................................................................................................... 4
Periféricos integrados en el ESP32 y su utilidad en proyectos IoT.........................................................4
Diferencia entre la memoria Flash y la memoria RAM en el ESP32......................................................5
Parte 3: Lenguajes de Programación e IDEs.............................................................................................6
Lenguajes de programación compatibles con el ESP32 y sus ventajas/desventajas............................... 6
¿Qué IDE se utiliza comúnmente para programar el ESP32 con Arduino y MicroPython?...................6
Parte 4: Familias del ESP32 y Pinout.........................................................................................................7
Características de familias del ESP32..................................................................................................... 7
Diagrama de pines (pinout) del ESP32 DevKit.......................................................................................8
Parte 5: Simulación en WOKWI................................................................................................................ 9
Proyecto en WOKWI...............................................................................................................................9
Cómo configuramos el código para leer datos del sensor y mostrarlos en el monitor serial.................. 9
Enlace del proyecto simulado y el código fuente.................................................................................. 11
Referencias..................................................................................................................................................12
1
Actividad de Aprendizaje: Explorando el ESP32
Objetivo: Profundizar en el conocimiento técnico del microcontrolador ESP32, sus
recursos, lenguajes de programación, entornos de desarrollo, familias y simulación.
Parte 1: Arquitectura del ESP32
Componentes clave de la arquitectura del ESP32
El ESP32 es un microcontrolador de alto rendimiento desarrollado por Espressif Systems.
Su arquitectura está basada en un sistema SoC (System on Chip), lo que significa que incluye
múltiples funciones integradas en un único chip. Entre sus componentes clave destacan:
1. Núcleos de procesamiento (Dual-Core Xtensa LX6): El ESP32 posee dos núcleos que
pueden operar de forma independiente o conjunta. Cada uno puede funcionar a velocidades
de hasta 240 MHz, permitiendo realizar múltiples tareas en paralelo, ideal para aplicaciones
complejas como el IoT, el procesamiento de señales y la conectividad en tiempo real.
2. Unidades de comunicación: Una de las características más destacadas del ESP32 es su
capacidad de conectividad integrada. Incluye:
- Wi-Fi 802.11 b/g/n: Integrado en el chip, permite conexiones a redes locales e internet.
- Bluetooth 4.2: Con soporte para modo clásico (BR/EDR) y de bajo consumo (BLE).
Proporciona capacidades de comunicación inalámbrica a corta distancia, ampliando las
posibilidades en dispositivos portátiles y wearables.
- UART, SPI, I2C, CAN, I2S: Interfaces de comunicación serie esenciales para conectar
sensores, pantallas, módulos y otros dispositivos periféricos.
3. Memorias:
- RAM: El ESP32 cuenta con 520 KB de SRAM, dividida en memoria principal (320 KB)
y memoria adicional para operaciones de bajo consumo (200 KB). Se utiliza para el
almacenamiento temporal de variables y ejecución de código.
2
- Flash: Memoria externa, almacena el firmware y los programas de manera no volátil.
Dependiendo del modelo, puede variar desde 4 MB hasta 16 MB.
- RTC Memory: Módulo de reloj en tiempo real con consumo ultra bajo, permite mantener
funciones de cronometraje durante el modo de sueño profundo.
4. Coprocesador Ultra Low Power (ULP): Este coprocesador permite realizar tareas básicas
(como lectura de sensores) mientras los núcleos principales están en reposo, reduciendo el
consumo de energía en aplicaciones con batería.
5. Convertidores Analógico-Digital (ADC) y Digital-Analógico (DAC): Proveen conversión
de señales analógicas a digitales y viceversa, esenciales en la lectura de sensores y control
de dispositivos.
6. Periféricos Integrados: El ESP32 incluye una amplia gama de interfaces como ADC
(convertidor analógico a digital), DAC (convertidor digital a analógico), PWM
(modulación por ancho de pulso), I2C, SPI y UART. Estos módulos permiten que el ESP32
interactúe con una variedad de sensores, actuadores y dispositivos externos.
Ventajas del sistema dual-core en comparación con un microcontrolador de un solo núcleo
El sistema dual-core del ESP32 representa una ventaja significativa sobre los
microcontroladores tradicionales de un solo núcleo, especialmente en aplicaciones complejas y
multitarea. Las principales ventajas incluyen:
- Paralelismo verdadero: Permite ejecutar dos hilos o tareas completamente independientes
de manera simultánea. Por ejemplo, uno de los núcleos puede dedicarse exclusivamente a
manejar la conectividad Wi-Fi o Bluetooth, mientras que el otro se encarga del
procesamiento lógico o interacción con sensores.
3
- Mejor rendimiento multitarea: En entornos con RTOS (sistemas operativos en tiempo
real), como FreeRTOS (integrado en el ESP32), se puede asignar una CPU para tareas de
alto rendimiento y otra para tareas menos críticas, mejorando la eficiencia general.
- Menor latencia en tareas críticas: Con un solo núcleo, las interrupciones y cambios de
contexto pueden provocar retardos. Al distribuir tareas entre dos núcleos, se reducen
significativamente los tiempos de espera, aumentando la capacidad de respuesta del
sistema, crucial en sistemas de automatización y robótica.
- Mayor eficiencia energética relativa: Aunque tiene dos núcleos, el ESP32 está optimizado
para apagar uno de ellos (modo sleep) si no es necesario, permitiendo balancear entre
rendimiento y consumo energético.
Parte 2: Recursos del Microcontrolador
Periféricos integrados en el ESP32 y su utilidad en proyectos IoT
A continuación se destacan cinco periféricos fundamentales del ESP32 y su utilidad práctica:
1. Módulo Wi-Fi: Es la pieza clave para conectar el ESP32 a internet. Permite enviar y recibir
datos de servidores, aplicaciones web, plataformas en la nube o bases de datos. En
aplicaciones IoT, esto permite crear sistemas de monitoreo remoto, automatización del
hogar, o recopilación de datos ambientales.
2. Bluetooth/BLE: Ideal para la comunicación inalámbrica a corta distancia sin necesidad de
acceso a internet. BLE, en particular, es muy eficiente en términos de consumo energético,
lo que lo hace ideal para dispositivos portátiles, como relojes inteligentes o sensores
corporales.
3. ADC (Convertidor Analógico a Digital): Muchos sensores (temperatura, luz, gas, etc.)
entregan señales analógicas. El ADC permite al ESP32 convertir estas señales en valores
4
digitales para ser procesados. Por ejemplo, puede leer el voltaje de un sensor de humedad
del suelo para decidir si activar un sistema de riego.
4. PWM (Modulación por Ancho de Pulso): Se usa principalmente para controlar la
intensidad de luces, la velocidad de motores y servomotores. En IoT, esto es útil para crear
interfaces luminosas, control de ventiladores, robótica doméstica o actuadores inteligentes.
5. Capacitive Touch Sensors: El ESP32 permite usar ciertos pines como sensores táctiles sin
necesidad de componentes externos. Esto abre la posibilidad de crear interfaces de usuario
simples, como paneles táctiles para controlar luces o activar dispositivos.
Diferencia entre la memoria Flash y la memoria RAM en el ESP32
La memoria RAM (SRAM) y la memoria Flash en el ESP32 tienen propósitos muy
diferentes y complementarios:
- La RAM es una memoria volátil, lo que significa que pierde su contenido cuando el
dispositivo se apaga o reinicia. Se usa durante la ejecución del programa para almacenar
variables, estructuras de datos, pilas de ejecución y buffers temporales. Su ventaja
principal es su rapidez, lo que permite un procesamiento eficiente y fluido de las
operaciones en tiempo real.
- La memoria Flash, en cambio, es no volátil (conserva los datos incluso sin alimentación
eléctrica). Es más lenta que la RAM pero sigue siendo suficiente para operaciones de
lectura / escritura. Se utiliza para almacenar el firmware (programa principal) y cualquier
archivo que deba persistir entre reinicios, como configuraciones o bases de datos locales.
En resumen, la RAM trabaja durante la ejecución, mientras que la Flash se usa para
almacenar el programa y datos que deben mantenerse entre encendidos. Esta separación permite
que el ESP32 trabaje de forma eficiente y confiable.
5
Parte 3: Lenguajes de Programación e IDEs
Lenguajes de programación compatibles con el ESP32 y sus ventajas/desventajas
La flexibilidad del ESP32 se refleja en la variedad de lenguajes de programación con los
que puede ser utilizado. Esta característica lo hace accesible tanto para principiantes como para
desarrolladores experimentados. Lenguajes compatibles con el ESP32:
C/C++ (Arduino Framework): Es el lenguaje más común, especialmente cuando se usa
el ESP32 con el entorno de Arduino. Permite un control preciso del hardware, acceso a
bibliotecas muy amplias y una comunidad de usuarios muy activa. Sin embargo, requiere mayor
conocimiento en la gestión de memoria y estructuras de bajo nivel.
MicroPython: Un lenguaje interpretado derivado de Python, diseñado específicamente
para microcontroladores. Su sintaxis es sencilla, clara y perfecta para quienes no tienen
experiencia con lenguajes compilados. Su principal desventaja es el menor rendimiento en
comparación con C/C++, así como la menor disponibilidad de bibliotecas.
JavaScript (Espruino): Aunque menos popular, JavaScript también puede usarse para
programar el ESP32 mediante plataformas como Espruino. Es ideal para desarrolladores con
experiencia en desarrollo web. La desventaja principal es su rendimiento limitado y menor
soporte en comparación con MicroPython o C/C++.
¿Qué IDE se utiliza comúnmente para programar el ESP32 con Arduino y MicroPython?
1. Arduino IDE: Muy popular por su sencillez. Compatible con Windows, Mac y Linux,
permite cargar programas a la placa con facilidad. Ideal para usuarios nuevos o proyectos
rápidos, ya que es fácil de instalar y usar, con muchas bibliotecas integradas.
6
2. VS Code + PlatformIO: Ofrece características avanzadas como autocompletado,
depuración y gestión de librerías. Soporte para múltiples plataformas (Arduino, ESP-IDF,
MicroPython).
3. Thonny (para MicroPython): Permite escribir, cargar y depurar código fácilmente desde
una interfaz gráfica. IDE ligero con soporte para REPL (Read-Eval-Print Loop), útil para
probar código rápidamente.
Parte 4: Familias del ESP32 y Pinout
Características de familias del ESP32
El ESP32 se presenta en diferentes versiones o "familias", cada una adaptada a
necesidades específicas. Dos ejemplos representativos son:
ESP32-WROOM-32: Esta es una de las versiones más comunes. Incorpora todas las
características generales del ESP32, incluyendo Wi-Fi, Bluetooth, múltiples GPIOs, y un formato
compacto. Es ideal para proyectos generales de IoT, automatización, y sistemas embebidos que
no requieren imagen o cámara.
ESP32-CAM: Esta versión añade una cámara integrada (normalmente OV2640) y una
ranura para tarjeta microSD, lo que permite capturar imágenes, almacenarlas o enviarlas por
internet. Aunque tiene menos pines disponibles debido al uso interno de algunos para la cámara,
es ideal para vigilancia, visión computacional o sistemas de reconocimiento facial.
Característica ESP32-WROOM-32 ESP32-CAM ESP32-S3
Núcleo (s) Dual-Core Xtensa LX6 Dual-Core Xtensa LX6 Dual-Core Xtensa LX7
(240 MHz) (240 MHz) (240 MHz)
Conectividad Wi-Fi 4 (802.11 b/g/n), BT Wi-Fi 4 (802.11 b/g/n), BT Wi-Fi 4 (802.11 b/g/n), BT
4.2 4.2 5.0
Cámara integrada No Sí (OV2640, 2 MP) No (pero soporta interfaz
paralela)
7
GPIOs disponibles 34 (18 con funciones ~16 (limitados por 45 (20 con funciones
especiales) conexión a cámara) especiales)
Memoria FLash 4 MB (típico) 4 MB 8 MB (ampliable a 16
MB)
RAM 520 KB 520 KB 512 KB + 320 KB ROM
Periféricos especiales ADC, DAC, PWM, Touch ADC, PWM + Interfaz USB OTG, LCD Interface,
cámara AI Accelerator
Aplicaciones típicas IoT general, domótica, Visión artificial, Edge AI, HMI, wearables
automatización vigilancia, AIoT avanzados
Limitación principal Sin interfaz USB nativa GPIOs limitados Mayor complejidad de
diseño
Diagrama de pines (pinout) del ESP32 DevKit
Imagen 1: Guía de referencia del mapeo de pines de DevKitC del ESP32-S3
Pin GPIO12. Es un pin de propósito general. Puede funcionar como entrada, salida
digital, PWM, o entrada analógica. Sin embargo, es importante tener cuidado con este pin
durante el arranque, ya que si está en estado alto puede interferir con el proceso de boot.
Pin VIN. Es la entrada de voltaje principal. Se conecta una fuente externa (normalmente
de 5V) para alimentar la placa. También puede proporcionar salida de voltaje desde el USB.
Pin GND. Proporciona el referencial de 0V (tierra común) para completar circuitos.
Todos los componentes deben compartir esta referencia para funcionar correctamente.
8
Pin EN (Enable). Este pin está conectado al chip de habilitación. Si se pone en estado
bajo, reinicia el ESP32. Se puede usar con un botón de reinicio externo.
Pin 3V3. Es una salida de 3.3V regulados. Puede usarse para alimentar sensores o
módulos externos de bajo consumo.
Parte 5: Simulación en WOKWI
Proyecto en WOKWI
1. Elementos:
- Microcontrolador ESP32
- LED conectado al GPIO2
- Sensor de temperatura DHT22
2. Configuración en WOKWI:
- Conectar LED al pin GPIO2.
- Conectar DHT22: DATA al GPIO4, VCC a 3.3V, GND a GND.
3. Objetivo: Crear una proyecto en WOKWI que incluya los elementos mencionados
anteriormente y configurar el código para leer datos del sensor de temperatura y que los
pueda mostrar en el monitor serial.
Cómo configuramos el código para leer datos del sensor y mostrarlos en el monitor serial
1. Inclusión de la librería del sensor: Es necesaria para interactuar con sensores DHT
(DHT11 o DHT22). Sin esta librería, el ESP32 no podría comunicarse con el sensor.
2. Definición del pin y tipo del sensor: Estas directivas indican en qué pin está conectado el
sensor (en este caso, GPIO4), y de qué tipo es el sensor. Esto es importante porque el
9
código interno de la librería necesita saber si debe tratar los datos como los de un DHT11
o un DHT22 (que tienen diferentes precisiones y tiempos de respuesta).
3. Creación del objeto sensor: Se crea una instancia del sensor llamada dht, que se usará
más adelante para inicializarlo y para leer datos de temperatura.
4. Inicialización del sensor y del monitor serial: [Link](115200) configura el ESP32
para comunicarse con el monitor serial (como una terminal en tu computadora o Wokwi).
[Link]() inicializa el sensor, preparando la librería para que pueda leer datos.
5. Lectura de datos y envío al monitor serial:
- [Link]() obtiene el valor actual de temperatura.
- isnan(temp) verifica si el dato es válido. Si no lo es, se muestra un error.
- [Link]() y [Link]() envían los datos al monitor serial, donde se pueden
leer como texto.
10
Enlace del proyecto simulado y el código fuente
Enlace del proyecto simulado: [Link]
Imagen 2: Configuración del circuito usado Imagen 3: Resultados de la simulación mostrados
en la simulación de WOKWI. en el monitor serial.
Transcripción del código en WOKWI:
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define LEDPIN 2
DHT dht(DHTPIN, DHTTYPE);
void setup() {
[Link](115200);
[Link]();
pinMode(LEDPIN, OUTPUT);
}
void loop() {
float temp = [Link]();
if (!isnan(temp)) {
[Link]("Temperatura: ");
[Link](temp);
[Link](" °C");
} else {
[Link]("Error al leer del sensor DHT11");
}
digitalWrite(LEDPIN, HIGH);
delay(500);
digitalWrite(LEDPIN, LOW);
delay(500);
}
11
Referencias
Espressif Systems. (2022). ESP32 Series Datasheet. Espressif.
[Link]
OpenELab. (n.d.). What is the difference between ESP32 and ESP32-WROOM?
[Link]
Pinillos, J. M. (2020, mayo 7). Básicos ESP32: Mapeo de pines y sensores internos. Tecnotizate.
[Link]
Slideshare. (n.d.). Diferencia entre procesadores de un solo núcleo, doble núcleo y cuádruple
núcleo [Presentación]. SlideShare.
[Link]
between-single-core-dual-core-and-quad-core-processors/57462377&hl=es&sl=en&tl=es
&client=sge
Santos, R. (2021). ESP32 SPI Communication with Arduino IDE (ESP32 as Master & Slave).
Random Nerd Tutorials.
[Link]
nication-arduino/&hl=es&sl=en&tl=es&client=sge
12