Ziel ist es über einen LED-Stripe eine "coole" Beleuchtung in den 10" Netzwerkschrank zu bekommen für das Raspberry PI Cluster.

Dafür braucht man:

Falls nicht vorhanden braucht man noch:

Hardware

Achtung: Wenn man keinen (5V) oder nur einen schwachen POE Switch verwendet, dann sollte man ein externes Netzteil mit Adapter als Stromversorgung verwenden.

Der verwendete LED Stripe zieht: 30 Watt (5 V(olt), 6 A(mpere)).

Die LED-Stripes selbstklebend einkleben und die Kabel verbinden.
Stromversorgung an + und - Linie anschließen. Danach einen GPIO Port nach Wahl verwenden und an die DIN Leitung anschließen.

In meinem Fall verwende ich den PIN 10 (GPIO 15 (RXD)) am Raspberry.

Bildquelle raspberry.org: GPIO - Raspberry Pi Documentation

Software

Ich möchte, da ich als Webentwickler mit JavaScript am Besten zurecht komme meinen LED-Stripe mit JavaScript steuern und programmieren.

Dafür nutze ich Node.JS.

Node.JS installieren

Bevor wir unser Script erstellen müssen wir eine aktuellere Node.JS Version installieren. Wir installieren die aktuellste LTS (Long term support) Version mit folgendem Befehl.

sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt update
sudo apt install nodejs

Letzter Schritt bevor wir das Script erstellen: Wir müssen in dem Verzeichnis, wo das Script liegen soll,  die Bibliothek zum Steuern des LED-Stripes installieren.

Mit folgendem Befehl installieren wir rpi-ws281x-native - npm (npmjs.com).

cd /home/pi/
npm install rpi-ws281x-native

Script zum Einfärben der LEDs

Als nächstes erstellen wir eine Datei color.js und fügen folgenden Inhalt ein.

In meinem Fall habe ich den LED-Streifen in der Mitte getrennt und möchte die Hälfte Pink die andere Hellblau leuchten lassen. Ich kann jede LED einzeln ansprechen. Ich färbe somit 30 LEDs pink und 30 LEDs hellblau.

const ws281x = require("rpi-ws281x-native");

// Anzahl der LEDs des Streifen
var NUM_LEDS = 60;

// LED Adressierungsarray erstellen
var pixelData = new Uint32Array(NUM_LEDS);

// GPIO Pin, wo die Steuerungsleitung verbunden ist
// In meinem Fall der Pin 10
ws281x.init(NUM_LEDS, {GPIO: 10});

// Setze die Farbe für erste Hälfte auf Pink rgb(230,0,126)
for(var i = 0; i < ((NUM_LEDS/2)-1); i++){	
	pixelData[i] = rgb2Int(230,0,126);
}

// Setze die Farbe für zweite Hälfte auf Hellblau rgb(54,183,180)
for(var i = (NUM_LEDS/2);i<= (NUM_LEDS); i++){
	pixelData[i] = rgb2Int(54,183,180);
}

// LEDs einfärben
ws281x.render(pixelData);

// Umrechnen von RGB zu INT
function rgb2Int(r, g, b) {
  return ((g & 0xff) << 16) + ((r & 0xff) << 8) + (b & 0xff);
}

Es kann innerhalb des Scripts jede LED einzeln eingefärbt werden.
Als nächstes führen wir folgendem Befehl aus, um die LEDs einzufärben.

node color.js

Der Schrank leuchtet!

Happy lighting,
Jörg