Subsistema de video

pull/3/head
ifiguero 2023-11-29 13:25:29 -03:00
parent af28113bf0
commit 2ae2b33d08
4 changed files with 110 additions and 0 deletions

BIN
ModuloLED/init.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,44 @@
#!/bin/bash
if [ "$EUID" -ne 0 ]; then
echo "Este script requiere permisos de root."
exit
fi
# set pwd to current directory
cd "$(dirname "$0")"
#limpia el contenido del directorio de trabajo
rm -rf /srv/ledram/*
rm -rf /srv/*
# Configura un directorio `/srv/ledram` como buffer de video
sed -i -e '/srv/d' /etc/fstab
sed -i -e '$a/tmpfs /srv/ledram tmpfs rw,nosuid,nodev,size=32m 0 0' /etc/fstab
# Crea directorio donde se almacena el buffer de video
mkdir /srv/ledram
# Desocupa el tercer procesador para ser usado exclusivamente por el sub-proceso de renderizado
sed -i -e 's/ isocpus=3//g' /boot/cmdline.txt
sed -i -e 's/$/ isocpus=3/' /boot/cmdline.txt
#copia la biblioteca al directorio de trabajo
cp -R rgbmatrix /srv/rgbmatrix
#copia el sub-sistema de renderizado
mkdir /srv/subsystem
cp -rf init.png /srv
cp -rf led-driver.py /srv/subsystem
#Crea el servicio
cp -rf led-driver.service /etc/systemd/system/led-driver.service
# Recarga e inicia automaticamente al prender.
systemctl daemon-reload
systemctl unmask led-driver.service
systemctl enable led-driver.service
# Mensajes de salida
echo "Debe reiniciar la Raspberry para que el servicio pueda iniciarse"
echo "Luego para actualizar, solo debe modificar el el archivo '/srv/ledram/current.png' para actualizar la pantalla"

View File

@ -0,0 +1,52 @@
#!/usr/bin/env python
import time
import sys
import os
import shutil
from rgbmatrix import RGBMatrix, RGBMatrixOptions
from PIL import Image
# Configuration for the matrix
options = RGBMatrixOptions()
options.rows = 40
options.cols = 80
options.chain_length = 2
options.parallel = 1
options.gpio_slowdown = 4
#options.row_address_type = 0
options.hardware_mapping = 'regular' # If you have an Adafruit HAT: 'adafruit-hat'
options.multiplexing = 1
options.brightness = 100
#options.pwm_lsb_nanoseconds = 300
#options.pwm_bits = 11
matrix = RGBMatrix(options = options)
#Bufer que se copia en la pantalla led
img_path='/srv/ledram/current.png'
#imagen por defecto a mostrar al inicializarla
init_file='/srv/init.png'
# Revisa si el bufer existe, si no existe lo crea
# y si existe sale ya que hay otro proceso que lo
if not os.path.isfile(img_path):
shutil.copy(init_file, img_path)
os.chmod(img_path, 0o666)
else:
print("El archivo de buffer ya existe!")
exit(1)
#guarda el tiempo de modificación
tstam = os.stat(img_path).st_mtime
matrix.SetImage(Image.open(img_path).convert('RGB'))
while True:
time.sleep(0.1)
ntstam = os.stat(img_path).st_mtime
#si el bufer fue modificado, lo carga en la pantalla led
if ntstam > tstam:
image=Image.open(img_path)
matrix.SetImage(image.convert('RGB'))
tstam = ntstam

View File

@ -0,0 +1,14 @@
[Unit]
Description=LED Rendering Service
After=local-fs.target
[Service]
User=root
CPUAffinity=3
Nice=-20
WorkingDirectory=/srv
ExecStart=/usr/bin/python3 /srv/subsystem/led-driver.py
Restart=always
[Install]
WantedBy=multi-user.target