La ESP32 es una potente herramienta para proyectos de electrónica e IoT gracias a su capacidad para manejar tareas simultáneas mediante programación multihilo. Este microcontrolador cuenta con un procesador de dos núcleos que permite dividir eficientemente los procesos, logrando que aplicaciones complejas como la sensorización y el envío de datos a la nube funcionen de manera fluida y eficiente.
¿Qué es la Multitarea en la ESP32?
La multitarea consiste en ejecutar varios procesos al mismo tiempo, aprovechando los recursos disponibles. La ESP32 cuenta con un procesador de dos núcleos, llamados PRO_CPU y APP_CPU, que pueden operar de manera independiente o en conjunto. Esto permite asignar tareas específicas a cada núcleo, como sensar datos en uno mientras el otro se encarga de transmitirlos a la nube o ejecutar cálculos complejos.
Ventajas de la Multitarea en Proyectos IoT
1. Mayor eficiencia: Los procesos se ejecutan simultáneamente, reduciendo el tiempo de respuesta.
2. Optimización de recursos: Cada núcleo puede especializarse en tareas específicas, maximizando el rendimiento.
3. Aplicaciones más complejas: Permite crear sistemas IoT avanzados, como redes de sensores o dispositivos inteligentes.
Programación de ESP32 Para Ejecutar Multitareas [PARTE 1]
Programar ESP32 Para Ejecutar Multitareas [PARTE 2]
Aquí les comparto también el código utilizado en el ejemplo, recuerda que puedes tenerlo como modelo para que implementes tus proyectos.
Preparativos para
la Programación Multitarea
1. Herramientas Necesarias
- Una ESP32
(preferiblemente un modelo DevKit).
- Software de
programación como el Arduino IDE o PlatformIO.
- Conexión a
internet para realizar pruebas con servicios en la nube.
2. Instalar
Librerías y Configuración
- Descarga e
instala las librerías de la ESP32 en tu entorno de desarrollo.
- Configura el
puerto COM correcto para tu ESP32 y asegúrate de que el controlador esté
instalado.
Programación Multitarea en la ESP32
La multitarea en la
ESP32 se puede manejar utilizando el sistema operativo FreeRTOS, que está
integrado en su firmware. FreeRTOS permite crear "hilos" o
"tareas" que se ejecutan de manera concurrente.
Ejemplo Básico de Multitarea
#include <Arduino.h>
// Definimos las
tareas para cada núcleo
void
Task1(void *pvParameters) {
for (;;) {
Serial.println("Tarea
1 ejecutándose en PRO_CPU");
delay(1000); // Simula una tarea como sensar datos
}
}
void
Task2(void *pvParameters) {
for (;;) {
Serial.println("Tarea
2 ejecutándose en APP_CPU");
delay(1500); // Simula una tarea como enviar datos a la nube
}
}
void setup() {
Serial.begin(115200);
// Crear
tareas en núcleos diferentes
xTaskCreatePinnedToCore(Task1,
"Tarea 1", 1000, NULL, 1, NULL, 0); // Núcleo 0
xTaskCreatePinnedToCore(Task2, "Tarea 2", 1000, NULL, 1, NULL, 1); //
Núcleo 1
}
void loop() {
// El loop
principal puede quedar vacío o ejecutar tareas de baja prioridad
}
Explicación del
Código
1.
xTaskCreatePinnedToCore: Esta
función asigna una tarea a un núcleo específico.
2. Núcleo 0 y
Núcleo 1: Se
utilizan para dividir las tareas entre el PRO_CPU y el APP_CPU.
3. Simulación: Cada tarea imprime un mensaje para
verificar su ejecución en paralelo.
Aplicaciones Avanzadas con IoT
División de Tareas
en Proyectos IoT
1. Núcleo 0: Sensar
datos de sensores como temperatura, humedad o presión.
2. Núcleo 1:
Procesar y enviar los datos a plataformas en la nube como Firebase, AWS o
Google Cloud.
Ejemplo con Sensor
DHT11 y Envío a Firebase
Puedes integrar un sensor DHT11 para medir temperatura y humedad, mientras el segundo núcleo transmite los datos a Firebase. Esto mejora la eficiencia y evita retrasos en la transmisión de datos.
Optimización y Buenas Prácticas
1.
Prioridades: Asigna
prioridades a las tareas para garantizar que procesos críticos tengan
preferencia.
2. Uso de
memoria: Monitorea
el consumo de memoria para evitar desbordamientos.
3. Pruebas: Realiza pruebas exhaustivas para
garantizar que las tareas no interfieran entre sí.
La capacidad
multitarea de la ESP32 abre un mundo de posibilidades para proyectos IoT,
permitiendo desarrollar aplicaciones complejas y eficientes. Ya sea que estés
trabajando en redes de sensores o dispositivos inteligentes, la división de
tareas entre los núcleos de la ESP32 te ayudará a optimizar tus
proyectos.