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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    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 confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    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
    Membre averti
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    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 confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    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
    Membre averti
    Homme Profil pro
    salarié
    Inscrit en
    Mars 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Mars 2015
    Messages : 36
    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
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    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
    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
    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.

  8. #8
    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
    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!

  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
    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

Discussions similaires

  1. Allumer une led avec PIC32MX
    Par Elinux dans le forum MPLAB
    Réponses: 0
    Dernier message: 19/07/2018, 16h19
  2. Réponses: 2
    Dernier message: 11/02/2017, 20h49
  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, 13h43
  4. Allumer une LED branchée au port série
    Par soeursourire dans le forum Composants
    Réponses: 25
    Dernier message: 31/07/2007, 09h22
  5. allumer une led sur le clavier
    Par Ludo_360 dans le forum Delphi
    Réponses: 3
    Dernier message: 04/05/2007, 11h35

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