README improved
This commit is contained in:
parent
02b5a3c410
commit
3d0e40c56e
1 changed files with 23 additions and 122 deletions
145
README.md
145
README.md
|
|
@ -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 11–12; 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 11–12; 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 11–12; 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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue