Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando
Volver al índice del tutorial
____________________________
231.- Wemos D1 R32 ESP32. Tareas. RTOS.
-
FreeRTOS (Real Time Operating System), es un sistema para realizar tareas. El ESP32 admite este sistema.
- Mediante las Tareas podemos tener algo así como "distintos loop() independientes".
- En el próximo tutorial se establecerán dos Tareas y además se indicará en qué Núcleo se ejecutará cada Tarea.
- [Para un Reloj externo se suele utilizar RTC: 48relojRTC.htm]
- [Obtener hora mediante NTP: https://randomnerdtutorials.com/esp32-ntp-client-date-time-arduino-ide/}
________________________________
1.- Tareas.
- Observa que la creación y muestra del número aleatorio se realiza mediante la Tarea, no en el loop()
|
void setup() {
Serial.begin(115200);
xTaskCreate(aleatorio, "Crea_Aleatorio", 10000, NULL, 1, NULL);
}
void loop() {
}
void aleatorio(void * parameter) {
int alea = 0;
while(true){
alea = random(0, 100);
Serial.println(alea);
delay(1000);
}
}
|
- Para acabar la Tarea pondríamos:
vTaskDelete (NULL) ;
- Propuesta.
- Modifica el código anterior para que los números aleatorios estén comprendidos entre 0 y 15. Cuando el número aleatorio creado sea el 7, que pare la Tarea.
________________________________
2.- Doble Tareas.
- En este ejemplo se establecerán dos Tareas.
- Veamos este ejemplo de: https://techtutorialsx.com/2017/05/06/esp32-arduino-creating-a-task/
|
void setup() {
Serial.begin(115200);
delay(100);
xTaskCreate(
taskOne, /* Task function. */
"TaskOne", /* String with name of task. */
10000, /* Stack size in bytes. */
NULL, /* Parameter passed as input of the task */
1, /* Priority of the task. */
NULL); /* Task handle. */
xTaskCreate(
taskTwo, /* Task function. */
"TaskTwo", /* String with name of task. */
10000, /* Stack size in bytes. */
NULL, /* Parameter passed as input of the task */
1, /* Priority of the task. */
NULL); /* Task handle. */
}
void loop() {
delay(1000);
}
void taskOne(void * parameter)
{
for(int i=0;i<10;i++ ){
Serial.println("Hello from task 1");
delay(1000);
}
Serial.println("Ending task 1");
vTaskDelete(NULL);
}
void taskTwo(void * parameter)
{
for(int i=0;i<10;i++ ){
Serial.println("Hello from task 2");
delay(1000);
}
Serial.println("Ending task 2");
vTaskDelete(NULL);
}
|
________________________________
- Comentarios.
- Se ha establececido prioridad 1 en las dos Tareas, la CPU decidirá en qué momento ejecutará la Tarea1 y la Tarea2.
________________________________
- Propuesta.
- Conecta dos LED: uno LED2 y otro LED14, establece dos tareas, una para que el LED2 parpadee cada 1000 ms y otra para que el LED14 parpadee cada 700 ms.
_______________________________
|