GPIO.wait_for_edge et KeyboardInterrupt
Modérateurs : Francois, Manfraid
GPIO.wait_for_edge et KeyboardInterrupt
Bonjour,
je prépare une sonnette qui enverra un SMS à plusieurs destinataires.
Pour détecter l'appui j'utilise la fonction wait_for_edge de la librairie GPIO, pour les debug je voulais remettre à 0 les GPIO en cas de CTRL+C mais cela ne fonctionne pas.
J'obtiens une erreur : RuntimeError: Error waiting for edge, est ce qu'il y a un moyen de sortir proprement en remettant les GPIO à 0 ?
Voici l'erreur que j'obtiens quand j’appuie sur ctrl+c :
pat@raspi2:~/Python/sonnette $ sudo ./sonnette.py
^CTraceback (most recent call last):
File "./sonnette.py", line 50, in <module>
attente_appui()
File "./sonnette.py", line 37, in attente_appui
GPIO.wait_for_edge(pin, GPIO.FALLING, bouncetime=debounce)
RuntimeError: Error waiting for edge
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./sonnette.py", line 50, in <module>
attente_appui()
KeyboardInterrupt
et voici mon script :
[edit] : les BBcodes ne fonctionnent pas sur ce post (je l'ai posté en ayant écrit moins de 5 messages)
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
"""
Envoi SMS quand appui sur la sonnette
utilisation de la fonction GPIO.input()
Bouton poussoir raccordé entre GPIO22 et +3.3V
(avec montage Pull-up pour éviter les interférences)
nom programme : sonnette.py
logiciel : python 3.4.2
cible : raspberry Pi
date de création : 16/05/2017
date de mise à jour : N/A
version : 1.0
auteur : Pat
référence : http://www.framboise314.fr/le-bouton-po ... -etonnant/
: https://sourceforge.net/p/raspberry-gpi ... edomCookie
"""
#-------------------------------------------------------------------------------
# Bibliothèques
#-------------------------------------------------------------------------------
import RPi.GPIO as GPIO #bibliothèque RPi.GPIO
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Fonctions Persos
#-------------------------------------------------------------------------------
import sendSMS #envoi SMS via twilio
#-------------------------------------------------------------------------------
pin = 22 #broche utilisé en entrée
debounce = 5000 #attente anti-rebond / anti SPAM en ms
GPIO.setmode(GPIO.BCM) #utilisation des numéros de ports du processeur
GPIO.setup(pin, GPIO.IN) #GPIO en entrée (montage Pull-Up pour eviter interferences)
def attente_appui():
#attente d'un appui par détection de l'évènement passage à 0 (FALLING)
GPIO.wait_for_edge(pin, GPIO.FALLING, bouncetime=debounce) #<== ligne 37
#évènement FALLING détecté => on passe à la suite du programme
sendSMS.sendMessage ('On sonne', '+336XXXXXXXXX')
sendSMS.sendMessage ("Quelqu'un sonne", '+336YYYYYYYYY')
if __name__ == '__main__':
"""
Programme par défaut
"""
try:
while True:
attente_appui() #<== ligne 50
except (KeyboardInterrupt, SystemExit): #sortie boucle par ctrl-c
GPIO.remove_event_detect()
GPIO.cleanup() #libère toutes les ressources GPIO
print("\nProgramme interrompu\n")[/code]
je prépare une sonnette qui enverra un SMS à plusieurs destinataires.
Pour détecter l'appui j'utilise la fonction wait_for_edge de la librairie GPIO, pour les debug je voulais remettre à 0 les GPIO en cas de CTRL+C mais cela ne fonctionne pas.
J'obtiens une erreur : RuntimeError: Error waiting for edge, est ce qu'il y a un moyen de sortir proprement en remettant les GPIO à 0 ?
Voici l'erreur que j'obtiens quand j’appuie sur ctrl+c :
pat@raspi2:~/Python/sonnette $ sudo ./sonnette.py
^CTraceback (most recent call last):
File "./sonnette.py", line 50, in <module>
attente_appui()
File "./sonnette.py", line 37, in attente_appui
GPIO.wait_for_edge(pin, GPIO.FALLING, bouncetime=debounce)
RuntimeError: Error waiting for edge
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./sonnette.py", line 50, in <module>
attente_appui()
KeyboardInterrupt
et voici mon script :
[edit] : les BBcodes ne fonctionnent pas sur ce post (je l'ai posté en ayant écrit moins de 5 messages)
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
"""
Envoi SMS quand appui sur la sonnette
utilisation de la fonction GPIO.input()
Bouton poussoir raccordé entre GPIO22 et +3.3V
(avec montage Pull-up pour éviter les interférences)
nom programme : sonnette.py
logiciel : python 3.4.2
cible : raspberry Pi
date de création : 16/05/2017
date de mise à jour : N/A
version : 1.0
auteur : Pat
référence : http://www.framboise314.fr/le-bouton-po ... -etonnant/
: https://sourceforge.net/p/raspberry-gpi ... edomCookie
"""
#-------------------------------------------------------------------------------
# Bibliothèques
#-------------------------------------------------------------------------------
import RPi.GPIO as GPIO #bibliothèque RPi.GPIO
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Fonctions Persos
#-------------------------------------------------------------------------------
import sendSMS #envoi SMS via twilio
#-------------------------------------------------------------------------------
pin = 22 #broche utilisé en entrée
debounce = 5000 #attente anti-rebond / anti SPAM en ms
GPIO.setmode(GPIO.BCM) #utilisation des numéros de ports du processeur
GPIO.setup(pin, GPIO.IN) #GPIO en entrée (montage Pull-Up pour eviter interferences)
def attente_appui():
#attente d'un appui par détection de l'évènement passage à 0 (FALLING)
GPIO.wait_for_edge(pin, GPIO.FALLING, bouncetime=debounce) #<== ligne 37
#évènement FALLING détecté => on passe à la suite du programme
sendSMS.sendMessage ('On sonne', '+336XXXXXXXXX')
sendSMS.sendMessage ("Quelqu'un sonne", '+336YYYYYYYYY')
if __name__ == '__main__':
"""
Programme par défaut
"""
try:
while True:
attente_appui() #<== ligne 50
except (KeyboardInterrupt, SystemExit): #sortie boucle par ctrl-c
GPIO.remove_event_detect()
GPIO.cleanup() #libère toutes les ressources GPIO
print("\nProgramme interrompu\n")[/code]
Modifié en dernier par finopat le lun. 29 mai 2017 08:11, modifié 1 fois.
-
- Raspinaute
- Messages : 970
- Enregistré le : dim. 28 déc. 2014 15:28
- Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe
Re: GPIO.wait_for_edge et KeyboardInterrupt
Bonjour,
Essayez simplement pour sortir
Essayez simplement pour sortir
Code : Tout sélectionner
except KeyboardInterrupt:
GPIO.cleanup()
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (index de liens utiles)
Awesome Raspberry Pi
Awesome Raspberry Pi
Re: GPIO.wait_for_edge et KeyboardInterrupt
Bonjour,
même résultat avec cette syntaxe.
même résultat avec cette syntaxe.
-
- Raspinaute
- Messages : 970
- Enregistré le : dim. 28 déc. 2014 15:28
- Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe
Re: GPIO.wait_for_edge et KeyboardInterrupt
Vous serait-il possible d'éditer le post et de mettre le script entre les balises
Code : Tout sélectionner
?
Si je suis [url]http://raspi.tv/2014/rpi-gpio-update-and-detecting-both-rising-and-falling-edges[/url] et [url]https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/?SetFreedomCookie[/url]
la ligne "GPIO.wait_for_edge(pin, GPIO.FALLING, bouncetime=debounce)" devrait être GPIO.add_event_detect(pin, GPIO.FALLING, bouncetime=debounce)
Et si on suit les exemples, plutôt du genre GPIO.add_event_detect(pin, GPIO.FALLING, callback=attente_appui, bouncetime=debounce)
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (index de liens utiles)
Awesome Raspberry Pi
Awesome Raspberry Pi
Re: GPIO.wait_for_edge et KeyboardInterrupt
Bonjour, je vais éditer le post, je n'avais pas encore les 5 messages fatidiques pour pouvoir utiliser le BB code, cela devrait être chose faite maintenant.
Re: GPIO.wait_for_edge et KeyboardInterrupt
Je reposte mon code avec les balises code qui vont bien :
Code : Tout sélectionner
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
"""
Envoi SMS quand appui sur la sonnette
utilisation de la fonction GPIO.input()
Bouton poussoir raccordé entre GPIO22 et +3.3V
(avec montage Pull-up pour éviter les interférences)
nom programme : sonnette.py
logiciel : python 3.4.2
cible : raspberry Pi
date de création : 16/05/2017
date de mise à jour : N/A
version : 1.0
auteur : Pat
référence : http://www.framboise314.fr/le-bouton-poussoir-un-composant-banal-o-combien-etonnant/
: https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/?SetFreedomCookie
"""
#-------------------------------------------------------------------------------
# Bibliothèques
#-------------------------------------------------------------------------------
import RPi.GPIO as GPIO #bibliothèque RPi.GPIO
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Fonctions Persos
#-------------------------------------------------------------------------------
import sendSMS #envoi SMS via twilio
#-------------------------------------------------------------------------------
pin = 22 #broche utilisé en entrée
debounce = 5000 #attente anti-rebond / anti SPAM en ms
GPIO.setmode(GPIO.BCM) #utilisation des numéros de ports du processeur
GPIO.setup(pin, GPIO.IN) #GPIO en entrée (montage Pull-Up pour eviter interferences)
def attente_appui():
#attente d'un appui par détection de l'évènement passage à 0 (FALLING)
GPIO.wait_for_edge(pin, GPIO.FALLING, bouncetime=debounce) #<== ligne 37
#évènement FALLING détecté => on passe à la suite du programme
sendSMS.sendMessage ('On sonne', '+336XXXXXXXXX')
sendSMS.sendMessage ("Quelqu'un sonne", '+336YYYYYYYYY')
if __name__ == '__main__':
"""
Programme par défaut
"""
try:
while True:
attente_appui() #<== ligne 50
except (KeyboardInterrupt, SystemExit): #sortie boucle par ctrl-c
GPIO.remove_event_detect()
GPIO.cleanup() #libère toutes les ressources GPIO
print("\nProgramme interrompu\n")
Re: GPIO.wait_for_edge et KeyboardInterrupt
Attention a l'indentation, sur le fin du script le try et le except ne sont pas dans le if car au même niveau
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: GPIO.wait_for_edge et KeyboardInterrupt
vite fait ...
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).
Re: GPIO.wait_for_edge et KeyboardInterrupt
merci pour ces réponses,je teste dès que je peux.