RaspFR :: Forum

Forum de la communauté francophone de Raspberry PI.

Vous n'êtes pas identifié(e).

Annonce

Canal irc: #raspfr sur zeolia.net

#1 24-01-2017 01:33:54

Max
Membre
Inscription : 24-01-2017
Messages : 6

Script Python sur Pi 3

Bonjour,


J'ai actuellement un Pi3, avec 2 scripts python

Mon premier script lance une impultion de 0,5 secondes sur un GPIO.
Mon deuxième fait exactement la même chose, mais sur un GPIO différent.


Je souhaiterai créer un seul script python qui executerait mes 2 scripts ci-dessous avec entre chaque une pause de 2 secondes.


1er script
******************************************************************************************************
#!/usr/bin/env python
# -*- coding:Utf-8 -*-

import RPi.GPIO as GPIO                # Importation des librairies qui gerent les ports
import time                    # Importation de la librairie temps

GPIO.setwarnings(False)                # Mettre sur OFF les alertes inutiles
GPIO.setmode(GPIO.BCM)                # BCM : Numero des GPIO (GPIO 16)
GPIO.setup(23,GPIO.LOW)                # Definition du port en sortie

GPIO.output(23,GPIO.LOW)            # ON (5V)
time.sleep(0.5)                    # Temps defini
GPIO.output(23,GPIO.HIGH)            # OFF (0V)
******************************************************************************************************

2ème script
******************************************************************************************************
#!/usr/bin/env python
# -*- coding:Utf-8 -*-

import RPi.GPIO as GPIO                # Importation des librairies qui gerent les ports
import time                    # Importation de la librairie temps

GPIO.setwarnings(False)                # Mettre sur OFF les alertes inutiles
GPIO.setmode(GPIO.BCM)                # BCM : Numero des GPIO (GPIO 18)
GPIO.setup(24,GPIO.LOW)                # Definition du port en sortie

GPIO.output(24,GPIO.LOW)            # ON (5V)
time.sleep(0.5)                    # Temps defini
GPIO.output(24,GPIO.HIGH)            # OFF (0V)
******************************************************************************************************



J'avais essayé de mettre un time.sleep (2), mais cela ne fonctionne pas, seul le premier script s'execute.

Je vous remercie de l'aide que vous pourrez m'apporter.


Cordialement,

Hors ligne

#2 24-01-2017 12:01:35

tgogo
Membre
Inscription : 17-01-2017
Messages : 1

Re : Script Python sur Pi 3

Bonjour, je suis pas sûr que ce soit la meilleure solution ni même si ça fonctionne (je suis en formation wink ) , mais si tu testé avec un script bash qui execute le 1er script ensuite tu envoie une commande "at" pour demarrer le second script X temps après l'execution du premier. smile

Dernière modification par tgogo (24-01-2017 12:02:00)

Hors ligne

#3 24-01-2017 13:55:43

CrazyCat
Chat
Inscription : 14-01-2016
Messages : 413

Re : Script Python sur Pi 3

Je suis un peu étonné que ça ne fonctionne pas, il faudrait que tu nous montres comment tu as fait.

Normalement, un code comme celui qui suis devrait fonctionner:

#!/usr/bin/env python
# -*- coding:Utf-8 -*-

import RPi.GPIO as GPIO                # Importation des librairies qui gerent les ports
import time                    # Importation de la librairie temps

GPIO.setwarnings(False)                # Mettre sur OFF les alertes inutiles
GPIO.setmode(GPIO.BCM)                # BCM : Numero des GPIO (GPIO 16)

GPIO.setup(23,GPIO.LOW)                # Definition du port en sortie
GPIO.output(23,GPIO.LOW)            # ON (5V)
time.sleep(0.5)                    # Temps defini
GPIO.output(23,GPIO.HIGH)            # OFF (0V)

time.sleep(2)

GPIO.setup(24,GPIO.LOW)                # Definition du port en sortie
GPIO.output(24,GPIO.LOW)            # ON (5V)
time.sleep(0.5)                    # Temps defini
GPIO.output(24,GPIO.HIGH)            # OFF (0V)

GPIO.cleanup()

Par contre je suis un peu étonné de ton fonctionnement: tu initialise le gpio à LOW, et au bout de 0.5s tu le bascules à HIGH. Pour moi, une impulsion consisterai à l'initialiser à HIGH et à passer à LOW au bout de 0.5s.
Et note que pour inverser l'état d'un GPIO, il vaut mieux faire:

