Mit Relaiskarten lassen sich viele tolle Anwendungen realisieren, die du unbedingt ausprobieren solltest. Dieser Beitrag hilft dir bei deinen ersten Schritten der Relais-Steuerung!
Bei einem Relais handelt es sich um elektromagnetische bzw. elektromechanische Schalter, die meist über zwei Schaltregelungen (0/1) verfügen. Sie werden zum Ein-, Aus- und Umschalten von Stromkreisen genutzt. Auch und vor allem für Projekte im Bereich Internet of Things haben sich die Module als äußerst praktisch erwiesen. Der Vorteil dabei: Durch ein Relais kannst du mit deinem Raspberry Pi auch Module mit einer höheren Spannung steuern. Ohne Relais bekommt dein Pi bei maximal 5 Volt Probleme, seine GPIOs vertragen gar nur 3,3 Volt. Mit einem Relais-Modul müsst du hingegen nicht befürchten, dass dein Rechner durchbrennt. Wir zeigen dir die wichtigsten Grundlagen, die es braucht, um ein 4-Kanal-Relais-Modul mit einem Raspberry Pi zu steuern, mithilfe von HTML ein Web Interface zu bauen und mit Flask Framework einen Webserver zu erstellen.
- Das brauchst du für dein Projekt Relais-Steuerung
- Organisation ist das A und O: So realisierst du dein Projekt ganz leicht
- So bekommst du den Code auf deinen Raspberry Pi
- So verbindest du deinen Raspberry Pi mit dem 4-Kanal Modul
- So steuerst du deine Relais
- Wo findet die Relais-Steuerung Anwendung?
- Herlichen Glückwunsch, deine Relais-Steuerung ist nun fertig!
Das brauchst du für dein Projekt Relais-Steuerung
- Raspberry Pi 3 oder 4: Der vielfältig einsetzbare Minirechner besteht aus einer Platine, die nicht größer ist als eine Kreditkarte. Er dient als Steuerungsplattform.
- 4-Kanal Relais Modul oder 8-Kanal Relais Modul: Dieses Bauelement wird mit dem Raspberry Pi verbunden. Sämtliche Anschlüsse, die das Ansteuern der Relais ermöglichen, sind auf einer Stiftleiste angebracht. Der Anschluss an die Relais wird mit Schraubklemmen hergestellt.
- Draht Jumper Kabel für Raspberry Pi & Arduino: (Female To Female, 6 Stück): Mit diesen Dupont Kabeln kannst du deinen Raspberry Pi kinderleicht mit dem 4-Kanal Relais Modul verbinden.
- Raspberry OS: Das eigens für die Raspberry Pi Reihe entwickelte Betriebssystem ist essentiell für das Projekt.
- Python 3: Die Programmiersoftware wird benötigt, um die für das Projekt erforderlichen Codes einzugeben.
- Flask Framwork: Das in Python geschriebene Micro-Webframework verfügt über nützliche Tools und Funktionen für dein Projekt.
Alle für dieses Projekt notwendigen Artikel landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!

