Outils pour utilisateurs

Outils du site


start:esp32:interruptions

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
start:esp32:interruptions [2022/12/21 21:02] – [Exemple 1 de programme d'interruption avec l'ESP32] gerardadminstart:esp32:interruptions [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 ========Les interruptions sur ESP32======== ========Les interruptions sur ESP32========
 +
 +[[https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/intr_alloc.html|DOC Expressif : Allocation d'interruption EN]]
 +
 +[[https://www.upesy.fr/blogs/tutorials/what-are-interrupts-in-esp32-with-examples-for-arduino-code|Les interruptions sur ESP32 ]]
 +
 +[[start:esp32:alloc_interrup|DOC Expressif : Allocation d'interruption FR]]
  
 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. 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 ? À quoi ça sert ?
 +
 +{{ :start:esp32:nouvelelement171.png?direct&600 |}}
  
 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 : 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 :
Ligne 62: Ligne 70:
 ====Utilisation sur l’ESP32==== ====Utilisation sur l’ESP32====
  
-L’utilisation des interruptions sur l’ESP32 est similaire à celle sur l’Arduino avec la fonction attachInterrupt() . N’importe quel pin GPIO peut être utilisé pour les interruptions.+L’utilisation des interruptions sur l’ESP32 est similaire à celle sur l’Arduino avec la fonction attachInterrupt() . **N’importe quel pin GPIO peut être utilisé pour les interruptions.**  *[[ http://fablab37110.ovh/doku.php?id=start:esp32:interruptions#broches_du_gpio_de_l_esp32_compatibles_avec_les_interruptions|Voir ICI]]
  
 Ainsi pour créer une interruption sur un pin , il faut : Ainsi pour créer une interruption sur un pin , il faut :
Ligne 195: Ligne 203:
  
 {{ :start:esp32:nouvelelement190.png?direct&600 |}} {{ :start:esp32:nouvelelement190.png?direct&600 |}}
 +
 +ESP32  Micropython programme avec interruption sur front montant de la broche GPIO26
 +
 +<code python interrup200.py>
 +from machine import Pin
 +from time import *
 +
 +led = Pin(25, Pin.OUT)
 +bp = Pin(26, Pin.IN)
 +
 +# Le programme d'interruption
 +def fct_interruption(pin):
 +    print("Appui sur BP detecté")
 +    if led.value()==1:
 +        led.value(0)
 +    else:
 +        led.value(1)
 +
 +# Spécifie la fonction à appeler lorsqu'une interruption externe survient
 +bp.irq(trigger = Pin.IRQ_RISING, handler = fct_interruption)
 +
 +# Le programme principal
 +while True:
 +    sleep(5)
 +    
 +</code>
 +
 +"bp.irq(trigger=Pin.IRQ_RISING, handler = fct_interruption)"
 +
 +Spécifie la fonction à appeler lorsqu'une interruption externe survient.  La fonction fct_interruption   serra appelée chaque fois qu'un front montant est détecté sur le bouton poussoir bp (GPIO26)
 +
 +
 +====Exemple 2 de programme d'interruption avec l'ESP32====
 +
 +
 +Fonctionnement identique à l'exemple 1 mais avec un temps d’exécution le plus court possible dans la fonction fct_interruption
 +
 +{{ :start:esp32:nouvelelement190.png?direct&600 |}}
 +
 +
 +ESP32  Micropython programme avec interruption sur front montant de la broche GPIO26
 +
 +<code python interrup021.py>
 +from machine import Pin
 +
 +impulsion = False
 +etat_led = False
 +
 +led = Pin(25, Pin.OUT)
 +bp = Pin(26, Pin.IN)
 +
 +# Le programme d'interruption 
 +def fct_interruption(pin):
 +    global impulsion
 +    impulsion = True
 +
 +# Spécifie la fonction à appeler lorsqu'une interruption externe survient 
 +bp.irq(trigger = Pin.IRQ_RISING, handler = fct_interruption)
 +
 +# Le programme principal 
 +while True:
 +    if impulsion:
 +        print("Appui sur BP detecte")
 +        if led.value()==1:
 +            led.value(0)
 +        else:
 +            led.value(1)
 +        impulsion = False
 +        
 +</code>
 +
 +
 +impulsion = True
 +
 +La variable impulsion de type booléen passe à True quand on lance le programme d'interruption (fonction fct_interruption ) et repasse à False quand il est terminé.
 +
 +Cette variable est utilisée dans le programme principal pour allumer ou éteindre la Led, afficher du texte sur la console. 
 +
 +Cela permet d'avoir un temps d’exécution le plus court possible dans la fonction fct_interruption
 +
 +
 +
/home/chanteri/www/fablab37110/data/attic/start/esp32/interruptions.1671652977.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)