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>
This commit is contained in:
bach
2026-10-08 20:15:01 +02:00
co-authored by Claude Opus 5.5
parent 1ea8500b82
commit 156f9ce438
6 changed files with 155 additions and 14 deletions
+27 -5
View File
@@ -160,6 +160,7 @@ inverse des aiguilles d'une montre : 1 à 7 en bas, de gauche à droite, puis
### Pas de 74AHCT125 sous la main ? Deux solutions de dépannage
**Solution A : baisser la tension de la matrice (conseillée, aucun composant).**
✅ *Testée et validée sur le Pi 3 du workshop (octobre 2026).*
Le seuil du « 1 » vaut 70 % de la tension d'alimentation **des LED**. Si on
alimente la matrice en **4,4 V** au lieu de 5 V, le seuil tombe à
0,7 × 4,4 ≈ **3,1 V**, et les 3,3 V du Pi suffisent. Les WS2812B fonctionnent
@@ -184,7 +185,10 @@ En résumé :
matrice, et ne doit **jamais** toucher une patte du Pi.
- Gardez le fil de données **court** (moins de 30 cm).
**Solution B : un transistor « inverseur » (si la solution A scintille).**
**Solution B : un transistor « inverseur » (déconseillée).**
❌ *Essayée pendant le workshop : la matrice ne s'allume pas, seule la 1re LED
prend une couleur au hasard.* On la décrit quand même, pour comprendre
pourquoi elle échoue.
Avec un transistor NPN du kit, de préférence un **2N3904** (le plus rapide du
kit ; un BC337 ou un S8050 peuvent convenir), on fabrique un adaptateur 5 V.
Le transistor **inverse** le signal (un 1 devient un 0) : il faut le dire au
@@ -209,8 +213,25 @@ Le même montage, en schéma électrique :
```
Ici l'alimentation d'établi reste à **5,0 V**. Le 5 V n'atteint jamais le Pi :
il s'arrête au collecteur du transistor. Ce montage est plus lent qu'un
74AHCT125 : il marche souvent bien, mais c'est un dépannage.
il s'arrête au collecteur du transistor.
> **Pourquoi ça ne marche pas : le transistor est trop lent.** Les LED lisent
> des impulsions très courtes : un « 0 » est une impulsion de **0,4 µs**
> (0,000 000 4 s), un « 1 » une impulsion de 0,8 µs. Or un transistor comme
> le 2N3904, quand il conduit à fond (« saturé »), met environ **0,2 µs** à se
> bloquer : c'est son *temps de stockage*. Chaque impulsion est raccourcie
> d'autant, et la résistance de tirage arrondit encore les fronts. Le « 0 »
> tombe sous ce que la LED accepte : elle reçoit du bruit, la première LED
> affiche une couleur au hasard et ne transmet rien aux suivantes.
> Un 74AHCT125 réagit en moins de 0,01 µs : 20 fois plus vite.
>
> On pourrait l'accélérer (condensateur de 100 pF en parallèle de la
> résistance de base, résistance de tirage plus faible), mais le résultat
> resterait fragile. **Préférez la solution A, ou la puce.**
> **Même problème avec les petits modules « convertisseurs de niveau »**
> bidirectionnels (marqués HV / LV, à transistors BSS138) : ils sont faits
> pour des signaux lents (I²C), pas pour les 800 000 bits par seconde des LED.
> Dans les deux cas, le reste (logiciel, installation, Krita) ne change pas.
@@ -532,7 +553,8 @@ En haut de [`serveur_web.py`](serveur_web.py) :
|---|---|---|
| `MOT_DE_PASSE` | `None` | ⚠️ sans mot de passe, **toute personne sur le réseau** peut ajouter ou supprimer des animations. Ex. `"pixels"` : le navigateur le demandera |
| `PORT` | `80` | le port web habituel ; un autre port s'ajoute à l'adresse (`http://172.16.50.27:8080`) |
| `TAILLE_MAX_MO` | `50` | taille maximum d'un envoi |
| `TAILLE_MAX_MO` | `200` | taille maximum d'un envoi (tous les fichiers ensemble) |
| `MAX_IMAGES_SEQUENCE` | `120` | nombre maximum d'images dans une séquence de PNG |
> **Avec la protection contre les coupures de courant** (overlay, voir
> [MODE_VITRINE.md](MODE_VITRINE.md#4-survivre-aux-coupures-de-courant)), si la
@@ -563,7 +585,7 @@ Le mode d'emploi détaillé, pour l'équipe design, est dans
| **Ça marche, puis tout se fige ou scintille quand on branche un casque / lance un son** | La sortie audio utilise le même circuit que GPIO 18 | Vérifier `dtparam=audio=off` dans `/boot/firmware/config.txt`, redémarrer |
| **Couleurs aléatoires, scintillement** | Puce absente ou de type HC (sans T) | Vérifier les lettres sur la puce |
| | Montage sans puce (solution A) | Baisser encore un peu l'alimentation (4,2 V), raccourcir le fil vert, ou passer à la solution B |
| **Rien ne s'allume avec le transistor** (solution B) | `INVERSER_SIGNAL` oublié, ou transistor à l'envers | `INVERSER_SIGNAL = True` dans `matrice.py` ; vérifier E-B-C |
| **Seule la 1re LED s'allume, d'une couleur au hasard** | Signal déformé : convertisseur ou transistor trop lent (solution B), masse non commune | Passer à la solution A (sans convertisseur, LED en 4,4 V), vérifier le fil blanc |
| | Masse mal serrée | Revérifier toutes les masses |
| **Couleurs fausses** (rouge ↔ vert) | Ordre des couleurs | Dans `matrice.py`, remplacer `WS2811_STRIP_GRB` par `WS2811_STRIP_RGB` |
| **Les couleurs sombres de mon dessin n'apparaissent pas** | Normal : correction gamma + luminosité faible | Voir [GUIDE_KRITA.md, partie 5](GUIDE_KRITA.md#5-ce-qui-change-entre-lécran-et-les-led) |