Aprende a utilizar el dual core de ESP32 con FreeRTOS en Arduino IDE. Crea tareas independientes para cores 0 y 1, ejemplo práctico con LEDs y evita errores comunes.
Última actualización: 27 de diciembre de 2025
En el mundo de los proyectos IoT, el ESP32 dual core ofrece una oportunidad única para optimizar el rendimiento mediante la gestión eficiente de tareas en dos núcleos independientes.
Qué aprenderás
- Usar el sistema de tareas FreeRTOS en ESP32
- Configurar tareas para el core 0 y core 1
- Implementar ejemplos prácticos con LEDs
- Evitar errores comunes en la configuración
Contexto rápido
La mayoría de modelos de ESP32 son dual-core, pero los sketches en Arduino IDE ejecútan por defecto en el core 1. Para aprovechar el segundo núcleo (core 0), es necesario crear tareas con FreeRTOS.
Paso a paso
- Selecciona el correcto board y puerto COM en el IDE Arduino
- Incluye la librería FreeRTOS en el proyecto
- Usa la función xTaskCreatePinnedToCore para asignar tareas a cores específicos
- Implementa el código de ejemplo con LEDs para cada core
- Verifica el comportamiento en la interfaz serial
Ejemplo práctico
El siguiente código crea dos tareas que encienden y apagan LEDs con intervalos diferentes:
#include <Arduino.h>
#include <FreeRTOS.h>
void Task1(void *param) {
pinMode(2, OUTPUT);
for (;;) {
digitalWrite(2, HIGH);
vTaskDelay(1000 / portTICK_PERIOD_MS);
digitalWrite(2, LOW);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void Task2(void *param) {
pinMode(3, OUTPUT);
for (;;) {
digitalWrite(4, HIGH);
vTaskDelay(700 / portTICK_PERIOD_MS);
digitalWrite(4, LOW);
vTaskDelay(700 / portTICK_PERIOD_MS);
}
}
void setup() {
Serial.begin(115200);
xTaskCreatePinnedToCore(Task1, "Task1", 100, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(Task2, "Task2", 100, NULL, 1, NULL, 1);
}
void loop() {}
Errores comunes y cómo evitarlos
- Uso incorrecto de xTaskCreatePinnedToCore: Verifica la documentación oficial para los parámetros
- Configuración de cores no asignados: Asegúrate de que el core 0 esté disponible
- Retrasos en tareas: Usa vTaskDelay con la frecuencia adecuada
Variantes y mejoras
- Implementar semáforos para sincronización entre tareas
- Usar colas para comunicación inter-tarea
- Integrar sensores en una tarea dedicada
Checklist final
- Verificar el modelo de ESP32 (dual core)
- Configurar el puerto COM correctamente
- Incluir la librería FreeRTOS
- Asignar tareas a cores específicos
- Probar con LEDs básicos