GPIO.output(XX, not GPIO.input(XX))

(avec XX qui est le numéro du GPIO)

Edit: es-tu sur de tes setup ? De ce que je vois dans les docs, ce serait plutôt:

GPIO.setup(XX, OUT, initial=GPIO.LOW)

Hors ligne

#4 24-01-2017 17:11:21

Max
Membre
Inscription : 24-01-2017
Messages : 6

Re : Script Python sur Pi 3

Bonjour CrazyCat,

Tout d'abord merci de m'avoir répondu c'est super sympa ;-) Je suis novice dans les script python et GPIO :-)

Je ne suis pas certain d'avoir très bien compris, il ne faut pas que le courant circule au repos, je dois juste avoir 5V qui passe pendant 0,5 secondes, puis 0V au repos.


Je suis prenneur de toute amélioration, mais j'aimerai bien comprendr ela différence, stp?



Voila mon projet

Le premier bouton de ma télécommande me sert à ouvrir mon portail et le second bouton m'ouvre le garage.

J'ai relié cette télécommande sur le Rasp, 1er bouton sur la GPIO 23 et le second sur le GPIO 24.

J'ai fait un script pour chacun des deux boutons et ça fonctionne nickel.

J'aimerai qu'un seul script execute les 2 scripts avec une intervalle de 2 secondes, car la télécommande ne peut pas émettre les 2 impulsions en même temps.



Merci


Cordialement,

Hors ligne

#5 24-01-2017 17:59:01

CrazyCat
Chat
Inscription : 14-01-2016
Messages : 413

Re : Script Python sur Pi 3

Je vais te refaire le script à ma manière, en le commentant:

#!/usr/bin/env python
# -*- coding:Utf-8 -*-

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# Initialisation du premier GPIO (23)
# On le déclare en tant que sortie, et ON
GPIO.setup(23, OUT, initial=GPIO.HIGH)
# le GPIO doit donc être à 5V, on attends 0.5s
time.sleep(0.5)
# On peut l'éteindre tranquillement
GPIO.output(23, not GPIO.input(23))

# on attends 2s
time.sleep(2)

# Initialisation du second GPIO (24)
# On le déclare en tant que sortie, et ON
GPIO.setup(24, OUT, initial=GPIO.HIGH)
# le GPIO doit donc être à 5V, on attends 0.5s
time.sleep(0.5)
# On peut l'éteindre tranquillement
GPIO.output(24, not GPIO.input(24))

# Et on "nettoie" les GPIO
GPIO.cleanup()

C'est ce qui me semble le plus logique, dans ce que tu avais fait, les GPIO passaient à 5V après 0.5s (à moins que je ne me plante sur HIGH/LOW)

Maintenant, tu me diras qu'il y a de la redondance dans le code, je suis bien d'accord, on pourrait utiliser une fonction:

#!/usr/bin/env python
# -*- coding:Utf-8 -*-

import RPi.GPIO as GPIO
import time

def main():
   GPIO.setwarnings(False)
   GPIO.setmode(GPIO.BCM)
   impulse(23)
   sleep(2)
   impulse(24)
   GPIO.cleanup()

def impulse(idx):
   GPIO.setup(idx, OUT, initial=GPIO.HIGH)
   time.sleep(0.5)
   GPIO.output(idx, not GPIO.input(idx))

if __name__ == '__main__':
   main()

Hors ligne

#6 24-01-2017 21:28:25

Max
Membre
Inscription : 24-01-2017
Messages : 6

Re : Script Python sur Pi 3

En testant seuleument la 1ère partie du script:

#!/usr/bin/env python
# -*- coding:Utf-8 -*-

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# Initialisation du premier GPIO (23)
# On le déclare en tant que sortie, et ON
GPIO.setup(23, OUT, initial=GPIO.HIGH)
# le GPIO doit donc être à 5V, on attends 0.5s
time.sleep(0.5)
# On peut l'éteindre tranquillement
GPIO.output(23, not GPIO.input(23))




Voici ce que j'obtiens comme message:
python test.py
  File "test.py", line 12
    GPIO.setup(24, OUT, initial=GPIO.HIGH)
    ^
IndentationError: unexpected indent


Par contre en faisant comme ci-dessous, ça fonctionne nickel:
#!/usr/bin/env python
# -*- coding:Utf-8 -*-

