Page 1 sur 1

lancer scipt python en sudo a partir programme python

Posté : dim. 11 oct. 2015 10:13
par ttitoupoulpe
Bonjour ,
Je suis débutant avec python et je cherche a commander une LED a partir d'un interface graphique (enfin juste un bouton).
Le probleme est que ma led s'allume sans meme avoir cliqué sur le bouton ,des que le programme demarre la led s'allume .
J'ai vraiment besoin d'aide sur ce truc

voici mon code button.py :

Code : Tout sélectionner

from Tkinter import*
import os

cmd= ' sudo python /home/pi/Desktop/allumer.py

fenetre = Tk()
button = Button(fenetre, text = 'allumer' ,command= os.system(cmd))
button.pack
button.mainloop()
et voici mon code allumer.py :

Code : Tout sélectionner

import Rpi as GPIO

GPIO.setmode(BCM)
GPIO.setup(25,GPIO.OUT)

GPIO.output(25,GPIO.HIGH)

je vous remercie par avance pour l'aide que vous pourrez m'apporter

Re: lancer scipt python en sudo a partir programme python

Posté : lun. 12 oct. 2015 08:54
par zeverybest
En quel langage est ton interface graphique?

Est ce un interface WEB?

Le PHP fonctionne tres bien pour ça

Re: lancer scipt python en sudo a partir programme python

Posté : lun. 12 oct. 2015 18:40
par ComteZera
Bonjour,

Est-ce que tu commences ton programme par éteindre la LED ?

Si le programme que tu as fait contient uniquement les lignes du dessus, tu ne l'éteins jamais ...

Sinon, c'est très bien de programmer en Python, cela fait très longtemps que j'en ai pas fait, mais de mémoire l'interface graphique avec TKinter était relativement simple pour commencer :)

Re: lancer scipt python en sudo a partir programme python

Posté : lun. 12 oct. 2015 20:35
par ttitoupoulpe
Bonjour
merci pour votre aide
mon interface graphique est en python j'utilise le module Tkinter.
non je n’éteins pas la LED mais elle ne devrait pas s'allumer non plus tant que je n'ai pas appuyé sur le bouton ,non ? mais je ne sais pas ou insérer une commande pour éteindre la led.


Merci

Re: lancer scipt python en sudo a partir programme python

Posté : mar. 13 oct. 2015 19:00
par vague nerd
Bonjour.
non je n’éteins pas la LED mais elle ne devrait pas s'allumer non plus tant que je n'ai pas appuyé sur le bouton ,non ?
Si je ne m'abuse, les gpio sont à HIGH au démarrage du pi. Il faut donc commencer par les passer à LOW (eteindre la led, quoi!)
mais je ne sais pas ou insérer une commande pour éteindre la led.
Au début du programme, au moment d'initialiser les GPIO en sortie.Avant la boucle.
Pour ma part, j'aurai commencé le programme par :

Code : Tout sélectionner

GPIO.setmode(BCM)
GPIO.setup(25,GPIO.OUT)
GPIO.output(25,GPIO.LOW)
Le code exécuté par le bouton ne reprenant que :

Code : Tout sélectionner

GPIO.output(25,GPIO.HIGH)
Sinon, vous pouvez passer au Toggle Button (un bouton qui reste enfoncé jusqu'a ce que l'on re-clique dessus) : bouton enfoncé, led allumée, bouton relevé, led eteinte.
En provenance de ça:

Code : Tout sélectionner

  def toggle_button_callback(widget, data):
      if widget.get_active():
          # If control reaches here, the toggle button is down
      else:
          # If control reaches here, the toggle button is up
Cdt.

Re: lancer scipt python en sudo a partir programme python

Posté : mar. 13 oct. 2015 21:30
par ttitoupoulpe
Bonjour vague nerd et merci

Au démarrage du pi les GPIO sont sur low, la LED est éteinte si je lance juste :

Code : Tout sélectionner

import RPi.GPIO as GPIO

GPIO.setmode (GPIO.BCM)
GPIO.setup(25,GPIO.OUT)
or si je rajoute la ligne

Code : Tout sélectionner

GPIO.output(25,HIGH)
Ma LED s'allume dés le lancement du programme avant même de d'actionner le bouton, c'est bien que le programme effectue le code même
avant que j'actionne le bouton ?

cdt

Re: lancer scipt python en sudo a partir programme python

Posté : mar. 13 oct. 2015 22:00
par vague nerd
Bonsoir.

Je vous proposai de lancer

Code : Tout sélectionner

GPIO.setmode (GPIO.BCM)
GPIO.setup(25,GPIO.OUT)
non pas dans le script lancé par le bouton, mais au début du programme.
Le code lancé par le bouton ne serais que :

Code : Tout sélectionner

GPIO.output(25,HIGH)
Explication : Il est possible que la commande

Code : Tout sélectionner

GPIO.setup(25,GPIO.OUT)
passe le pin à HIGH... je ne suis plus sûr, mais c'est facile à vérifier ![/strike]

EDIT : peu importe. En relisant le thread, je me rend compte que je me suis fourvoyé (m'enfin si vous pouvez me confirmer/infirmer le coup du HIGH par défaut en configurant un pin en sortie, ça m'évite une recherche !).

Cette ligne de code n'aurait pas un soucis de ' et/ou de " '?

Code : Tout sélectionner

cmd= ' sudo python /home/pi/Desktop/allumer.py
Du coup, le sudo serait exécuté directement et non stocké dans la variable cmd qui est finalement passée au bouton...
Cdt.

Re: lancer scipt python en sudo a partir programme python

Posté : mer. 14 oct. 2015 22:47
par ttitoupoulpe
Bonsoir
je confirme que si je paramètre une GPIO en sortie elle est par défaut sur LOW .

pour ma variable cmd si je la rentre directement dans la commande du bouton comme ceci :
button = Button(fenetre, text = 'allumer' ,command= os.system(' sudo /home/pi/desktop/allumer.py))
le problème reste le meme.

Merci
cordialement

Re: lancer scipt python en sudo a partir programme python

Posté : jeu. 15 oct. 2015 19:04
par Manfraid
Salut

Ceci est un comportement normal la fonction os.système appelle directement la commande

Il faut faire comme ceci

Code : Tout sélectionner

Def allume():
    os.system(' sudo /home/pi/desktop/allumer.py')


button = Button(fenetre, text = 'allumer' ,command= allume)


Re: lancer scipt python en sudo a partir programme python

Posté : jeu. 15 oct. 2015 20:37
par ttitoupoulpe
Salut Manfred

Merci beaucoup pour l'info ,ça fonctionne parfaitement

cordialement :D