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 :

Python, GPIO, Max7221 et 6 afficheurs 7 segments


Sujet :

Raspberry Pi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2016
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Python, GPIO, Max7221 et 6 afficheurs 7 segments
    Bonjour,
    Je débute en Python, il fallait bien qu'un jour je m'amuse avec ce langage. Je me suis débrouillé seul jusqu'à present, mais la je suis tombé sur un os, j'ai beau essayé de le ronger dans tous les sens, je n'arrive pas en extraire la moelle qui me permettra d'avancer.

    Le principe est : j'ai un vieux jukebox avec un système laser obsolète et surtout plus maintenu par Pioneer. Donc j'ai eu l'idée d'utilisé un Raspberry Pi 3 avec un Raspbian Jessie. Au debut, j'ai voulu utilisé un Raspbian Stretch, mais il semblerait que Stretch ne gère plus simplement l'interface IR, donc j'ai fait un downgrade vers Jessie.

    J'ai installé MPD et MPC pour faire jouer les morceaux de musique, mais voulant conserver les interfaces IHM d'origine du jukebox (clavier, afficheurs 7 segments et télécommande) j'ai eu l'idée de faire un petit programme Python pour m'interfacer avec MPC.

    Actuellement Le clavier matriciel fonctionne avec la télécommande IR, il me reste à gérer l'affichage sur mes 6 (2+4) afficheurs 7 segments Anodes Communes. J'ai déjà utilisé un MAX7221 avec un Arduino pour un affichage sur une matrice de led, avec succès. Je maîtrise le GPIO (utilisé pour le clavier matriciel et le récepteur IR). Bien sur j'ai inversé la partie Segment/Digit du Max7221, car il est prévu pour des afficheurs 7 segments Cathodes Communes.

    J'ai trouvé 2 methodes pour utiliser le MAX7221 :
    - luma.led_matrix : si j'essaie de l'installer par pip, j'ai l'erreur : Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-4a9hxs9f/smbus2/
    - luma.led_matrix : si j'essaie de l'installer depuis github, et que je l'installe avec "sudo python setup.py install" j'ai une erreur : error in luma.led_matrix setup command: 'extras_require' must be a dictionary whose values are strings or lists of strings containing valid project/version requirement specifiers.
    - Utilisation du GPIO comme je le ferai sur un Arduino

    N'arrivant pas à installer le package luma, je ne peux pas tester en utilisant le package. Je suis trop debutant pour comprendre ce qui bloque l'installation.

    En utilisant les GPIO, je n'arrive à rien non plus

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
     
    #!/usr/bin/env python
    # File rpi_7219b.py
    # http://www.bristolwatch.com/index.htm
    # By Lewis Loflin - lewis@bvu.net
    # Output time from system clock.
     
    # Two bytes are shifted in first being address, second being data.
    # Works the same as two 74165 SSRs in series or 16-bits.
    # LD "pulseCS()" clocks 16-bit address/data into working registers.
     
     
     
    # access to GPIO must be through root
    import RPi.GPIO as GPIO
    import time
     
    GPIO.setmode(GPIO.BCM)
     
    LATCH = 24 # CS
    CLK = 23
    dataBit = 19 # DIN
     
     
    GPIO.setup(LATCH, GPIO.OUT) # P0 
    GPIO.setup(CLK, GPIO.OUT) # P1 
    GPIO.setup(dataBit, GPIO.OUT) # P7
     
     
    # Setup IO
    GPIO.output(LATCH, 0)
    GPIO.output(CLK, 0)
     
     
    def pulseCLK():
        GPIO.output(CLK, 1)
        # time.sleep(.001) 
        GPIO.output(CLK, 0)
        return
     
    def pulseCS():
        GPIO.output(LATCH, 1)
        # time.sleep(.001)
        GPIO.output(LATCH, 0)
        return
     
     
     
    # shift byte into MAX7219
    # MSB out first!
    def ssrOut(value):
        for  x in range(0,8):
            temp = value & 0x80
            if temp == 0x80:
               GPIO.output(dataBit, 1) # data bit HIGH
            else:
               GPIO.output(dataBit, 0) # data bit LOW
            pulseCLK()
            value = value << 0x01 # shift left       
        return 
     
     
     
    # initialize MAX7219 4 digits BCD
    def initMAX7219():
     
        # set decode mode
        ssrOut(0x09) # address
        #	ssrOut(0x00); // no decode
        ssrOut(0xFF) # 4-bit BCD decode eight digits
        pulseCS();
     
        # set intensity
        ssrOut(0x0A) # address
        ssrOut(0x04) # 9/32
        pulseCS()
     
        # set scan limit 0-7
        ssrOut(0x0B); # address
        ssrOut(0x07) # 8 digits
        # ssrOut(0x03) # 4 digits
        pulseCS()
     
     
        # set for normal operation
        ssrOut(0x0C) # address
        # ssrOut(0x00); // Off
        ssrOut(0x01)  # On
        pulseCS()
    	# clear to all 0s.
        for x in range(0,9):
            ssrOut(x)
            ssrOut(0)
            pulseCS()
        return
     
     
    def writeMAX7219(data, location):
        ssrOut(location)
        ssrOut(data)
        pulseCS()
        return
     
     
    def displayOff():
       # set for normal operation
        ssrOut(0x0C) # address
        ssrOut(0x00); # Off
        # ssrOut(0x01)  # On
        pulseCS()
     
     
    def displayOn():
       # set for normal operation
        ssrOut(0x0C) # address
        # ssrOut(0x00); # Off
        ssrOut(0x01)  # On
        pulseCS()
     
     
     
    initMAX7219()
     
    # time returned as string
    # But order is reversed relative to MAX7219.
    str1 =  time.strftime("%H:%M:%S")
    # str2 =  time.strftime("%d:%m:%Y")
     
    print (str1)
    # print len(str1) # 8
     
    # x is digit position must be 1 to 8
    # y is used for string pointer
     
    while 1:
    	y = 7
    	for x in range(1, 9):
    		if str1[y] == ":":
    			# output "-"
    			writeMAX7219(10, x)
    			y = y - 1
    			continue # back to if
    		# convert y char to integer
    		writeMAX7219(int(str1[y]), x)
    		y = y - 1
    	str1 =  time.strftime("%H:%M:%S")
    	print (str1)
     
     
     
     
    print ("Stop")  
    time.sleep(20)
    displayOff()

    Merci.


    Mon coté débutant en python me bloque, ce n'est peut-être pas grand chose ou surement une erreur de ma part, mais je bloque. Alors si quelqu'un a la solution je veux bien un coup de main.


    Merci.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    ça sent les soucis avec le gestionnaire de paquetages pip...

    As-tu installé les dépendances comme recommandé dans la doc : Installing from PyPi, avec un gros warning sur la version de pip installée par défaut sur Raspbian Jessie.

    Attention aussi avec la version de python (2.x ou 3.x), il vaut mieux passer à Python 3 maintenant :
    pip ⇒ pip3,
    python ⇒ python3,
    python-dev ⇒ python3-dev,
    python-pip ⇒ python3-pip.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2016
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse f-leb.
    Par défaut avec l'apt-get la version de pip installé est une version 1.56, car j'utilise Jessie. J'ai vu le warning quand à la version du pip. donc j'ai fait un wget depuis le site bootstrap pour récupérer un get-pip.py. Je l'ai exécuté pour avoir la dernière version de pip.
    Actuellement la version de pip est : pip 18.1 from /usr/local/lib/python3.4/dist-packages/pip (python 3.4)

    J'utilise Thonny pour faire mes développements.

    Je vais relire la doc pour le package luma.led_matrix au cas ou j'aurais zappé quelque chose.

    Merci.

    [Edit] Suite a ma réponse j'ai tout repris de A à Z et j'ai toujours le problème avec luma.led_matrix.
    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
    35
    36
    37
    38
    39
    40
    41
    42
    pi@raspberrypi:~ $ pip --version
    pip 18.1 from /usr/local/lib/python3.4/dist-packages/pip (python 3.4)
    pi@raspberrypi:~ $ pip3 --version
    pip 18.1 from /usr/local/lib/python3.4/dist-packages/pip (python 3.4)
    pi@raspberrypi:~ $ pip 18.1 from /usr/local/lib/python3.4/dist-packages/pip (python 3.4)^C
    pi@raspberrypi:~ $ ^C
    pi@raspberrypi:~ $ lsmod | grep -i spi
    spidev                  7373  0
    spi_bcm2835             7596  0
    pi@raspberrypi:~ $ sudo usermod -a -G spi,gpio pi
    pi@raspberrypi:~ $ sudo apt-get install build-essential python3-dev python3-pip libfreetype6-dev libjpeg-dev
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances
    Lecture des informations d'état... Fait
    build-essential est déjÃ* la plus récente version disponible.
    libjpeg-dev est déjÃ* la plus récente version disponible.
    python3-dev est déjÃ* la plus récente version disponible.
    python3-pip est déjÃ* la plus récente version disponible.
    libfreetype6-dev est déjÃ* la plus récente version disponible.
    0 mis Ã* jour, 0 nouvellement installés, 0 Ã* enlever et 12 non mis Ã* jour.
    pi@raspberrypi:~ $ sudo -H pip install --upgrade luma.led_matrix
    Collecting luma.led_matrix
      Using cached https://files.pythonhosted.org/packages/f8/39/b6647a1f28ac0b2c31797f78b068edd1f2f1b4ead34c2c61b16439da712a/luma.led_matrix-1.1.1-py2.py3-none-any.whl
    Collecting rpi-ws281x; platform_machine == "armv7l" and platform_system == "Linux" (from luma.led_matrix)
      Using cached https://files.pythonhosted.org/packages/37/e0/baeb890ad7b2d39843c7cc7f0ac755778f735c7701ecfc414366574af978/rpi_ws281x-4.0.0-cp34-cp34m-linux_armv7l.whl
    Collecting ws2812; platform_machine == "armv7l" and platform_system == "Linux" (from luma.led_matrix)
      Using cached https://files.pythonhosted.org/packages/c4/4a/d3313a554b5f3e92e948d1ff983989cbb12cd4f7dd9ebf03a974f563b2c8/ws2812-1.0.0.tar.gz
    Collecting luma.core>=1.8.1 (from luma.led_matrix)
      Using cached https://files.pythonhosted.org/packages/ac/71/5d8333671d64e7b8f9c568a9e8e0f7131edfc9db58bb510d1b3542b9627b/luma.core-1.8.1-py2.py3-none-any.whl
    Requirement already satisfied, skipping upgrade: spidev; platform_system == "Linux" in /usr/local/lib/python3.4/dist-packages (from luma.core>=1.8.1->luma.led_matrix) (3.2)
    Collecting pillow>=4.0.0 (from luma.core>=1.8.1->luma.led_matrix)
      Using cached https://files.pythonhosted.org/packages/1b/e1/1118d60e9946e4e77872b69c58bc2f28448ec02c99a2ce456cd1a272c5fd/Pillow-5.3.0.tar.gz
    Requirement already satisfied, skipping upgrade: RPI.GPIO; platform_system == "Linux" in /usr/lib/python3/dist-packages (from luma.core>=1.8.1->luma.led_matrix) (0.6.3)
    Collecting smbus2 (from luma.core>=1.8.1->luma.led_matrix)
      Using cached https://files.pythonhosted.org/packages/c6/be/6eab4b27693ec2c87f7ff864dfca86c58fbfd1627acbe191dd2f18e0ac3e/smbus2-0.2.1.tar.gz
        Complete output from command python setup.py egg_info:
        error in smbus2 setup command: 'extras_require' must be a dictionary whose values are strings or lists of strings containing valid project/version requirement specifiers.
    
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-2_j7davk/smbus2/
    pi@raspberrypi:~ $
    Que je lance l'installation avec pip ou pip3 j'ai le même problème.

    Je ne sais toujours pas pourquoi luma ne veut pas s'installer.

    Merci de votre aide.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Essayons avec une mise à jour de setuptools :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pip3 install --upgrade setuptools

  5. #5
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2016
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Bonjour et Merci f-leb.

    C'était ca. le package luma.led_matrix s'est installé sans erreur après avoir lancé ta ligne de commande. Comme je suis curieux, je vais chercher à quoi sert ce package, histoire de ne pas me coucher tout aussi bête ce soir.

    Merci.

    Maintenant il ne me reste plus qu'a réaliser l'affichage sur les 7 segments.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Horloge numerique afficheur 7 segments
    Par defjames dans le forum Débuter
    Réponses: 17
    Dernier message: 26/01/2014, 13h12
  2. envoi de données vers un afficheur 7 segments
    Par Inaha dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/06/2013, 09h02
  3. [68HC11] Horloge numérique avec afficheur 7 segments
    Par Need you dans le forum Autres architectures
    Réponses: 2
    Dernier message: 08/04/2012, 09h31
  4. afficheur 7 segments
    Par Orguevirtuel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/04/2011, 21h17
  5. [PIC 16F84] Afficheur 7 segments
    Par Vipear dans le forum Autres architectures
    Réponses: 5
    Dernier message: 29/05/2009, 09h01

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