Organisation ist das A und O: So realisierst du dein Projekt ganz leicht
- Um später einen Webserver erstellen zu können, musst du zunächst Flask auf deinem Raspberry Pi installieren. Gebe dazu im Terminal Folgendes ein:
sudo apt-get install python3-pip &&
sudo apt-get install build-essential python-dev &&
sudo apt-get install python3-dev python3-rpi.gpio &&
sudo apt-get install python3-flask
- Du möchtest mit einem neuen Projekt loslegen? Dann solltest du erst einmal einen neuen Ordner erstellen, in dem du alle relevanten Dateien organisiert ablegen kannst. So solltest du auch bei diesem Projekt vorgehen.
mkdir Projekt
- Am besten erstellst du in diesem Ordner noch ein oder zwei weitere Unterordner. Einer der beiden sollte für CSS geeignet und daher statisch sein. In dem anderen Unterordner kannst du JavaScript-Dateien und Vorlagen für HTML-Dateien ablegen.
cd Projekt
mkdir templates
- Der neu erstellte Ordner „Projekt“ dient zur Speicherung des in Python geschriebenen Code, den wir oben angeführt haben, unter dem Namen relais.py.
- In dem darin befindlichen Unterordner „templates“ legst du den in HTML geschriebenen Code unter dem Namen index.html ab.
Die Ordnerstruktur sieht nun wie folgt aus:
/Projekt
relais.py
/templates
index.html
Um ein Web Interface zu kreieren und einen Webserver zu erstellen, sind ein in HTML verfasster Index-Code sowie der in Python geschriebene Relais-Code erforderlich. Diese stellen wir dir nachfolgend gerne zur Verfügung.
Es existieren zwei Möglichkeiten wie du den Code auf deinen Raspberry Pi bekommst. Entweder du tippst den Code direkt mit Hilfe von „vim“ in den Terminal deines Pi’s ein, oder du kopierst den Code von deinem Computer auf den Pi. Beide Alternativen erklären wir dir unterhalb der Codebeispiele.
Der HTML geschriebene Index-Code lautet:
<!DOCTYPE html>
<html>
<head>
<title>IOT Relais Steurung</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<style>
table ,td, tr {
width: 30%;
}
</style>
<body>
<table style="float:right; width:100%; max-width: 400px; height:300px;">
<tr style="text-align:center">
<td >
<h4 style="text-align: center; color:Tomato"><center>IOT Relais Steurung<center></h4>
</td>
<tr>
<tr>
<td style="text-align: center">
<form action="/1" method="POST">
<button id="1" class="rel">Relais1</button>
</br>
</form>
</td>
<tr>
<tr>
<td style="text-align: left">
<form action="/2" method="POST">
<button id="2" class="rel">Relais2</button>
</br>
</form>
</td>
<td style="text-align: right">
<form action="/4" method="POST">
<button id="4" class="rel">Relais4</button>
</br>
</form>
</td>
<td >
<form action="/5" method="POST">
<button id="5" class="rel">AUS</button>
</br>
</form>
</td>
<tr>
<tr>
<td style="text-align: center">
<form action="/3" method="POST">
<button id="3" class="rel">Relais3</button>
</br>
</form>
</td>
</tr>
</table>
</body>
</html>
Der in Python geschriebene Relais-Code lautet folgendermaßen:
from flask import Flask, render_template, request, redirect, url_for, make_response
import time
import RPi.GPIO as GPIO
pin1 =32 #Relais Pins Nummer
pin2 =16
pin3 =18
pin4 =22
GPIO.setmode(GPIO.BOARD) #GPIO MODE
GPIO.setup(pin1,GPIO.OUT) #Alle Relais Pins als OUTPUT
GPIO.setup(pin2,GPIO.OUT)
GPIO.setup(pin3,GPIO.OUT)
GPIO.setup(pin4,GPIO.OUT)
GPIO.output(pin1 , 1)
GPIO.output(pin2 , 1)
GPIO.output(pin3 , 1)
GPIO.output(pin4 , 1)
app = Flask(__name__) #Flask Server einrichten
#Rückgabe der Seite index.html wenn die IP-Adresse ausgewählt ist
@app.route('/')
def index():
return render_template('index.html')
#Jeder HTML-Taster ergibt einen Nummer zurück
@app.route('/<changepin>', methods=['POST'])
def reroute(changepin):
changePin = int(changepin) #cast changepin to an int
if changePin == 1:
print ("Relais1") #Relais1 AN
GPIO.output(pin1 ,0) #Low-Pegel
elif changePin == 2:
print ("Relais2") #Relais2 AN
GPIO.output(pin2 ,0)
elif changePin == 3:
print ("Relais3") #Relais3 AN
GPIO.output(pin3 ,0)
elif changePin == 4:
print ("Relais4") #Relais4 AN
GPIO.output(pin4 ,0)
else:
print("Off") #Alle Relais AUS
GPIO.output(pin1 , 1)
GPIO.output(pin2 , 1)
GPIO.output(pin3 , 1)
GPIO.output(pin4 , 1)
response = make_response(redirect(url_for('index')))
return(response)
app.run(debug=True, host='0.0.0.0', port=8000) #Einrichten des Servers im Debug-Modus für Port 8000
So bekommst du den Code auf deinen Raspberry Pi
Möglichkeit 1: Bearbeite deinen Code direkt auf dem Pi:
Installiere zunächst „Vim“ auf deinem Pi. Mit Vim kannst du Dateien innerhalb deines Terminals bearbeiten.
sudo apt-get install vim
Um den Code auf deinen Raspberry Pi zu bekommen, springst du im Terminal zunächst in den für die jeweilige Datei relevanten Ordner, den du zuvor angelegt hast.
/Projekt
relais.py
/templates
index.html
Um in den richtigen Ordner zu springen sind die folgenden Befehle hilfreich:
ls # Auflistung der Verzeichnisse sowie Inhalte
cd # Wechsel des Verzeichnisses
Im jeweiligen Verzeichnis erstellst du nun die Dateien mit den folgenden Befehlen:
cat > relais.py # dieser Befehl erstellt eine Python-Datei mit dem Namen relais.py
cat > index.html # dieser Befehl erstellt eine HTML-Datei mit dem Namen Index.html
Nun öffnest du mit dem Befehl vim eine der beiden Dateien und kopierst den Code in die Datei.
vim relais.py # dieser Befehl öffnen die relais.py Datei um sie zu bearbeiten
Möglichkeit 2: Kopiere deinen Code vom Notebook auf den Pi:
Wir empfehlen den Code von deinem Notebook aus auf deinen Pi zu kopieren, da dies deutlich einfacher ist. Dabei gehst du wie folgt vor:
Aktiviere den SSH Zugriff in der Konfiguration des Raspberry Pi. Mit dem folgenden Befehl gelangst du in die Konfiguration deines Raspberrys, wo du den SSH-Zugriff aktivieren kannst:
sudo raspi-config # diesen Befehl musst du im Terminal deines Raspberrys eingeben
Nun musst du dir noch WinSCP herunterladen und auf deinem Notebook installieren. Dies kannst du hier machen.
Solltest du auf deinem Laptop Linux nutzen, lade dir bitte FileZilla anstatt WindSCP herunter. Das kannst du hier machen.
Folgende Angaben/Einstellungen sind bei deinem SSH-Client eventuell zu ändern:
Host : hier musst du die IP-Adresse oder DynDNS Domain deines Pis angeben.
username : pi (unter raspian)
password: raspberry
SSH-Port: 22
Wenn du die richtige IP-Adresse deines Raspberry Pi nicht kennst, benötigst du unter Windows einen IP-Scanner wie etwa den „Advanced IP Scanner“. Unter Linux kannst du die IP deines Pis folgendermaßen herausfinden.
ping raspberrypi.local
Alternativ kannst du auch arp-scan verwenden. Arp-Scan wird folgendermaßen auf deinem Linuxsystem installiert.
sudo apt-get update
sudo apt-get install arp-scan
Um arp-scan zu öffnen gibst du folgenden Befehl in den Terminal ein:
sudo arp-scan -l
Nachdem du dein Notebook mit dem Raspberry verbunden hast, kannst du nun auf deinen Pi zugreifen.
So verbindest du deinen Raspberry Pi mit dem 4-Kanal Modul
Nicht weniger wichtig als die richtige Programmierung der Software ist die Hardware für dein Projekt. Damit sich das 4-Kanal Modul reibungslos steuern lässt, bedarf es einiger Kniffe. Beim Raspberry Pi liegen die GPIOs (General Purpose Input Output) als Pin in Form einer Stiftleiste vor. Über die oben genannten Draht Jumper Kabel lässt sich der Rechner mit dem 4-Kanal Modul verbinden. Dabei ist es wichtig, dass du stets die richtigen Ein- und Ausgänge verwendest. Die Tatsache, dass die Pins auf dem Modul jeweils mit einer eigenen Bezeichnung versehen wurden, erleichtert dir jedoch die Zuordnung erheblich. Die individuellen Eigenschaften der jeweiligen Pins deines Raspberry Pi kannst du der Produktbeschreibung entnehmen.
Diese solltest du dir auch aufmerksam durchlesen, damit du sowohl für deinen Rechner als auch für das Modul das richtige Equipment verwendest. Denn: So manche Module sind nur für bestimmte Kenngrößen und Volt-Grenzwerte geeignet. Wenn du ein elektrisches Bauteil wie zum Beispiel ein Kabel verwendest, das nicht für dein System geeignet ist, wird die Schaltung möglicherweise nicht funktionieren, und im schlimmsten Fall kann das ganze System Schaden nehmen.
Die Funktion der Kanäle ist relativ simpel erklärt: Jeder einzelne Kanal ist in der Lage, einen bestimmten Zustand zu steuern. Je nachdem, welches Vorhaben du mit dem Relais realisieren möchtest und wie komplex sich dieses gestaltet, bietet sich also auch ein Modul mit mehr oder weniger als vier Kanälen an.

Das 8-Kanal Relaiskarte unterschiedet sich von der kleineren Version nur durch die zusätzlichen Pins IN5 bis IN8, die zu den vier zusätzlichen Relais gehören.
So steuerst du deine Relais
Jetzt möchtest du natürlich deine Relais steuern und spannende Anwendungen realisieren. Um das Programm auf dem Pi zu starten gib folgenden Befehl in den Terminal deines Raspberrys ein:
python 3 relais.py
Wen du lokal vom Pi die grafische Benutzeroberfläche zur Steuerung der Relais laden möchtest gib folgendes in deinen Browser ein: 0.0.0.0:8000
Solltest du dieses vom Smartphone oder vom Notebook durchführen, musst du die Ip Adresse deines Raspberry Pis eingeben plus den Port: Beispielsweise 192.168.1.14:8000
Wenn du nun die Ip-Adresse deines Raspberry zusammen mit dem Port in deinen Browser eingibst siehst du folgendes Interface:

Selbstverständlich kannst du dein Interface zur Relais-Steuerung noch schöner gestalten, indem du die index.html Datei bearbeitest und entweder CSS intern oder als externe Datei hinzufügst.
Wo findet die Relais-Steuerung Anwendung?
Relais werden in ganz unterschiedlichen Bereichen eingesetzt. Im industriellen Gewerbe werden sie häufig in Schaltschränken großer Maschinenhallen genutzt. Zudem sind die praktischen Schalter unter anderem in der elektronischen Steuerung von Fahrzeugen verbaut. Relais dienen hier beispielsweise als Taktgeber für Blinker und Scheibenwischer, stellen aber auch bei der Steuerung der Benzinpumpe einen wichtigen Faktor dar.
Besonders weit verbreitet ist die Relais-Steuerung jedoch als wichtige Komponente bei Alarmanlagen, genauer gesagt bei der Umsetzung von Sicherheitsschaltungen. Aber auch als praktische Hilfe im privaten Haushalt finden Relais Anwendung. Insbesondere bei der zentralen Steuerung von Beleuchtung und Rollläden hat sich die Technologie als clevere Lösung erwiesen. Die Vorteile der Schaltvorrichtung: In der Regel erwärmen sich Relais nur in geringem Ausmaß und benötigen daher keine Kühlung. Zudem sind Relais verhältnismäßig günstig und leicht zu verbauen.
Herlichen Glückwunsch, deine Relais-Steuerung ist nun fertig!
Wir wünschen dir viel Spaß mit deinen Projekten zum Thema Relais-Steuerung. Alle bei uns im Shop erhältlichen Relaiskarten findest du hier.
Dein BerryBase-Team!
Bei der dargestellten Verkabelung wird doch das Relais mit 5V bestromt. Damit zerstört man sich doch die GPIOs des RPI soweit es mir bekannt ist => probiert habe ich es noch nie 😉
Das sind Logikpegel Eingänge mit Optokoppler und Transistor Treiber am Relais, da geht nichts kaputt. Siehe auch Schaltplan: https://www.berrybase.de/media/pdf/7f/36/c6/produkt_downloads-Schaltplan-RELM-4.pdf
Danke für den Beitrag … und das Schaltbild.
Wie groß ist den der Vorwiderstand vom Optokoppler?
In anderen Beiträgen wurde der Koppler mit 3,3V versorgt und der JD-VCC-Anschluss, bei geöffneten Jumper, geht an die 5V vom Raspberry.
Ein Widerstand zusätzlich zu den Optokoppler hilft zu mindestens Strom zu sparen …
Hallo zusammen,
spricht technisch etwas dagegen, zur Ansteuerung der Relais einen Pi Zero zu verwenden?
Gruß, Ralf
Das funktioniert auch mit einem Raspberry Zero.
Aber statt python 3 relais.py
sollte man python3 relais.py verwenden.
Die Relais funktionieren bei mir nur richtig mit einem Treiber-Transistor.
Vermutlich ist die Stromstärke der GPIO zu gering.
vielen Dank, hat direkt funktioniert
Raspi2 B v1.1
Hallo,
wie muss ich einen 12V-Motor an einem oder mehreren Relais anschließen, damit ich mittels Python die Drehrichtung ändern kann?
Ich habe mal gelesen, dass man die Relais auch als Switch benutzen kann. Allerdings weiß ich nicht, ob dies mit meinem Vorhaben „kompatibel“ ist.
Hallo Peer,
schön, dass dich der Artikel zum basteln animieren konnte.
Grundsätzlich ist es möglich einen 12V-Motor mittels Relais zu steuern, allerdings würde ich dir davon abraten.
Es gibt verschiedene Arten von Elektromotoren aber die beiden wichtigsten Vertreter sind Gleichstrom- und Asynchronmotoren.
Da letztere eine dreiphasige Wechselspannung benötigen, eignet sich ein Relais nur für Gleichstrommotoren.
Aber auch in diesem Fall wäre das Relais eher eine suboptimale Wahl, da damit nur eine binäre Steuerung (An / Aus) möglich wäre.
T.L.D.R
Der beste Weg einen einen Elektromotor stufenlos und programmatisch zu steuern wäre ein Motor Driver, welcher durch eine geringe Steuerspannung die richtige Ausgangsspannung erzeugt. Wichtig ist dabei nur, dass du den richtigen Driver für deinen Motor verwendest (DC Motor -> DC Motor Driver,…)
In unserem Sortiment findest du bestimmt den richtigen Driver!
https://www.berrybase.de/sensoren-module/motor-robotik/
Viele Grüße
Fabio
Hallo ich habe mit Anleitung problem,wie ich die Software lade und instaliere ich bekomme sie nicht zum laufen?.Die Ordner sind leer und es funktioniert nichts .Ich schiebe Frust!.
Um Hilfe wäre ich dankbar.
Peter
Folgende Fehlermeldungen:
chefe@raspberrypi:/Project $ python 3 relais.py
python: can’t open file ‚3‘: [Errno 2] No such file or directory
chefe@raspberrypi:/Project $ python3 relais.py
Traceback (most recent call last):
File „relais.py“, line 14, in
GPIO.setup(pin1,GPIO.OUT) #Alle Relais Pins als OUTPUT
RuntimeError: Not running on a RPi!
Läuft nicht auf einem Raspberry…?
weil du python3 auseinandergeschrieben hast… Deshalb versucht du mit Python eine Datei Namens 3 zu öffnen. Diese gibt es natürlich nicht…
Admin Edit: Fehler in Blogartikel korrigiert.
Danke, genau das, wonach ich gesucht hatte!
Ich bekomme den folgenden Fehlercode.
Kann mir den bitte jemand erklären?
/home/imsservice/Projekt/relais.py:9: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin1,GPIO.OUT) #Alle Relais Pins als OUTPUT
/home/imsservice/Projekt/relais.py:10: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin2,GPIO.OUT)
/home/imsservice/Projekt/relais.py:11: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin3,GPIO.OUT)
/home/imsservice/Projekt/relais.py:12: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin4,GPIO.OUT)
* Serving Flask app „relais“ (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
Traceback (most recent call last):
File „/home/imsservice/Projekt/relais.py“, line 51, in
app.run(debug=True, host=’0.0.0.0′, port=8000) #Einrichten des Servers im Debug-Modus für Port 8000
File „/usr/lib/python3/dist-packages/flask/app.py“, line 990, in run
run_simple(host, port, self, **options)
File „/usr/lib/python3/dist-packages/werkzeug/serving.py“, line 1030, in run_simple
s.bind(server_address)
OSError: [Errno 98] Address already in use
Muss ich das Script jetzt jedesmal an der Shell starten um auf das Template zuzugreifen? Was hat es mit dem Debugmodus auf sich ? Kann ich den auskommentieren ?
Vielen Dank für eure Antwort 😉
Hallo Greg,
bei jedem Neustart vom Pi oder beenden vom Terminal musst du das Skript erst einmal neu starten.
Abhilfe würde es schaffen, wenn du einen cron-job erstellst. Damit kannst du dann sagen, wenn der Pi startet, soll automatisch auch das Skript gestartet werden (im Hintergrund). Damit kannst du dann aber nicht mehr so einfach im Terminal auf die Ausgaben zugreifen.
Beim Thema Debug-Mode verweise ich einmal auf die Dokumentation „The flask run command can do more than just start the development server. By enabling debug mode, the server will automatically reload if code changes, and will show an interactive debugger in the browser if an error occurs during a request.“
Ganz klar ist dort auch beschrieben, diesen nicht produktiv zu verwenden ist. Es sollte an der Stelle reichen:
– entweder das Flag „debug“ im run-Command auf false zu setzen
– oder dieses Flag zu löschen (hier bin ich mir aber nicht sicher, ob es gefordert wird)
Ich hoffe ich konnte an der Stelle weiterhelfen.
Gruß
Jörn
Hallo,
ich habe die o.g. Anleitung in Verbindung mit einem RPi5 versucht umzusetzten, hier scheint es jedoch einige Probleme mit der GPIO Steuerung zu geben, auch Python 3 arbeitet nicht einwandfrei.
Ich erhalte folgenden traceback:
* Serving Flask app ‚relais‘
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8000
* Running on http://192.168.8.119:8000
Press CTRL+C to quit
* Restarting with stat
Traceback (most recent call last):
File „/home/admin11/relais/relais.py“, line 14, in
GPIO.setup(pin1,GPIO.OUT) #Alle Relais Pins als OUTPUT
^^^^^^^^^^^^^^^^^^^^^^^^^
File „/home/admin11/.local/lib/python3.11/site-packages/RPi/GPIO/__init__.py“, line 704, in setup
initial = _check(lgpio.gpio_read(_chip, gpio))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File „/usr/lib/python3/dist-packages/lgpio.py“, line 903, in gpio_read
return _u2i(_lgpio._gpio_read(handle&0xffff, gpio))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File „/usr/lib/python3/dist-packages/lgpio.py“, line 458, in _u2i
raise error(error_text(v))
lgpio.error: ‚GPIO not allocated‘
Könnt Ihr mich hier unterstützen, das wäre genial!
Gruß Ben