README improved

This commit is contained in:
Christoph Haas 2026-01-17 16:56:48 +01:00
parent 02b5a3c410
commit 3d0e40c56e

145
README.md
View file

@ -1,22 +1,28 @@
# Zutaten
- LED-Matrix-Panel(s) von Joy-IT mit Hat für den Raspi
- Raspberry Pi 4
- https://github.com/hzeller/rpi-rgb-led-matrix
# Benutzung
- als **root** ausführen
- ./main.py
- gunicorn -w 1 -k gthread main:app
# Dateien
verschiedene threads zur auswahl, die vom flask gestartet/gestoppt werden können.
- main.py (das Hauptprogramm und der Flask-Webserver)
- lib/display.py (LED-Matrix konfigurieren und ansteuern)
- scenes/ (verschiede Darstellungsmodi)
- statisches bild anzeigen und sich beenden
-
# Architektur
ein task, der die ganze zeit im hintergrund läuft.
- statisches bild anzeigen
- eine Routine
Die "main.py" beinhaltet eine Flask-Web-Anwendung. Darüber lässt sich das
Programm mit HTTP-Anfragen steuern.
ein globales bild. (locking?)
die einzelnen
https://github.com/hzeller/rpi-rgb-led-matrix
Beim Starten werden alle Dateien aus dem _scenes_-Verzeichnis geladen.
Eine Szene lässt sich über http://raspi:8000/start/NAME-DER-SZENE starten.
Die Szene läuft dann als Thread parallel zur Web-Anwendung.
./main.py
curl http://localhost:6000/start/helloworld
@ -30,114 +36,6 @@ Für deutsche Ausgabe (z.B. den Monatsnamen):
- als root: `dpkg-reconfigure locales`
- **de_DE.UTF-8** aktivieren
# Flackern
## Erkenntnisse
"Hardware pulsing" macht zwar ein ruhiges Bild aber viele Artefakte.
Wenn man "hardware pulsing" abschaltet, muss die Software die Ansteuerung der
Panels machen. Das ist für den Raspi stressiger.
Am besten startet man den Webserver mit:
chrt -f 20 ./main.py
Dann werden Hintergrundprozesse unterdrückt und Artefakte vermieden.
Interessante Optionen:
- `options.gpio_slowdown`: Mehr=mehr Flackern. Weniger=Artifakte/Rauschen im linken Bereich.
- `options.pwm_bits`: Mehr=mehr Flackern. Weniger=weniger Helligkeitsabstufungen
## Einstellung 1
- kaum sichtbare Artefakte
- ca. 10 Hz Bildwiederholrate
- 4 Panels
```py
options = RGBMatrixOptions()
options.rows = MATRIX_HEIGHT
options.cols = MATRIX_WIDTH
options.chain_length = NUMBER_OF_PANELS
options.parallel = 1
options.hardware_mapping = 'regular' # change if using Adafruit HAT, e.g. 'adafruit-hat'
options.gpio_slowdown = 10 # try 2, 4, or even 5
options.drop_privileges = False
options.pwm_bits = 10 # default 1112; lower = faster refresh
```
## Einstellung 2
- leichte Artifakte, hält 10 Minuten durch
- ca. 30 Hz Bildwiederholrate
- 3 Panels
```py
options.hardware_mapping = 'regular' # change if using Adafruit HAT, e.g. 'adafruit-hat'
options.gpio_slowdown = 6 # try 2, 4, or even 5
options.disable_hardware_pulsing = True
#options.show_refresh_rate = True
options.drop_privileges = False
```
## Einstellung 3
- kaum Artefakte
- ca. 30 Hz
- 3 Panels
```py
options.hardware_mapping = 'regular' # change if using Adafruit HAT, e.g. 'adafruit-hat'
options.gpio_slowdown = 7 # try 2, 4, or even 5
options.disable_hardware_pulsing = True
options.drop_privileges = False
options.pwm_bits = 10 # default 1112; lower = faster refresh
```
## Einstellung 4
- 20-30 Hz
- 3 Panels
- keine Artefakte
```py
options.hardware_mapping = 'regular' # change if using Adafruit HAT, e.g. 'adafruit-hat'
options.gpio_slowdown = 8 # try 2, 4, or even 5
options.disable_hardware_pulsing = True
options.drop_privileges = False
## Einstellung 5
- 50 Hz
- 4 Panels
- keine Artefakte
- hält es langfristig damit durch?
options.hardware_mapping = 'regular' # change if using Adafruit HAT, e.g. 'adafruit-hat'
options.gpio_slowdown = 4 # try 2, 4, or even 5
options.disable_hardware_pulsing = True
options.drop_privileges = False
options.pwm_bits = 5 # default 1112; lower = faster refresh
# Links
- https://github.com/hzeller/rpi-rgb-led-matrix
# TODO
Das ganze als minimalen Case ohne Multithreading und Klassen.
Ist das Geflacker dann weg?
# 2026-01-16
- git pull
- spannung auf 5,01 Volt reduziert (von 5,2 Volt)
- gpio-slowdown auf 4
- nach dem stop (ctrl-c) und start 10 sekunden warten
- mit "gunicorn -w 1 -k gthread main:app" laufen lassen
# Szenen
curl "http://localhost:8000/start/color?red=255&green=255&blue=255"
@ -150,7 +48,10 @@ curl http://localhost:8000/reset
# Entwicklung ohne Matrix-Display
lib/display.py -> dev = True
./main.py
feh --auto-reload image.png
Falls man Szenen entwickeln möchte, aber das Matrix-Display nicht zur
Hand hat, kann man die Bild-Ausgabe auch in eine Datei schreiben:
- lib/display.py -> dev = True
- ./main.py
- feh --auto-reload image.png