|
Les interruptions |
Les interruptions sur ESP32
Une interruption est un processus qui est déclenché de manière asynchrone par un évènement extérieur, qui interrompt momentanément l’exécution du code en cours, pour exécuter du code plus critique.
À quoi ça sert ?
Imaginez que vous vouliez allumer une LED lorsque vous appuyez sur un bouton qui est relié à un pin GPIO de l’ESP32. Le plus simple est de regarder en permanence dans la fonction loop() si vous avez appuyé sur le bouton :
|
|
Le problème est que le processeur du microcontrôleur est totalement occupé par cette tâche. Alors on peut dire au microcontrôleur de faire d’autres tâches dans la loop() , mais dans ce cas le microcontrôleur ne regardera l’état du bouton qu’une seule fois à chaque itération de la fonction loop() . Il se peut qu’on manque un évènement. On ne peut pas traiter en temps réel des évènements extérieurs. Les interruptions permettent de détecter un évènement en temps réel tout en laissant le processeur du microcontrôleur faire d’autres tâches. Ainsi le fonctionnement d’une interruption est le suivant :
Détection d’un évènement → Interruption du programme principal → Exécution du code de l’interruption → Le processeur reprend là où il s’est arrêté.
Note: Avec les interruptions, il n’y a plus besoin de regarder en permanence la valeur d’un pin : lorsqu’un changement est détecté, une fonction est exécutée.
Les modes de détection
La détection d’un événement est basée sur l’allure du signal qui arrive sur la broche sélectionnée.

Différents modes de détection
On peut choisir le mode de détection de l’interruption :
- LOW : Déclenche l’interruption dès que le signal est à 0V, un niveau bas
- HIGH : Déclenche l’interruption dès que le signal est à 3.3V, un niveau haut
- RISING : Déclenche l’interruption dès que le signal passe de LOW à HIGH, un front montant (0 à 3.3V)
- FALLING : Déclenche l’interruption dès que le signal passe de HIGH à LOW, un front descendant (3.3V à 0)
Note: Les modes RISING et FALLING sont les plus utilisés. Noter que si vous utilisez les modes LOW et HIGH , l’interruption se déclenchera en boucle tant que le signal ne change pas d’état.
Utilisation sur l’ESP32
L’utilisation des interruptions sur l’ESP32 est similaire à celle sur l’Arduino avec la fonction attachInterrupt() . N’importe quelle broche du GPIO peut être utilisé pour le déclenchement d'une interruption.
Ainsi pour créer une interruption sur un pin , il faut :
- Attribuer un numéro de broche comme entrée de déclenchement attachInterrupt()
attachInterrupt(GPIOPin, fonction_ISR, Mode);
Avec Mode , le mode de détection qui peut être LOW , HIGH , RISING , FALLING ou CHANGE
- Créer la fonction qui va être exécutée lorsque l’interruption est déclenchée
void IRAM_ATTR fonction_ISR() {
// Contenu de la fonction
}
Note: Il est conseillé d’ajouter le flag IRAM_ATTR pour que le code de la fonction soit stocké dans la RAM (et non pas dans la Flash), afin que la fonction s’exécute plus rapidement.
Le code entier sera de la forme :
|
void IRAM_ATTR fonction_ISR() { // Code de la fonction } void setup() { Serial.begin(115200); pinMode(23, INPUT_PULLUP); attachInterrupt(23, fonction_ISR, FALLING); } void loop() { } |
Dès que la tension passera de 3.3V à 0V sur la broche 23, la fonction fonction_ISR() sera exécutée. On peut ensuite faire d’autres tâches dans la fonction loop() .
Créé avec HelpNDoc Personal Edition: Gagnez du temps et de la frustration avec la fonction de conversion WinHelp HLP vers CHM de HelpNDoc