racknex Raspberry Pi Rack Kit (PowerButton, LED´s & LCD Display)

(UM-SBC-209)

In einem der letzten Videos habe ich das racknex Raspberry Pi Rack Kit vorgestellt.

Dieses bietet euch die Möglichkeit mehrere Pi´s sauber verpackt in einem 10 oder 19 Zoll Rack Format zu betreiben.

Das spannende an dem Rack Kit ist die Vielseitigkeit. Ihr könnt das Kit nicht nur speziell auf euere Anwendung konfigurieren sondern habt auch noch die Möglichkeit es in einem Server/Netzwerk Schrank oder auch an der Wand, Decke oder unter dem Schreibtisch zu montieren. Zudem können etliche Zubehör Teile wie Festplatten, Netzteile, Lüfter usw. im Rack selber installiert werden.

In meinem Fall habe ich in diesem Kit an der Front einen Power Button , versch. LED´s und ein 16×2 LCD Display installiert.

racknex Homepage: https://racknex.com/

Verwendetes Rack Kit: https://shop.racknex.com/19-inch-raspberry-pi-rackmount-kit-um-sbc-209/

Bevor wir nun mit der Installation der jeweiligen Komponenten beginnen hier ein paar Eindrücke von dem Raspberry Pi Rack Kit.

1. Installation Betriebssystem

Erster Schritt dabei ist die Installation eures bevorzugten Raspberry Pi Betriebssystems. Ich habe in diesem Beispiel das Standard Raspberry Pi OS in der 32bit Variante installiert.

2. Power Button anschließen

Power Button: https://shop.racknex.com/delock-keystone-push-button-black/

Da der Power Button selber nicht konfiguriert werden muss können wir diesen einfach an GND und GLOBAL_EN anschließen.

Dieses Setup ist dann für das Hochfahren und das Neustarten des Raspberrys ausgelegt, leider ist es mit dieser Konfiguration nicht möglich den Raspberry Pi herunterzufahren. Dass muss dann im Betriebssystem mit sudo shutdown -r now gemacht werden.

Falls Ihr den Power Button auch zum herunterfahren nutzen wollt müsst ihr diesen an anderen Pins anschließen und noch ein kleines Script installieren.

Hier nutzen wir dann die Pins GPIO 3 und GND, diese werden dann beim drücken des Power Buttons kurz überbrückt um den Raspberry “aufzuwecken”.

Um jetzt den Pi auch herunterfahren bzw. schlafen legen zu können benötigen wir wie gesagt ein Script dieses ladet Ihr ganz einfach mit einem 1 Zeiler herunter(zuvor muss noch git installiert werden)

git clone https://github.com/Howchoo/pi-power-button.git

Dann in den Ordner gehen und das Script installieren.

./pi-power-button/script/install

Falls Ihr euch die Funktion bzw. die manuelle Installation genauer ansehen wollt hier der Link:

https://howchoo.com/g/mwnlytk3zmm/how-to-add-a-power-button-to-your-raspberry-pi

3. LED´s anschließen

Low Current LED´s: https://shop.racknex.com/low-current-led-o3mm-from-kingbright-package-10-pieces/

Um die LED´s anzuschließen muss als erstes ein Widerstand an die Kathode(-) der einzelnen LED´s angelötet werden. (Die Kathode ist die kurze Seite der LED Pins)

Als Widerstand nutze ich einen mit 680Ω, hier kommt es natürlich darauf an welche LED´s Ihr nutzt. Ich habe hier LowCurrent LED´s.

Der GPIO Ausgang liefert 3,3V, die Durchlassspannung meiner LED´s werden mit 2,1V und einer Stromaufnahme von 2mA angegeben. Somit werden 2,1V für die LED verwendet und die restlichen 1,2V müssen über den Widerstand abfallen.

Somit ergibt sich: R= U/I = 1,2V/0,002mA = 600Ω der nächst größere Widerstand ist dann 680Ω.

Dann lötet Ihr die Widerstände alle einzeln an die Kathode (-) und verbindet dies dann miteinander. Das ganze sollte dann so aussehen.

Die Anode (+) der einzelnen LED´s wird dann an folgenden GPIO Pins angeschlossen:

  • ROT: an GPIO14
  • GRÜN: an GPIO20
  • GELB: an GPIO21

Die Kathode (-) mit den Widerständen wird ganz einfach mit einem GND Pin des Pi´s verbunden.

Nun muss diese natürlich noch angesprochen werden.

Dazu öffnet Ihr die Boot Config mit folgender Zeile:

sudo nano /boot/config.txt

Am Ende der Datei gebt Ihr nun folgendes ein für:

rote LED (Power Status):

# power LED on gpio 14 (red)
enable_uart=1

gelbe LED (Aktivitäts Status):

# activity LED on gpio 21 (orange)
dtoverlay=act-led,gpio=21

grüne LED (Netzwerk Status):

# online indicator LED on gpio 20 (green)
# this one's set to blink in a heartbeat pattern, but could
# be changed trigger on disk activity or stay on.
dtoverlay=gpio-led,gpio=20,trigger=heartbeat,label=statusled0

Nachdem Ihr die Datei gespeichert habt sollten die LED´s fleißig den jeweiligen Status wiedergeben. Evtl. ist noch ein reboot erforderlich.

4. Anschluss des LCD Display´s

Um das 16×2 LCD Display am Raspberry zu betreiben installieren wir die dazugehörigen Pins zuerst mit den GPIO Pins des Pi´s.

