Pixelpuff: Difference between revisions

From CCC Basel Wiki
Jump to navigation Jump to search
Content deleted Content added
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 8: Line 8:
File:Pixelpuff03.jpg|thumb|Detailansicht des Beaglebone, beschriftete Anschlüsse
File:Pixelpuff03.jpg|thumb|Detailansicht des Beaglebone, beschriftete Anschlüsse
File:Pixelpuff04.jpg|thumb|Vorderseite, LED Matrix mit laufendem Demo-Video
File:Pixelpuff04.jpg|thumb|Vorderseite, LED Matrix mit laufendem Demo-Video
File:Pixelpuff05.jpg|thumb|Am 10.09.2021 haben wir einen WiFi-fähigen Strommschalter nachgerüstet
</gallery>
</gallery>


Line 15: Line 16:
* 2 PSUs, je 5V 40A DC
* 2 PSUs, je 5V 40A DC
* BeagleBone Black mit aufgestecktem µC zur Ansteuerung der 3 Panel-Serien
* BeagleBone Black mit aufgestecktem µC zur Ansteuerung der 3 Panel-Serien
* Sonoff Basic R2 zum bequemEin-/Ausschalten


== Betriebsmodi ==
== Betriebsmodi ==

Ein- und Ausschalten:
* Via [[OpenHAB]]
* Direkt am Gerät (einen Stift o.Ä. in das Loch an der Unterseite des Gehäuses einführen)


=== Unabhängige Videoanzeige ===
=== Unabhängige Videoanzeige ===

Latest revision as of 07:26, 29 June 2022

Übersicht

Pixelpuff ist eine LED-Matrix mit 128x96 Pixeln, angesteuert von einem BeagleBone Black.

Hardware

  • 12 einzelne LED-Panel, je 4 in Serie
  • 2 PSUs, je 5V 40A DC
  • BeagleBone Black mit aufgestecktem µC zur Ansteuerung der 3 Panel-Serien
  • Sonoff Basic R2 zum bequemEin-/Ausschalten

Betriebsmodi

Ein- und Ausschalten:

  • Via OpenHAB
  • Direkt am Gerät (einen Stift o.Ä. in das Loch an der Unterseite des Gehäuses einführen)

Unabhängige Videoanzeige

  • USB-Stick mit Demo-Videos im BeagleBone
  • Auf dem BeagleBone laufen:
    • Xvfb: X11 Virtual Frame Buffer, ein virtueller X11-Server mit in-memory Framebuffer
    • LEDscape: Treiber für die LED-Matrix, nimmt Frames via TCP-Port 7890 entgegen
    • getfb: Nimmt den Xvfb-Framebuffer und sendet den Inhalt an LEDscape
    • mplayer zum Videos abspielen innerhalb des Xvfb

Externe Videoquellen

  • Man kann an den LEDscape-Server auch von "aussen" Daten schicken
    • Dazu muss erst auf dem Beaglebone der getfb Prozess (z.B. mit pkill getfb) beendet werden.
  • TCP Port 7890, Frame-Format:
    1. 32bit Big Endian Frame Size (bei diesem Display immer 0x00009000)
    2. 24bit-GRB-Pixel, Row-major order (= Zeile für Zeile, von links nach rechts, von oben nach unten)

Beispiel: ffmpeg X11 Stream

Folgenden Helper kompilieren (<code.gcc -o pixelpuff-convert pixelpuff-convert.c):

#include <stdio.h>
#include <unistd.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>

uint8_t frame[0x9004];

int main() {
  frame[0] = 0;
  frame[1] = 0;
  frame[2] = 0x90;
  frame[3] = 0;
  int i = 0;
  ssize_t to_read, r;
  while (!feof(stdin)) {
    to_read = 0x9000;
    while (to_read > 0) {
      r = read(0, frame+0x9004-to_read, to_read);
      if (r > 0) {
        to_read -= r;
      } else if (r < 0) {
        perror("read");
        exit(1);
      }
    }
    write(1, frame, 0x9004);
    fflush(stdout);
  }
  memset(frame+4, 0, 0x9000);
  write(1, frame, 0x9004);
  fflush(stdout);
}

Und dann mit folgenden Befehl den Stream starten:

ffmpeg -re -f x11grab -i :0.0 -map 0:0 -vf scale=128:96,eq=brightness=0.01:contrast=1.1 -c:v rawvideo -pix_fmt bgr24 -f rawvideo - | ./pixelpuff-convert | nc 10.20.0.85 7890

Notizen

  • LEDscape auf dem Beaglebone startet erst mit dem network-online.target, der Ethernet-Link sollte daher up sein, wenn Videos angezeigt werden sollen.
  • Gemäss LEDscape-README sollten die Anschlusskabel der LED-Panel nicht im laufenden Betrieb ein- oder ausgesteckt werden.