¿Por qué FreeRTOS en ESP32?
El ESP32 tiene dos núcleos Xtensa LX6, pero si solo usas Arduino IDE con el loop() estándar, solo aprovechas uno. FreeRTOS (Free Real-Time Operating System) viene integrado en el framework del ESP32 para Arduino y permite crear múltiples tareas que corren en paralelo, cada una con su propia prioridad y stack de memoria.
Conceptos básicos de FreeRTOS
- Task: Una función que corre "independientemente" de otras tareas
- Scheduler: El sistema que decide qué tarea corre en cada instante
- Priority: Número de 0 a 25; mayor número = mayor prioridad
- Stack: Memoria asignada a cada tarea (en bytes)
- Core: En ESP32 puedes fijar cada tarea al Core 0 o Core 1
Crear tareas en ESP32
xTaskCreatePinnedToCore(funcion, "nombre", 10000, NULL, 1, &handle, 0) crea una tarea en el Core 0. El Core 1 es el que usa el loop() de Arduino normalmente. Es recomendable usar el Core 0 para comunicaciones (WiFi/BT) y el Core 1 para control de hardware.
Comunicación entre tareas
FreeRTOS ofrece Queues, Semaphores y Mutex para comunicar tareas sin condiciones de carrera. Por ejemplo: la tarea del Core 0 lee el sensor DHT22 cada segundo y pone el valor en una Queue. La tarea del Core 1 lee de esa Queue y actualiza la pantalla OLED. Así ambas tareas son independientes y no se bloquean mutuamente. Este patrón es esencial en proyectos IoT robustos con ESP32 de Especificar.cl.