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
|
# Benutzung
|
||||||
|
|
||||||
- als **root** ausführen
|
- 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.
|
Die "main.py" beinhaltet eine Flask-Web-Anwendung. Darüber lässt sich das
|
||||||
- statisches bild anzeigen
|
Programm mit HTTP-Anfragen steuern.
|
||||||
- eine Routine
|
|
||||||
|
|
||||||
ein globales bild. (locking?)
|
Beim Starten werden alle Dateien aus dem _scenes_-Verzeichnis geladen.
|
||||||
die einzelnen
|
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.
|
||||||
https://github.com/hzeller/rpi-rgb-led-matrix
|
|
||||||
|
|
||||||
./main.py
|
./main.py
|
||||||
curl http://localhost:6000/start/helloworld
|
curl http://localhost:6000/start/helloworld
|
||||||
|
|
@ -30,114 +36,6 @@ Für deutsche Ausgabe (z.B. den Monatsnamen):
|
||||||
- als root: `dpkg-reconfigure locales`
|
- als root: `dpkg-reconfigure locales`
|
||||||
- **de_DE.UTF-8** aktivieren
|
- **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
|
# Szenen
|
||||||
|
|
||||||
curl "http://localhost:8000/start/color?red=255&green=255&blue=255"
|
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
|
# Entwicklung ohne Matrix-Display
|
||||||
|
|
||||||
lib/display.py -> dev = True
|
Falls man Szenen entwickeln möchte, aber das Matrix-Display nicht zur
|
||||||
./main.py
|
Hand hat, kann man die Bild-Ausgabe auch in eine Datei schreiben:
|
||||||
feh --auto-reload image.png
|
|
||||||
|
- lib/display.py -> dev = True
|
||||||
|
- ./main.py
|
||||||
|
- feh --auto-reload image.png
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue