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>
This commit is contained in:
bach
2026-10-08 16:08:18 +02:00
co-authored by Claude Opus 5.5
parent 98fca33142
commit 2d4b0d5a5f
63 changed files with 1592 additions and 156 deletions
+12 -9
View File
@@ -100,20 +100,23 @@ grâce à la ligne `from matrice import *`.
| Outil | Effet |
|---|---|
| `pixel(x, y, couleur)` | colore le pixel de la colonne `x` (0 à 31) et de la ligne `y` (0 à 7). En dehors : ignoré |
| `pixel(x, y, couleur)` | colore le pixel de la colonne `x` (0 à 7) et de la ligne `y` (0 à 31), matrice debout. En dehors : ignoré |
| `lire_pixel(x, y)` | renvoie la couleur actuelle d'un pixel |
| `effacer()` | éteint toute la toile |
| `effacer(couleur)` | remplit toute la toile d'une couleur |
| `assombrir(25)` | assombrit toute la toile de 25 % (pour les traînées) |
| `montrer()` | **affiche** la toile. Rien n'apparaît tant qu'on ne l'appelle pas ! |
| `montrer(image)` | affiche une image Pillow de 32 × 8 (voir partie 5) |
| `montrer(image)` | affiche une image Pillow de 8 × 32 (voir partie 5) |
| `attendre(100)` | attend 100 millisecondes |
| `teinte(t)` | couleur de l'arc-en-ciel : 0 rouge, 32 orange, 64 jaune, 96 vert, 128 cyan, 160 bleu, 192 violet, 224 rose |
| `teinte(t, saturation, valeur)` | idem, avec saturation (0 = blanc) et valeur (0 = noir), de 0 à 255 |
**Couleurs nommées** : `NOIR`, `BLANC`, `ROUGE`, `ORANGE`, `JAUNE`, `VERT`,
`CYAN`, `BLEU`, `VIOLET`, `MAGENTA`, `ROSE`.
**Dimensions** : `LARGEUR` (32), `HAUTEUR` (8).
**Dimensions** : `LARGEUR` (8) et `HAUTEUR` (32) quand la matrice est
debout (`ROTATION = 90` dans `matrice.py`) ; 32 et 8 quand elle est couchée.
Écrivez vos animations avec `LARGEUR` et `HAUTEUR` plutôt qu'avec des
nombres : elles marcheront dans les deux sens.
Le point `(0, 0)` est **en haut à gauche**, comme dans Krita.
@@ -181,19 +184,19 @@ utilise Pillow, la bibliothèque d'images :
from PIL import Image
def anim_logo_qui_defile():
# Remplacez par le chemin d'une image de 32 × 8 exportée depuis Krita.
# Remplacez par le chemin d'une image de 8 × 32 exportée depuis Krita.
logo = Image.open("animations/logo.png").convert("RGB")
for i in range(100):
effacer()
# On « colle » le logo deux fois, côte à côte, décalé de i pixels :
# ce qui sort à droite rentre à gauche (défilement en boucle).
toile.paste(logo, (i % LARGEUR - LARGEUR, 0))
toile.paste(logo, (i % LARGEUR, 0))
# On « colle » le logo deux fois, l'un au-dessus de l'autre, décalé
# de i pixels : ce qui sort en bas rentre en haut (défilement en boucle).
toile.paste(logo, (0, i % HAUTEUR - HAUTEUR))
toile.paste(logo, (0, i % HAUTEUR))
montrer()
attendre(60)
```
Ici `toile` est l'image de 32 × 8 sur laquelle dessinent `pixel()` et
Ici `toile` est l'image de 8 × 32 sur laquelle dessinent `pixel()` et
`effacer()`. Tout ce que sait faire Pillow (coller, retourner, changer les
couleurs, écrire du texte…) fonctionne dessus. Documentation :
<https://pillow.readthedocs.io>.