{{tag>dev esp esp32 todo}} ====== Programmation multitâche avec l'ESP32 ====== L'ESP32 2 coeurs cores/esp32/main.cpp Le sketck s'exécute sur le cœur 1 par défaut. Pour exécuter du code sur un cœur en particulier. * Créer une fonction * Utiliser la fonction xTaskCreatePinnedToCore() pour l'attacher au cœur choisit. Dans l'exemple suivant le sketch lance 2 taches, une écrivant sur le port série et l'autre faisant clignoter une LED. Au bout de quelques secondes le sketch tue la tache de clignotement et laisse la LED éteinte. //la carte ESP32 DEV KIT V1 a une LED intègré sur la sortie digitale 2 const int LED_BUILTIN = 2; bool killed = false; TaskHandle_t handler_blink_tsk; TaskHandle_t handler_speak_tsk; void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); xTaskCreatePinnedToCore( blinkLED, // Nom de la fonction a executer comme tache "blink_task", // nom de la tâche (16 car. max) 1000, // taille de la pile pour la tâche NULL, // arguments pour la fonction 0, // priorité &handler_blink_tsk, // handler pour la tâche 0); // coeur a utiliser xTaskCreatePinnedToCore( speakToMe, // Nom de la fonction a executer comme tache "speak_task", // nom de la tâche (16 car. max) 1000, // taille de la pile pour la tâche NULL, // arguments pour la fonction 0, // priorité &handler_speak_tsk, // handler pour la tâche 1); // coeur a utiliser } void loop() { delay(10000); //apres 10 secondes on arrete le clignotement de la LED if(killed == false) { vTaskDelete(handler_blink_tsk); digitalWrite(LED_BUILTIN, LOW); killed = true; } } void blinkLED(void *arg){ while(true) { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); } } void speakToMe(void *arg){ while(true) { Serial.print('Nb taches: '); Serial .println(uxTaskGetNumberOfTasks()); delay(2000); } } ===== Quelques fonctions ===== ^ xTaskCreatePinnedToCore() | Creer un tache et la faire executer par un processeur particulier. | ^ uxTaskGetNumberOfTasks() | Retourne le nombre total de tâches s'exécutant sur les 2 coeurs. | ^ vTaskDelete() | Tuer la tache dont un handle est passé en paramètre. | ===== Références ===== * Hackable n°23 * https://dagrende.blogspot.fr/2017/01/how-to-use-doit-esp32-devkit.html