- serveur_web.py : séquences limitées à 120 PNG (message clair au-delà), envois jusqu'à 200 Mo, fichiers temporaires sur la carte SD (et plus dans /run, trop petit), garde-fou si une séquence est envoyée dans le cadre « fichiers séparés ». - outils/test_fil_donnees.py : met GPIO 18 à 1 puis à 0 toutes les 10 s, pour suivre le signal au multimètre du Pi jusqu'à DIN. - README : montage A (Pi en direct, LED en 4,4 V) testé et validé ; montage B (transistor 2N3904) déconseillé, trop lent (temps de stockage ≈ 0,2 µs face à un « 0 » de 0,4 µs) ; mise en garde sur les convertisseurs HV/LV ; dépannage « seule la 1re LED s'allume ». - INTERFACE_WEB.md, CLAUDE.md : nouvelles limites, accès au Pi en Wi-Fi seul, lecteur activé au démarrage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
87 lines
3.2 KiB
Python
87 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
=============================================================================
|
|
TEST DU FIL DE DONNÉES AU MULTIMÈTRE
|
|
Workshop « Vitrine pixels »
|
|
=============================================================================
|
|
|
|
Quand la matrice ne s'allume pas du tout, il faut savoir OÙ le signal se
|
|
perd : à la sortie du Pi ? dans le convertisseur de niveau ? dans un fil ?
|
|
|
|
Le vrai signal des LED est beaucoup trop rapide pour un multimètre
|
|
(800 000 bits par seconde). Ce programme transforme donc la patte 12
|
|
(GPIO 18) en simple interrupteur LENT :
|
|
|
|
10 secondes à « 1 » (3,3 V à la sortie du Pi)
|
|
10 secondes à « 0 » (0 V)
|
|
… et on recommence, pendant 2 minutes (Ctrl + C pour arrêter).
|
|
|
|
Pendant ce temps, on mesure au multimètre (calibre 20 V continu, pointe
|
|
NOIRE sur un GND, pointe ROUGE sur le point à tester) :
|
|
|
|
Point mesuré pendant « 1 » pendant « 0 »
|
|
------------------------------------------- ------------- -------------
|
|
1. patte 12 du Pi (GPIO 18) ≈ 3,3 V 0 V
|
|
2. entrée du convertisseur (côté 3,3 V) ≈ 3,3 V 0 V
|
|
3. sortie du convertisseur (côté 5 V) ≈ 5 V 0 V (*)
|
|
4. après la résistance de 330 Ω ≈ 5 V 0 V (*)
|
|
5. fil VERT de la fiche, au plus près de DIN ≈ 5 V 0 V (*)
|
|
|
|
(*) Avec le montage A (sans convertisseur, matrice en 4,4 V) : 3,3 V.
|
|
Avec le montage B (transistor) : INVERSÉ, ≈ 5 V pendant « 0 » et
|
|
0 V pendant « 1 ». C'est normal.
|
|
|
|
Le premier point où la mesure est fausse indique la panne : le problème se
|
|
trouve entre ce point et le précédent.
|
|
|
|
Et aussi, sans rien lancer :
|
|
- entre le 5V et le GND des fils du MILIEU de la matrice : 5,0 V (ou 4,4 V) ;
|
|
- entre le GND du Pi et le GND de la matrice : 0 V (sinon, masse pas commune).
|
|
|
|
Lancer (le lecteur ne doit pas tourner en même temps) :
|
|
sudo systemctl stop vitrine-pixels
|
|
sudo ~/vitrine-env/bin/python outils/test_fil_donnees.py
|
|
|
|
Le prochain programme qui affiche sur la matrice remettra tout seul la
|
|
patte 12 dans son mode normal.
|
|
"""
|
|
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import time
|
|
|
|
BROCHE = "18"
|
|
DUREE_ETAT = 10 # secondes à « 1 », puis à « 0 »
|
|
DUREE_TOTALE = 120 # secondes
|
|
|
|
|
|
def regler(niveau):
|
|
"""Met la patte en sortie, à 1 (dh = « drive high ») ou à 0 (dl)."""
|
|
# « raspi-gpio » sur Raspbian 11, « pinctrl » sur les systèmes plus récents.
|
|
outil = "raspi-gpio" if shutil.which("raspi-gpio") else "pinctrl"
|
|
subprocess.run([outil, "set", BROCHE, "op", "dh" if niveau else "dl"], check=True)
|
|
|
|
|
|
def main():
|
|
print(__doc__.split("Lancer")[0])
|
|
debut = time.monotonic()
|
|
niveau = 1
|
|
try:
|
|
while time.monotonic() - debut < DUREE_TOTALE:
|
|
regler(niveau)
|
|
print(f"{time.strftime('%H:%M:%S')} patte 12 à « {niveau} » "
|
|
f"({'≈ 3,3 V' if niveau else '0 V'} à la sortie du Pi)")
|
|
sys.stdout.flush()
|
|
time.sleep(DUREE_ETAT)
|
|
niveau = 1 - niveau
|
|
except KeyboardInterrupt:
|
|
pass
|
|
finally:
|
|
regler(0)
|
|
print("Terminé : patte 12 à 0.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|