(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.