Display: https://shop.racknex.com/joy-it-16×2-lcd-display/

Display Model: https://amzn.to/3EnUB0b

Da ich in meinem Fall ein Display Treiber Modul am Display selber betreibe benötige ich hier nur 4 Pins. Das Set gibt es so schon fertig bei racknex.

  • RPi 5v pin (physical pin 2) – LCD VCC
  • RPi GND pin (physical pin 6) – LCD GND
  • RPi SDA (physical pin 3) – LCD SDA
  • RPi SCL (physical pin 5) – LCD SCL

Im nächsten Schritt muss dann die I2C Funktionalität am Raspberry aktiviert werden dazu öffnet Ihr die Raspberry Pi Konfiguration mit:

sudo raspi-config

geht dann auf den Punkt 3 (Interface Options)

dann auf den Punkt I5 und bestätigt dann hier das aktivieren mit OK

Nachdem Ihr diesen Schritt vorgenommen habt müssen wir noch einige Libaries installieren mit

link zur Doku: https://rplcd.readthedocs.io/en/stable/installation.html

sudo pip3 install RPLCD 

sudo apt-get install python-smbus

Zuerst starten wir jetzt den Raspberry Pi neu!

Um zu Überprüfen ob das LCD Display erkannt wird gebt ihr diese Zeile ein:

i2cdetect -y 1

Jetzt müssen wir noch ein Python Script erstellen mit:

Verzeichnis anlegen mit:

sudo mkdir /home/pi/LCD_Display

sudo nano /home/pi/LCD_Display/lcd.py

In diesem Fall speichern wir das Script unter /home/pi/LCD_Display

Jetzt fügt Ihr diese Zeilen in das Script ein und speichert dieses:

import socket
import logging
import signal
import subprocess

from time import sleep
from datetime import datetime
from RPLCD.i2c import CharLCD

lcd = CharLCD('PCF8574', 0x27, port=1, auto_linebreaks=False)
lcd.clear()

# Zeigt/Holt IP Adresse falls vorhanden, falls keine Verbindung
# bleibt diese Zeile leer

def get_ip_address():
 ip_address = '';
 try:
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     s.connect(("8.8.8.8",80))
     ip_address = s.getsockname()[0]
 except:
     ip_address = ''
 finally:
     s.close()
 return ip_address

# Funktion die das Display und Hintergrundbeleuchtung ausschaltet
# bei reboot und shutdown
def receiveSignal(signalNumber, frame):
    logging.info("Stopping LCD IP service")
    lcd.clear()
    lcd.backlight_enabled = False
    raise SystemExit('Exiting')

# Haupfunktion die das Datum, Uhrzeit, IPAdresse,
# CPU Temp, CPU Usage und Memory Usage anzeigt
# Falls Tastatureingabe im Terminal erfolgt schaltet Display ab
def main():
    global framebuffer
    i = 0
    try:
        while True:
            i+=1
            lcd_line_1 = datetime.now().strftime('%b %d  %H:%M:%S')
            lcd.write_string(lcd_line_1)
            if (i%20  == 16):
                memUsage = subprocess.check_output("free -m | awk 'NR==2{printf \"Mem: %.2f%%\", $3*100/$2 }'", shell = True)
                line_2 = memUsage.decode()
                lcd.clear()
                lcd.write_string(lcd_line_1  + '\r\n' + line_2)
            elif (i%20 == 1):
                ip_address = get_ip_address()
                line_2 = "IP: " + ip_address
                print(f'{lcd_line_1}\r\n{line_2}')
                lcd.clear()
                lcd.write_string(lcd_line_1 + '\r\n' + line_2)
            elif (i%20 == 6):
                temp =  subprocess.check_output("vcgencmd measure_temp |cut -f 2 -d '='", shell = True )
                line_2 = 'Temp: ' + temp.decode()
                lcd.clear()
                lcd.write_string(lcd_line_1 + '\r\n' + line_2)
            elif (i%20 == 9):
                cpu = subprocess.check_output("top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print \"CPU Usage: \" 100-$8 \"%\"}'", shell = True)
                line_2 = cpu.decode()
                lcd.clear()
                lcd.write_string(lcd_line_1 + '\r\n' + line_2)
            lcd.home()
            sleep(1)
    except KeyboardInterrupt:
        logging.info("Stopping LCD IP service")
        lcd.clear()
        lcd.backlight_enabled = False

if __name__ == '__main__':
    signal.signal(signal.SIGTERM, receiveSignal)
    main()

Nun könnt Ihr das Script starten mit

python3 /home/pi/LCD_Display/lcd.py

Nun sollte das Display die Uhrzeit, Datum, IP Adresse, CPU Temperature, CPU Usage und Memory Usage anzeigen.

Natürlich wollen wir das ganze dann noch nach einem reboot automatisch starten, dazu erstellen wir einen neue systemd Datei mit:

sudo nano /etc/systemd/system/lcd.service

und fügen dann diese Zeilen ein

[Unit]
Description=LCD Status Display
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 lcd.py
WorkingDirectory=/home/pi/LCD_Display
Restart=always
User=pi
[Install]
WantedBy=multi-user.target

Zu guter letzt schalten wir diesen Service noch scharf mit:

sudo systemctl enable lcd.service

Jetzt wird das Display mit den dazugehörigen Werten auch bei einem Reboot automatisch gestartet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert