Aus Raspberry Pi Geek 02/2021

Laufschrift erstellen mit der LED-Matrix WS2812 (Seite 2)

Um die Bilder auf dem RasPi zu bearbeiten, nutzen Sie ein Malprogramm wie etwa Kolourpaint [5]. Der Befehl aus Listing 1 hat es bereits bei der Installation von Java und der Tools mit auf den Mini-Rechner gebracht. Da Malprogramme sich mit Schriften in einer so kleinen Größe schwertun, hilft eine Tabelle mit den für das Panel passenden Zeichen [6].

Das eigentliche Programm (Listing 2) entspricht in weiten Teilen dem Beispiel aus dem Artikel in der letzten Ausgabe; es sind lediglich das Öffnen der Bilddatei und der Laufschrifteffekt hinzugekommen. Den Namen der zu öffnenden Datei übergeben Sie dem Java-Programm einfach als Argument. Zwei Beispieldateien finden Sie im Download-Bereich zu diesem Artikel.

Listing 2

Ticker.java

import com.github.mbelling.ws281x.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Ticker{
  private static int buffer [][][] = new int[64][8][3];;
  private static void writeBufferToMatrix(Ws281xLedStrip matrix) {
    int i=0;
    for (int x=0 ; x<64 ; x++){
      if ((((i)/8)%2)==0){
        for (int y=0 ; y<8 ;y++) {
        matrix.setPixel(i,buffer[x][y][0],buffer[x][y][1],buffer[x][y][2]);
        i++;
        }
      } else {
        for (int y=7 ; y>-1;y--) {
        matrix.setPixel(i,buffer[x][y][0],buffer[x][y][1],buffer[x][y][2]);
        i++;
        }
      }
    }
    matrix.render();
  }// writeBufferToMatrix
  public static void main( String[] args ){
    Ws281xLedStrip matrix = new Ws281xLedStrip(512,18,800000,10,16,0,false,LedStripType.WS2811_STRIP_GRB,false);
    BufferedImage image=null;
    try {
      image = ImageIO.read(new File(args[0]));
    } catch (IOException e) {
      e.printStackTrace();
    }
    while(true) {
      for (int i = 0; i < image.getWidth(null) - 64; i++) {
        try {Thread.sleep(80); } catch (Exception e) { }
        for (int x = 0; x < 8; x++) {
          for (int y = 0; y < 64; y++) {
            java.awt.Color c = new java.awt.Color(image.getRGB(y+i,x));
            buffer[y][x][0] = c.getRed();
            buffer[y][x][1] = c.getGreen();
            buffer[y][x][2] = c.getBlue();
          }//y
        }//x
        writeBufferToMatrix(matrix);
      }//i
    }// while
  }//main
}//class

Um den Effekt einer Laufschrift zu erreichen, schreibt die Software die Farbinformationen der einzelnen Pixel aus dem Bild in den Puffer. Ist er komplett gefüllt, gibt ihn das Programm auf das Display aus. Den Bereich im Bild, den es kopiert, verschiebt es immer um ein Pixel nach rechts (Variable i). Auf diese Weise entsteht der Effekt einer Laufschrift.

Um das Beispielprogramm auf dem RasPi zu erzeugen, verwenden Sie die Anweisung aus der ersten Zeile von Listing 3. Das gebaute Java-Programm starten Sie mit dem Kommando aus der zweiten Zeile.

Listing 3

Programm übersetzen und starten

$ javac -cp /home/pi/rpi-ws281x-java/build/libs/rpi-ws281x-java-2.0.0-SNAPSHOT.jar:. Ticker.java
$ sudo java -cp /home/pi/rpi-ws281x-java/build/libs/rpi-ws281x-java-2.0.0-SNAPSHOT.jar:/home/pi/apache-log4j-2.13.3-bin/log4j-api-2.13.3.jar:/home/pi/apache-log4j-2.13.3-bin/log4j-core-2.13.3.jar:. Ticker Ticker_Weihnachten.png
$ nohup sudo java -cp /home/pi/rpi-ws281x-java/build/libs/rpi-ws281x-java-2.0.0-SNAPSHOT.jar:/home/pi/apache-log4j-2.13.3-bin/log4j-api-2.13.3.jar:/home/pi/apache-log4j-2.13.3-bin/log4j-core-2.13.3.jar:. Ticker Ticker_Weihnachten.png &

TIPP

In Listing 3 sind zum besseren Verständnis die nötigen Klassenpfade immer komplett mit angegeben. Es wäre eleganter, stattdessen die Variable CLASSPATH zu verwenden.

Wünschen Sie eine dauerhafte Ausgabe der Laufschrift, trennen Sie den Aufruf mit dem Unix-Kommando nohup vom Terminal ab und legen das Programm mit & in den Hintergrund (Listing 3, letzte Zeile). Zum Beenden benötigen Sie dann das Kommando kill mit der entsprechenden Prozess-ID.

Fazit

Das hier gezeigte Panel ist ein echter Hingucker. Die Kosten lassen sich wegen des gedruckten Gehäuses etwas schwierig einschätzen, liegen aber keinesfalls über denen eines fertig gekauften Pendants. Da Sie das Programm zum Ansteuern selbst in Java schreiben, sind Sie allerdings viel flexibler als bei gekauften Lösungen. Zudem besteht die Möglichkeit, das Display selbst zu vergrößern, indem Sie LED-Module mit einer 32×32-Matrix verwenden. Es macht auf jeden Fall viel Spaß, das Panel zu bauen und zu programmieren.

Das hier gezeigte Programm soll nur als Beispiel dienen. Es beschränkt sich auf eine rudimentäre Fehlerbehandlung und ist nicht besonders tolerant gegen Fehlbedienung. Diese Schwächen eignen sich als Ansatzpunkte für eigene Experimente. (agr)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben