Aus Raspberry Pi Geek 10/2020

RGB-LED-Matrix WS2812 mit dem RasPi ansteuern (Seite 2)

Um Energie zu sparen, senken Raspberry-Modelle ab der dritten Generation die CPU-Frequenz, was auch die Frequenz des SPI-Taktgenerators verändert. Das hätte zur Folge, dass die Datenübertragung zu den WS2812-LEDs nicht mehr einwandfrei funktioniert. Daher müssen Sie den SPI-Generator auf eine feste Frequenz setzen, indem Sie in der Datei config.txt am Ende die Zeile core_freq=250 anfügen.

Falls Sie mehr als 64 LEDs ansteuern wollen, gerät womöglich der SPI-Puffer zu klein. Die Puffergröße legen Sie in derselben Datei über die Ergänzung spidev.bufsiz=32768 fest. Um die Änderungen zu übernehmen, starten Sie den RasPi neu.

Installation der C-Bibliothek

Die C-Bibliothek [6] verwendet die BCM-Notation für die GPIOs. Das bedeutet, dass der SPI-Pin in der Software die Nummer 18 hat (Physical Header 12). Die Bibliothek steht im Internet frei zum Herunterladen bereit. Listing 2 zeigt, wie Sie die Bibliothek auf dem Raspberry installieren. Das letzte Kommando startet ein Testprogramm, das die LED-Matrix in verschiedenen Farben leuchten lässt.

Listing 2

$ cd ~
$ git clone https://github.com/jgarff/rpi_ws281x.git
$ cd rpi_ws281x
$ scons
$ ./test -g 10

Java-Wrapper

Für die C-Bibliothek existieren Wrapper für verschiedene Programmiersprachen, darunter auch Java [7]. Bei einem Wrapper handelt es sich um ein Stück Software, das Funktionen einer Programmiersprache mithilfe einer Schnittstelle für eine andere Programmiersprache bereitstellt. Wir gehen hier nur auf die Installation des Wrappers für Java ein.

Um den Java-Wrapper zu installieren, verwenden Sie die Kommandos aus den ersten sechs Zeilen von Listing 3. Zum Ausführen des Wrappers benötigen Sie zusätzlich noch die Bibliothek Log4J, die Sie mit den Kommandos aus den Zeilen 7 bis 9 herunterladen und installieren. Beachten Sie, dass die Bibliothek während der Ausführung im Klassenpfad liegen muss.

Listing 3

$ cd ~
$ git clone https://github.com/rpi-ws281x/rpi-ws281x-java.git
$ cd rpi-ws281x-java/src/scripts
$ bash createNativeLib.sh
$ cd ~/rpi-ws281x-java/
$ ./gradlew assemble -x signArchives
$ cd ~
$ wget http://apache.lauf-forum.at/logging/log4j/2.13.1/apache-log4j-2.13.1-bin.tar.gz
$ tar -xzvf apache-log4j-2.13.1-bin.tar.gz

Nach dem Abschluss aller Installationsschritte testen Sie den WS2812-Strip mit einem ersten kleinen Programm (WS28Test.java, Listing 4). Das Programm importiert die Bibliothek zum Ansteuern der Leuchtdioden. Um mit den LEDs zu kommunizieren, erzeugt es danach ein Objekt namens matrix. Die Tabelle “Parameter von Ws281xLedStrip()” beschreibt die Bedeutung der einzelnen Parameter. Das Objekt setzt die ersten drei Pixel auf Rot, Grün und Blau, das Kommando matrix.render() schreibt die Daten auf die LEDs.

Listing 4

// WS28Test.java
import com.github.mbelling.ws281x.*;
public class WS28Test{
  public static void main(String[] args){
    Ws281xLedStrip matrix = new Ws281xLedStrip(64,10,800000,10,4,0,false,LedStripType.WS2811_STRIP_GRB,false);
    matrix.setPixel(0,255,0,0);
    matrix.setPixel(1,0,255,0);
    matrix.setPixel(2,0,0,255);
    matrix.render();
  }// main
}//class

Parameter

Typ

Bedeutung

1

int

Anzahl der angeschlossenen LEDs

2

int

verwendeter GPIO-Anschluss (10 für SPI, 18 für PWM)

3

int

Frequenz zum Ansteuern der LEDs

4

int

zu verwendende DMA (10 ist meist eine gute Wahl)

5

int

Helligkeit vom 0 bis 255 (empfohlen: 4 bis 32)

6

int

PWM-Kanal

7

boolean

Signalinvertierung (beim Einsatz eines invertierenden Pegelwandlers)

8

LedStripType

siehe Tabelle “LedStripType”

9

boolean

true löscht die LEDs beim Beenden des Programms

LedStripType

möglicher Typ

LedStripType.SK6812_STRIP_Typ

RGBW, RBGW, GRBW, GBRW, BRGW, BGRW

LedStripType.WS2811_STRIP_Typ

RGB, RBG, GRB, GBR, BRG, BGR

Um das Java-Programm zu bauen, verwenden Sie das Kommando aus der ersten Zeile von Listing 5. Wenn Sie den Klassenpfad nicht mit im Kommando angeben möchten, arbeiten Sie optional mit der CLASSPATH-Variablen. Die Schreibweise mit dem Parameter -cp wählte der Autor zur besseren Sichtbarkeit der einzelnen Bibliotheken.

Listing 5

$ javac -cp /home/pi/rpi-ws281x-java/build/libs/rpi-ws281x-java-2.0.0-SNAPSHOT.jar:. WS28Test.java
$ java -cp /home/pi/rpi-ws281x-java/build/libs/rpi-ws281x-java-2.0.0-SNAPSHOT.jar:/home/pi/apache-log4j-2.13.1-bin/log4j-api-2.13.1.jar:/home/pi/apache-log4j-2.13.1-bin/log4j-core-2.13.1.jar:. WS28Test

Das Kommando aus der zweiten Zeile von Listing 5 startet das Programm. Der -cp-Parameter übergibt hierbei auch alle benötigten Bibliotheken.

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