import RPi.GPIO as GPIO                # Importation des librairies qui gerent les ports
import time                    # Importation de la librairie temps

GPIO.setwarnings(False)                # Mettre sur OFF les alertes inutiles
GPIO.setmode(GPIO.BCM)                # BCM : Numero des GPIO (GPIO 18)
GPIO.setup(23,GPIO.LOW)                # Definition du port en sortie

GPIO.output(23,GPIO.LOW)            # ON (5V)
time.sleep(0.5)                    # Temps defini
GPIO.output(23,GPIO.HIGH)            # OFF (0V)

#Attendre 5 secondes
time.sleep (5)

GPIO.setwarnings(False)                # Mettre sur OFF les alertes inutiles
GPIO.setmode(GPIO.BCM)                # BCM : Numero des GPIO (GPIO 18)
GPIO.setup(24,GPIO.LOW)                # Definition du port en sortie

GPIO.output(24,GPIO.LOW)            # ON (5V)
time.sleep(0.5)                    # Temps defini
GPIO.output(24,GPIO.HIGH)            # OFF (0V)

Dernière modification par Max (24-01-2017 21:53:23)

Hors ligne

#7 25-01-2017 01:06:24

CrazyCat
Chat
Inscription : 14-01-2016
Messages : 413

Re : Script Python sur Pi 3

Max a écrit :

Voici ce que j'obtiens comme message:
python test.py
  File "test.py", line 12
    GPIO.setup(24, OUT, initial=GPIO.HIGH)
    ^
IndentationError: unexpected indent

Une des règles essentielles du python, c'est que l'indentation fait tout. Et que des espaces et une tabulation ne sont pas la même chose. Utilise un éditeur qui te permette de voir les caractères cachés et tu verras certainement des erreurs d'espaces.

Et une autre chose: encadre ton code des balises [ code ] et [ /code ] (sans les espaces) pour que ce soit plus lisible, merci smile

Hors ligne

#8 25-01-2017 19:00:04

Max
Membre
Inscription : 24-01-2017
Messages : 6

Re : Script Python sur Pi 3

Je n'ai pas bien saisi, j'ai copié/collé ton script de Hier 17:59:01

Qu'elle est l'erreur?

Merci

Hors ligne

#9 26-01-2017 01:28:50

CrazyCat
Chat
Inscription : 14-01-2016
Messages : 413

Re : Script Python sur Pi 3

L'erreur peut provenir de ton éditeur et/ou du forum qui va ajouter un espace qui n'existe pas.
Quand on fait du python, il faut afficher tous les caractères, même les invisibles, pour être certain de ne pas avoir d'espace (ou de faux espace) qui crée des indentations involontaires.

Hors ligne

#10 26-01-2017 08:44:38

Max
Membre
Inscription : 24-01-2017
Messages : 6

Re : Script Python sur Pi 3

Je comprends mieux.

donc, la ligne posant problème: GPIO.setup(24, OUT, initial=GPIO.HIGH), devrait-être inscrite comme ceci:
GPIO.setup(24,OUT,initial=GPIO.HIGH)

?

Hors ligne

#11 26-01-2017 12:09:49

CrazyCat
Chat
Inscription : 14-01-2016
Messages : 413

Re : Script Python sur Pi 3

Non, ce sont les espaces en début de ligne qui posent souci.
Pour ma part, j'ai testé le code suivant:

#!/usr/bin/env python
# -*- coding:Utf-8 -*-

import RPi.GPIO as GPIO
import time

#GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

GPIO.setup(23, GPIO.OUT, initial=GPIO.HIGH)
time.sleep(0.5)
GPIO.output(23, not GPIO.input(23))

time.sleep(2)

GPIO.setup(24, GPIO.OUT, initial=GPIO.HIGH)
time.sleep(0.5)
GPIO.output(24, not GPIO.input(24))

GPIO.cleanup()

Et je n'ai eu aucune erreur

Hors ligne

#12 27-01-2017 21:37:03

Max
Membre
Inscription : 24-01-2017
Messages : 6

Re : Script Python sur Pi 3

Je viens de voir l'erreur, elle était dans votre première capture du 24/01/2017.
GPIO.setup(24, OUT, initial=GPIO.HIGH) et plus bas vous avez corrigé en: GPIO.setup(23, GPIO.OUT, initial=GPIO.HIGH)

Maintenant ça fonctionne uniquement si je remplace HIGH par LOW

Hors ligne

Pied de page des forums