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 |
|
Anzahl der angeschlossenen LEDs |
|
2 |
|
verwendeter GPIO-Anschluss (10 für SPI, 18 für PWM) |
|
3 |
|
Frequenz zum Ansteuern der LEDs |
|
4 |
|
zu verwendende DMA (10 ist meist eine gute Wahl) |
|
5 |
|
Helligkeit vom 0 bis 255 (empfohlen: 4 bis 32) |
|
6 |
|
PWM-Kanal |
|
7 |
|
Signalinvertierung (beim Einsatz eines invertierenden Pegelwandlers) |
|
8 |
|
siehe Tabelle “LedStripType” |
|
9 |
|
|
|
LedStripType |
möglicher Typ |
|---|---|
|
|
|
|
|
|
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.





