diff --git a/ModuloLED/init.png b/ModuloLED/init.png new file mode 100644 index 0000000..776fe6a Binary files /dev/null and b/ModuloLED/init.png differ diff --git a/ModuloLED/install-service.sh b/ModuloLED/install-service.sh new file mode 100644 index 0000000..b6efda3 --- /dev/null +++ b/ModuloLED/install-service.sh @@ -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" diff --git a/ModuloLED/led-driver.py b/ModuloLED/led-driver.py new file mode 100644 index 0000000..4a13081 --- /dev/null +++ b/ModuloLED/led-driver.py @@ -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 diff --git a/ModuloLED/led-driver.service b/ModuloLED/led-driver.service new file mode 100644 index 0000000..f78b49e --- /dev/null +++ b/ModuloLED/led-driver.service @@ -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