IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Allumer une LED


Sujet :

Raspberry Pi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut Allumer une LED
    Bonjour, je suis débutant sur raspberry pi.
    J'ai commencé par acheter le livre des éditions ENI "Raspberry Pi 3 ou Pi Zéro" avec une carte PI 3B incluse.
    Ensuite j'ai acheté "Raspberry Pi 35 projets ludiques (DUNOD)".
    Le premier programme pour allumer une LED ne fonctionne pas.
    J'ai trouvé un autre programme sur internet qui fonctionne et la LED clignote, donc normalement les branchements sont bon.
    Est-ce que quelqu'un pourrait m'expliquer quelle est l'erreur dans ce code ou ce que je fait de mal pour espérer aller plus loin que l'exercice 1.
    Merci d'avance pour votre aide.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    import RPi.GPIO as GPIO
    from time import sleep
     
    LED_GPIO = 4
    print("Préparation...")
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(LED_GPIO, GPIO.OUT)
     
    def set_led(state):
        if state:
            GPIO.output(LED_GPIO, False)
        else:
            GPIO.output(LED_GPIO, True)
     
     
    set_led(False)
     
    print("La LED s'allume")
     
    sleep(2)
     
    set_led(True)
     
    print("La LED s'éteint")
     
    sleep(2)
     
    set_led(False)
     
    print("La LED s'allume")
     
    sleep(2)
     
    set_led(True)
     
    print("La LED s'éteint")
     
    sleep(2)
     
    set_led(False)
     
    print("La LED se rallume une dernière fois…")
     
    GPIO.cleanup()
     
    print("Fin")

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 646
    Points : 11 135
    Points
    11 135
    Par défaut
    Bonsoir,

    le code posté est celui qui pose problème ? Il aurait fallu poster les deux codes pour comparer. Mais regarde déjà si le problème ne vient pas du mode appliqué sur les GPIO : tu as le choix entre le mode BCM (dans le code posté) et le mode BOARD. Et il y a une grosse différence entre ces deux modes :
    What is the difference between BOARD and BCM for GPIO pin numbering ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Bonjour, oui le code précédent est celui qui ne fonctionne pas. Je vous joins le code qui fonctionne, il peut être un peu plus simple, mais c'était pour vérifier que ça fonctionne.
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import RPi.GPIO as GPIO
    import time
     
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(4, GPIO.OUT)
    while True:
    	GPIO.output(4, False)
    	time.sleep(0.05)
    	GPIO.output(4, True)
    	time.sleep(0.05)
    GPIO.setup(4, GPIO.LOW)
    GPIO.cleanup()

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 646
    Points : 11 135
    Points
    11 135
    Par défaut
    Pour moi les deux codes fonctionnent (je n'ai pas testé). Pour le premier programme as-tu les messages "la led s'allume", "la led s'éteint" qui s'affichent dans la console ? As-tu des messages d'erreur ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Avec la ligne from import time sleep, j'obtiens l'erreur :
    File "blink.py", line 2
      from import time sleep"
    Par contre, si j'écris import time, j'obtiens l'erreur :
    Préparation...
    blink.py:9: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
      GPIO.setup(LED_GPIO, GPIO.OUT)
    Merci.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    La syntaxe c'est :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    from module import truc
    C'est celle qu'on voit dans ton code plus haut.

    Tu ne fais pas tourner les 2 programmes en parallèle ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    Je ne pense pas qu'ils tournent en parallèle puisque, au début, je n'avais écrit que le premier et qu'il n'a pas fonctionné. J'ai écrit l'autre après.
    Pouvez-vous m'expliquer, par rapport à la syntaxe, pourquoi le programme qui fonctionne, il est juste écrit import time, c'est pour cela que j'ai essayé sur l'autre code.
    Merci.

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    time est un module, il contient la fonction sleep.

    Ainsi :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import time
    time.sleep()
    Le module a été importé, il est accessible, on peut l'utiliser pour atteindre la fonction.

    Alors que :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from time sleep
    time.sleep()
    Le module n'a pas été importé, on a directement importé la fonction (et on peut / il faut l'appeler directement). On va te dire que time est inconnu :
    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
        time.sleep(1)
    NameError: name 'time' is not defined

  9. #9
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par Stebast Voir le message
    Bonjour, oui le code précédent est celui qui ne fonctionne pas. Je vous joins le code qui fonctionne, il peut être un peu plus simple, mais c'était pour vérifier que ça fonctionne.
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import RPi.GPIO as GPIO
    import time
     
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(4, GPIO.OUT)
    while True:
        GPIO.output(4, False)
        time.sleep(0.05)
        GPIO.output(4, True)
        time.sleep(0.05)
    GPIO.setup(4, GPIO.LOW)
    GPIO.cleanup()
    Bonjour,
    Ce n'est pas facile de répondre à ce genre de posts, car il faut avoir un Pi à disposition.
    Je ai donc adapté le tien qui fonctionne avec un de mes scripts que j'avais à disposition et une platine d'essai qui est déjà montée avec aussi d'autres composants.
    Le script d'origine avec deux leds et le schéma Fritzing se trouve au chapitre 6 de mon livre.
    Les détails que je donne sont décrits dans le bouquin.

    Au premier coup d’œil ton script doit marcher.
    Sauf évidemment si une broche est en l'air ou que tu as oublié une résistance (aie)!

    Voici ma version
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # coding: utf-8
    import time
    import RPi.GPIO as GPIO
     
    LedPin = 12   # pin12 (Pi4J GPIO_01)
     
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(LedPin, GPIO.OUT)
    try:
      while True:
        GPIO.output(LedPin, False)
        time.sleep(0.05)
        GPIO.output(LedPin, True)
        time.sleep(0.05)
        GPIO.setup(LedPin, GPIO.LOW)
    except KeyboardInterrupt:
      GPIO.output(LedPin, GPIO.LOW)   # Led éteinte
      GPIO.cleanup()                  # Resources libérées

    Je pense que ce code est un peu mieux.
    Si tu interromps ton script avec Ctrl-C, tu recevras toujours un
    >> RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
    au prochain démarrage. De plus ta LED pourrait rester allumer.

    Dans tous mes scripts Python, j'utilise GPIO.BOARD qui est la numérotation physique.
    C'est plus facile pour moi qui passe ensuite en Java avec la librairie Pi4J.
    Je note donc aussi le Pin Numbering du Pi4J (par exemple pour le Pi 3 A+ où l'on voit bien la numérotation physique).

    Je vais essayer de regarder ton autre script.

  10. #10
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par boijea Voir le message
    Bonjour,

    Je vais essayer de regarder ton autre script.
    Disons que la conversion m'a pris 2 minutes:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    # coding: utf-8
    import RPi.GPIO as GPIO
    from time import sleep
     
    LED_GPIO = 12
    print("Préparation...")
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(LED_GPIO, GPIO.OUT)
     
    def set_led(state):
        if state:
            GPIO.output(LED_GPIO, False)
        else:
            GPIO.output(LED_GPIO, True)
     
     
    set_led(False)
     
    print("La LED s'allume")
     
    sleep(2)
     
    set_led(True)
     
    print("La LED s'éteint")
     
    sleep(2)
     
    set_led(False)
     
    print("La LED s'allume")
     
    sleep(2)
     
    set_led(True)
     
    print("La LED s'éteint")
     
    sleep(2)
     
    set_led(False)
     
    print("La LED se rallume une dernière fois…")
     
    GPIO.cleanup()
     
    print("Fin")

    Et cela marche! Ma belle grosse LED verte s'allume et s'éteint.
    Comprends pas! T'as une broche en l'air?

    J'ai utilisé une LED couleur RGB à 4 broches sur un ESP8266 en MicroPython.
    C'est vraiment cool pour montrer avec du vert, rouge ou bleu (glagla) si une température ambiante est correcte ou hors de limites données!

  11. #11
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par boijea Voir le message
    Et cela marche!
    Ma réponse n'est pas correcte!
    Si tu dis que cela ne marche pas ... cela ne doit pas marcher! Et c'est le cas.
    Ton livre est traduit de l'anglais. Donc à mon avis les textes des instructions print sont en anglais.
    Tu as sans doute traduit ou ajouté du texte avec des accents!
    Donc
    # coding: utf-8
    doit venir au début.

    Regardes mon article: PyDev, un IDE pour Python, sous Eclipse et pour le Raspberry Pi 3

    J'ai déposé ton code dans un fichier sebast.py et mon projet Eclipse dédié au Python du Raspberry Pi 3 et bingo:
    File "D:\EclipseWorkspaceNeon\PythonPremiersPas\sebast.py", line 5
    SyntaxError: Non-ASCII character '\xef' in file D:\EclipseWorkspaceNeon\PythonPremiersPas\sebast.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    J'ai rajouté l'encodage utf-8 et cela roule sur le PC.

    Avec un Run de sebast.py sous PyDev d'Eclipse (Windows 10) avec ma bibliothèque GPIO de simulation:

    Préparation...
    1
    setup: 4 with 1
    output: 4 - True
    La LED s'allume
    output: 4 - False
    La LED s'éteint
    output: 4 - True
    La LED s'allume
    output: 4 - False
    La LED s'éteint
    output: 4 - True
    La LED se rallume une dernière fois
    cleanup
    Fin

    Ton autre code qui marche n'a pas de print avec des accents!

    Eclipse n'est pas facile pour les débutants.
    C'est mon outil favori pour Java et C++.

    Dans l'article cité ci-dessus, dernier paragraphe, je mentionne PyCharm.
    Il marche avec ma bibliothèque, et je pense que c'est un bon choix si l'on ne fait pas de Java, mais avec des applications Python complexes pour le Raspberry Pi.

    J'ai ôté la première ligne et sur le Pi tu aurais dû voir ta faute:

    pi@raspberrypi:~/python $ head sebast.py
    import RPi.GPIO as GPIO
    from time import sleep

    LED_GPIO = 12
    print("Préparation...")
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(LED_GPIO, GPIO.OUT)

    def set_led(state):
    if state:

    pi@raspberrypi:~/python $ python sebast.py
    File "sebast.py", line 5
    SyntaxError: Non-ASCII character '\xc3' in file sebast.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Bonjour, je vous remercie pour vos réponses.
    J'ai réessayé mon petit code qui fonctionne en changeant de GPIO et en passant en BOARD et il fonctionne toujours.
    Par contre le premier code et celui que vous venaient de me donner, ne fonctionnent pas.
    Je les ai réécrit , vérifié les fautes, mais rien n'y fait. Je ne sais vraiment pas ce que je fais de mal et plus ça va et moins je comprends.

  13. #13
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Pas de soucis. Je peux aider.
    Disons:
    • m'envoyer à nouveau les deux fichiers (utiliser pièces jointes)
    • me dire le type de Raspberry Pi
    • Raspberry Pi en mode avec ou sans écran?
    • êtes-vous sur le Pi avec Putty ou autres outils?
    • éditeur utilisé pour modifier les scripts Python
    • que veux dire "ne fonctionne pas"
    • la commande utilisée et son résultat

    A+

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    blink.py est celui que ne fonctionne pas et blink_2.py est celui qui fonctionne.
    C'est un Raspberry Pi 3 modèle B.
    J'ai un écran.
    Pour la quatrième questions, je ne sais pas ce qu'est Putty.
    J'utilise Leafpad.
    blink.py : la LED ne clignote pas (soit avec une erreur ou le plus souvent le programme bloque à la ligne "Préparation")
    blink_2.py : la LED clignote
    La commande sudo python3 blink.py
    Merci
    Fichiers attachés Fichiers attachés

  15. #15
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Il faut y aller dou..ce..ment!

    D'abord il y a le # coding : utf-8
    Pas d'espace entre g et :

    Ensuite il faut un peu comprendre le Python.
    Ton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def set_led(state):
        if state:
            GPIO.output(LED_GPIO, False) 
        else:
            GPIO.output(LED_GPIO, True)
    est correct ... mais toute l'indentation qui suit mettra le code qui continue dans la partie else.
    Rien ne se passera.

    Devrait marcher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    # coding: utf-8
    import RPi.GPIO as GPIO
    from time import sleep
    
    LED_GPIO = 11
    
    print("Préparation...")
    
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(LED_GPIO, GPIO.OUT)
    
    def set_led(state):
            if state:
                    GPIO.output(LED_GPIO, False)
            else:
                    GPIO.output(LED_GPIO, True)
    
    set_led(False)
    print("La LED s'allume")
    sleep(2)
    set_led(True)
    print("La LED s'éteint")
    sleep(2)
    set_led(False)
    print("La LED s'allume")
    sleep(2)
    set_led(True)
    print("La LED s'éteint")
    sleep(2)
    set_led(False)
    print("la LED se rallume une dernière fois...")
    
    GPIO.cleanup()
    print("FIN")
    Je n'utilise pas mon Raspberry Pi comme un p'tit ordi, mais comme objet connecté.
    J'explique évidemment l'installation avec écran dans mon livre, que cela marche aussi sans écran, mais tout le travail est fait sans écran.
    Je n'ai jamais d'écran sur mes Raspberry Pi, ni clavier, ni souris.
    J'en ai deux sur des armoires: je communique avec Putty, WinSCP et regardes aussi le déroulement avec un serveur Web.

    Putty est un outil Windows qui me permet de "rentrer" dans mon Pi comme une console, un terminal, d'aller dans le répertoire /home/pi/python pour y créer un fichier sebas2.py et ensuite y copier/coller ton code avec vi (un éditeur Linux). WinScp permet de transférer mes fichiers Java compilés dans Eclipse sur le Pi.

    Regardes tout de même mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    except KeyboardInterrupt:
      GPIO.output(LedPin, GPIO.LOW)   # Led éteinte
      GPIO.cleanup()                  # Resources liberées
    un peu plus tard, sans doute, ..., et juste pour me faire plaisir!

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    J'ai retapé le code correctement et maintenant je n'ai plus d'erreur, mais le programme s'arrête à la ligne print("Préparation...").
    Sur l'écran s'affiche "Préparation" puis le code s'arrête, mais sans défaut et la LED ne s'allume pas.

    J'ai essayé votre code, mais ça me retourne une erreur sur la ligne : excepte KeyboardInterrupt.

    Et si je peux, encore vous embêter, j’aimerais que vous m'expliquiez comment on peut travailler sur Raspberry Pi sans écran, clavier et souris.

    Merci.

  17. #17
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par Stebast Voir le message
    Bonjour,
    J'ai retapé le code correctement et maintenant je n'ai plus d'erreur, mais le programme s'arrête à la ligne print("Préparation...").
    Sur l'écran s'affiche "Préparation" puis le code s'arrête, mais sans défaut et la LED ne s'allume pas.

    J'ai essayé votre code, mais ça me retourne une erreur sur la ligne : excepte KeyboardInterrupt.
    Je vais vous préparer du code.
    Comme j'ai un gros travail avec un article pour developpez.net, il faudra patienter un peu.


    Citation Envoyé par Stebast Voir le message
    Et si je peux, encore vous embêter, j’aimerais que vous m'expliquiez comment on peut travailler sur Raspberry Pi sans écran, clavier et souris.
    Je proposerais que vous ouvriez une nouvelle discussion.
    Vous expliquez aussi ce que vous avez et fait en quelques lignes.

  18. #18
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    Citation Envoyé par Stebast Voir le message
    Bonjour,

    J'ai retapé le code correctement et maintenant je n'ai plus d'erreur, mais le programme s'arrête à la ligne print("Préparation...").
    Sur l'écran s'affiche "Préparation" puis le code s'arrête, mais sans défaut et la LED ne s'allume pas.

    J'ai essayé votre code, mais ça me retourne une erreur sur la ligne : excepte KeyboardInterrupt.
    Citation Envoyé par boijea Voir le message
    Je vais vous préparer du code.
    Je suis vraiment dubitatif devant vos problèmes.
    Vu les remarques que vous faites, j'ai l'impression que vous êtes tout neuf avec Python.
    Moi-même je suis très loin de connaître Python au contraire de langages comme le C, C++ et Java surtout.
    Je dirais qu'il faut essayer de commencer juste.

    J'ai donc modifié votre code pour en faire un exemple tel que je déposerais volontiers dans un tutoriel Python (sujet que j'aimerais faire en MicroPython sur un ESP8266 ou ESP32).
    J'ai fait quelques adaptations comme GPIO.output(LED_GPIO, False) que je n'aime pas du tout.

    Comme un de vos script fonctionne, blink_2, j'assume que votre LED est bien sur la broche physique 11 (la sixième broche côté intérieur, côté micro carte).
    Cela ne semble pas correspondre à votre premier message avec le LED_GPIO = 4 en BCM (7 en physique je crois).
    Dans blink_2.py, le script qui marche, la LED clignote avec la broche 11!

    Comme votre code ne montre que Préparation, c'est sans doute un souci soit d'indentation soit de numéro de broche (se voit immédiatement sous PyDev et ma librairie GPIO (https://boichat.developpez.com/tutor...tiliser-pydev/)).
    Pour le excepte KeyboardInterrupt, c'est except et qui est une instruction qui gère les exceptions dans un bloc try: (voir la doc Python).

    Voir mon code, aussi en jointure pour éviter le problème d'indentation perdue lors de copier/coller et avec la broche 11:

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    # coding: utf-8
    import RPi.GPIO as GPIO
    from time import sleep
     
    LED_GPIO = 11
     
    def setup():
      GPIO.setmode(GPIO.BOARD)         # Numéro GPIO par location physique
      GPIO.setup(LED_GPIO, GPIO.OUT)   # LED en mode output
     
    def set_led(state):
      if state:
        GPIO.output(LED_GPIO, GPIO.HIGH)
      else:
        GPIO.output(LED_GPIO, GPIO.LOW)
     
    def allume_eteint(secondes):
      print("La LED s'allume")
      set_led(True)
      sleep(secondes)
      print("La LED s'éteint")
      set_led(False)
      sleep(secondes)
     
    if __name__ == '__main__':   # Démarrage en Python^M
      setup()
     
      i = 0
      try:
        while i < 2:
          allume_eteint(.5)
          i += 1
      except KeyboardInterrupt:  # Interruption avec 'Ctrl+C'
        pass
     
      GPIO.cleanup()
      print("FIN")


    Sur mon Pi où j'ai mis la broche 12:
    pi@raspberrypi:~/python $ python blinksebast.py
    La LED s'allume
    La LED s'éteint
    La LED s'allume
    La LED s'éteint
    FIN


    Je l'ai aussi testé sur mon PC, avec la broche physique 11 (GPIO.BOARD), avec ma librairie pyDev, Eclipse et aussi un simple fichier .bat:

    D:\PythonPremiersPasThonny>D:\Python37-32\python.exe sebast.py
    1
    setup: 11 with 1
    La LED s'allume
    output: 11 - True
    La LED s'éteint
    output: 11 - False
    La LED s'allume
    output: 11 - True
    La LED s'éteint
    output: 11 - False
    cleanup
    FIN


    D:\PythonPremiersPasThonny>pause
    Appuyez sur une touche pour continuer...

    Les messages supplémentaires viennent de ma librarie Windows RPi de simulation

    Mon code blinksebast.py va un peu plus loin.
    Il ne passerait peut-être pas dans un bouquin dédié à Python, mais irait bien dans plein d'autres cas.
    Il faut tout de suite bien structurer et utiliser ce que le langage nous donne.
    Pour un programmeur qui débute en Python, ce serait un bon départ (mon avis .... évidemment).

    Bon travail.
    Fichiers attachés Fichiers attachés

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    Je vous remercie pour votre aide.
    Je ne peux pas essayer maintenant mais je le ferais dès que possible et je vous tiendrais informé.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Je vous remercie parce que votre code fonctionne mais j'aurais quelques questions.

    J'ai rajouté la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GPIO.setwarnings(False)
    parce que sans cela, ça provoquait une erreur et je ne sais pas pourquoi.

    Je souhaiterais que vous m'expliquiez pourquoi ce code fonctionne et pas l'autre parce que je ne sais pas pourquoi.

    Et aussi, je ne comprends pas la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if __name__ == '__main__':
    (Je sais, ça fait beaucoup de "je ne sais pas")

    Merci d'avance.

Discussions similaires

  1. Allumer une led avec PIC32MX
    Par Elinux dans le forum MPLAB
    Réponses: 0
    Dernier message: 19/07/2018, 17h19
  2. Réponses: 2
    Dernier message: 11/02/2017, 21h49
  3. allumer une led a partir du pc via port série
    Par ramanov dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/03/2009, 14h43
  4. Allumer une LED branchée au port série
    Par soeursourire dans le forum Composants
    Réponses: 25
    Dernier message: 31/07/2007, 10h22
  5. allumer une led sur le clavier
    Par Ludo_360 dans le forum Delphi
    Réponses: 3
    Dernier message: 04/05/2007, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo