Für meinen Raspberry PI 4 wollte ich einen Lüfter, da ich manchmal einige hitzige Rechenoperationen durchführe die ganz schön für Temperatur sorgen. Damit der Raspberry PI nicht allzu sehr an Leistung durch Hitze verliert und damit der Lüfter nicht dauerhaft Lärm erzeugt, habe ich eine Lüftersteuerung selbst gebaut.
Meine kleine Temperatursteuerung für den Raspberry PI 4 funktioniert ohne komplizierte Frameworks und andere Programmiersprachen somit kein Installations und Konfigurationsaufwand erforderlich.
Ausstattung / Hardware
Für mein Projekt nutze ich einen Raspberry PI 4 sowie:
- GeeekPi Low-Profile CPU Kühler (Ice-Tower)
- 1-Relais 5V KY-019 Modul High-Level
- Ein paar M2.5 Schrauben
- Wire-Kabel zum Verbinden

Ziel ist es die Temperatur des Raspberry PIs auszulesen und sobald die Temperatur einen konfigurierten Wert übersteigt, dass dann der Lüfter eingeschaltet wird. Ansonsten soll der Lüfter wieder ausgeschaltet werden sobald die Temperatur den Grenzwert unterschreitet.
Das Relais mit dem Raspberry PI verkabeln
Wie in der Dokumentation erkennbar sind folgende GPIO Pins zur Verfügung. Ich nutze die folgenden Pins, wie unten in Schaubild ersichtlich.
Raspberry PI
#2: Anschluss V+ am Relais Normally Openend (NO)
#4: Anschluss V+ am Relais Power-Supply VCC
#6: Anschluss Lüfter Ground (das schwarze Kabel vom Lüfter)
#14: Anschluss Relais Ground GND
#40: Anschluss Relais Signal Line S
Relais
Signal line - S: Das GPIO Kabel vom Raspberry PI #40
Power Supply - VCC: Das Kabel vom Raspberry PI #4
Ground - GND: Das Kabel vom vom Raspberry PI #6
Normally Opened (NO): Kabel von Raspberry PI #2
Middle Pin: Anschluss Lüfter Power (das rote Kabel vom Lüfter)


Software zur Steuerung entwickeln
Um die Temperatur auszulesen, können wir den folgenden systemeigenen Befehl nutzen.
$ vcgencmd measure_temp
temp=29.7'C
Um die GPIO Pins vom Rasperry zu steuern können wir folgende systemeigene Funktion verwenden.
Zuerst müssen wir die gewünschten Pins aktivieren.
# den pin 40 (gpio 21) aktivieren!
echo "21" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio21/direction
Danach können wir den Pin an und ausschalten.
# AN
echo "1" > /sys/class/gpio/gpio21/value
# AUS
echo "0" > /sys/class/gpio/gpio21/value
Damit bei der gewünschten Temperatur der Pin (und den Lüfter) eingeschaltet wird und falls es den Grenzwert unterschreitet wieder ausgeschaltet wird, sieht das vollständige Script wie folgt aus.
#!/bin/bash
# ---------------------------------------------------------------
# Konfiguration
# Maximale Temperatur bevor das Script den Lüfter einschaltet
MAXHEAT=40
# GPIO Pin wo der Schalter liegt
GPIO=21
# ---------------------------------------------------------------
## Testen ob die GPIO schon initialisiert ist.
if [ -f "/sys/class/gpio/gpio$GPIO/value" ]; then
echo "GPIO already initialized"
else
echo "Setting up PIN $GPIO"
echo "$GPIO" > /sys/class/gpio/export
echo "out" > "/sys/class/gpio/gpio$GPIO/direction"
echo "0" > "/sys/class/gpio/gpio$GPIO/value"
fi
## CPU Temperatur vom Rasperry PI auslesen
temp=$(vcgencmd measure_temp | grep -Po '[\d.]+');
## Temperatur von Float nach Int runden, da bash nur mit Int umgehen kann
inttemp=$(printf '%.*f\n' 0 $temp)
## Wenn Temperatur höher ist als MAXHEAT, dann an sonst aus.
if [[ "$inttemp" -gt "$MAXHEAT" ]]; then
echo "may i cool down. ($temp C°)"
echo "1" > "/sys/class/gpio/gpio$GPIO/value"
else
echo "guess everything is fine. ($temp C°)"
echo "0" > "/sys/class/gpio/gpio$GPIO/value"
fi
Das Script am besten als Crojob im System einrichten und z.B. jede Minute ausführen. Ich habe mein Script /home/servicedog/heatcontrol.sh erstellt und mit chmod u+x ausführbar gemacht.
# m h dom mon dow command
*/2 * * * * /home/servicedog/heatcontrol.sh
Für Ruhe und bei Bedarf ein kühlender Raspberry PI. So bleibt nur noch zusagen: Bleibt so cool wie euer Raspberry PI.
Cheers Jörg