Files
vitrine-pixels/8x32 PI/test_matrice.py
T
bachandClaude Opus 5.5 2d4b0d5a5f 8x32 PI : interface web, matrice verticale, compatibilité Raspbian 11
- Interface web (serveur_web.py, Flask, gabarits dans web/) : dépôt de GIF,
  PNG animés et séquences de PNG, aperçus animés, ordre de lecture,
  activer / désactiver, corbeille, « jouer maintenant » et « suivante ».
  Service systemd vitrine-web, activé par installer.sh.
- Lecteur : réagit aux demandes de la page web (post-it dans
  /run/vitrine-pixels), écrit l'animation en cours, éteint la matrice
  proprement sur SIGTERM.
- Matrice posée debout : réglage ROTATION (90 = image 8 × 32) dans
  matrice.py ; images couchées tournées automatiquement ; exemples,
  animations codées, aperçus et page web adaptés au format vertical.
- Compatibilité Raspbian 11 Bullseye : partition /boot, Pillow 8.1, Flask 1.1.
- Doc : nouveau guide INTERFACE_WEB.md ; README, GUIDE_KRITA, MODE_VITRINE,
  CODER_EN_PYTHON mis à jour (format 8 × 32, adresses Wi-Fi / câble du Pi).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:08:18 +02:00

87 lines
3.1 KiB
Python

"""
=============================================================================
TEST DE LA MATRICE — branchement, orientation, alimentation
Workshop « Vitrine pixels »
=============================================================================
À lancer EN PREMIER, après chaque nouveau montage :
sudo ~/vitrine-env/bin/python test_matrice.py
(ou, pour voir à quoi ça ressemble sans matériel :
python3 test_matrice.py --simulateur)
Trois tests s'enchaînent, puis tout s'éteint :
1. LES COINS : un pixel de couleur dans chaque coin, 5 secondes.
ROUGE en haut à gauche VERT en haut à droite
BLEU en bas à gauche BLANC en bas à droite
(la matrice étant posée comme dans la vitrine : debout si ROTATION = 90)
Sinon : changez INVERSER_X / INVERSER_Y (ou ROTATION) dans matrice.py.
2. L'ORDRE DE LA CHAÎNE : un point orange parcourt les 256 LED
dans l'ordre où le signal les traverse. On voit le serpentin.
Si le point s'arrête en route : une LED ou une soudure est abîmée
à cet endroit (tout ce qui suit reste éteint).
3. LES COULEURS PLEINES : tout en rouge, puis vert, puis bleu, puis
blanc. Vérifie l'ordre des couleurs (GRB) et l'alimentation.
Le blanc est le plus gourmand : si la matrice devient orangée ou
clignote, l'alimentation est à sa limite (voir README, partie 10).
"""
import matrice
from matrice import LARGEUR, HAUTEUR, NB_LEDS, ROUGE, VERT, BLEU, BLANC, ORANGE
def test_coins():
print("1. Test des coins : rouge ↖ vert ↗ bleu ↙ blanc ↘")
matrice.effacer()
matrice.pixel(0, 0, ROUGE)
matrice.pixel(LARGEUR - 1, 0, VERT)
matrice.pixel(0, HAUTEUR - 1, BLEU)
matrice.pixel(LARGEUR - 1, HAUTEUR - 1, BLANC)
matrice.montrer()
matrice.attendre(5000)
def test_ordre_des_leds():
print("2. Ordre de la chaîne : le point orange suit le serpentin")
# Pour suivre l'ordre de la CHAÎNE (et pas l'ordre des coordonnées),
# on cherche, pour chaque numéro de LED, la position (x, y) qui lui
# correspond grâce à XY().
position = {}
for x in range(LARGEUR):
for y in range(HAUTEUR):
position[matrice.XY(x, y)] = (x, y)
matrice.effacer()
for numero in range(NB_LEDS):
x, y = position[numero]
matrice.pixel(x, y, ORANGE) # la tête du serpent
matrice.montrer()
matrice.pixel(x, y, (60, 20, 0)) # laisse une trace plus sombre
matrice.attendre(15)
matrice.attendre(1000)
def test_couleurs_pleines():
print("3. Couleurs pleines : rouge, vert, bleu, blanc")
for nom, couleur in [("rouge", ROUGE), ("vert", VERT), ("bleu", BLEU), ("blanc", BLANC)]:
print(" tout en", nom)
matrice.effacer(couleur)
matrice.montrer()
matrice.attendre(2000)
if __name__ == "__main__":
matrice.demarrer()
try:
test_coins()
test_ordre_des_leds()
test_couleurs_pleines()
print("Terminé.")
except KeyboardInterrupt:
print("\nArrêt demandé.")
finally:
matrice.eteindre()