|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

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()

tareas.ino

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/

tareas_2.ino

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.

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información