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.