Files
vitrine-pixels/8x32 PI/outils/test_fil_donnees.py
T
bachandClaude Opus 5.5 156f9ce438 8x32 PI : séquences jusqu'à 120 PNG, test du fil de données, montage A validé
- 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>
2026-10-08 20:15:01 +02:00

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