Raspberry Pi - PC817 Optokoppler: 12V/24V DC-Eingangssignal überwachen
Die GPIO-Pins eines Raspberry Pi arbeiten mit 3,3V und sind NICHT 5V-tolerant. Ein verirrter 12V- oder 24V-Draht, der die 40-polige Stiftleiste berührt, beschädigt daher nicht nur einen Pin – meist zerstört er das ganze Board, einschließlich SD-Kartensteckplatz, Ethernet-Anschluss und allem anderen darauf. Ein PC817-Optokoppler beseitigt dieses Risiko vollständig: Die externe Spannung erreicht den Pi nie, weil das Signal die Lücke als Licht statt als Strom überquert.
Die meisten, die so ein Bauteil verdrahten, stellen eigentlich eine einfache Frage: Läuft diese Maschine, Pumpe, Heizung oder Lampe gerade wirklich? Ein Raspberry Pi ist eine gute Antwort darauf, denn er kann wochenlang eingeschaltet bleiben und aufzeichnen, was er beobachtet hat. Dieses Tutorial zeigt, wie Sie einen Raspberry Pi in einen ständig laufenden Knoten verwandeln, der eine isolierte 12V- oder 24V-Leitung überwacht und darüber Buch führt. Im Detail lernen wir:
- Warum ein Optokoppler der sicherste Weg ist, ein 12V/24V-Signal mit einem Raspberry Pi zu lesen
- Welche der drei PC817-Modulvarianten – 3-5V, 12V oder 24V – zu der Leitung passt, die Sie überwachen möchten
- Wie man ein fertiges PC817-Isolationsmodul an den Raspberry Pi anschließt und wie man dasselbe bei Bedarf aus dem nackten Chip aufbaut
- Wie Sie in weniger als einer Minute herausfinden, ob Ihr Modul Active-LOW oder Active-HIGH ist, und wie Sie den Code mit einer einzigen Konstante umstellen
- Wie man den PC817 parallel zu einem Gerät anschließt, damit der Pi verfolgen kann, ob dieses Gerät ein- oder ausgeschaltet ist
- Wie man den Raspberry Pi in Python programmiert, um den isolierten Eingang zu lesen
- Wie man jede Änderung des externen Signals mit Zeitstempel in eine Datei protokolliert, sodass eine Laufzeitaufzeichnung entsteht
Wir empfehlen:
- Lesen Sie zuerst das Tutorial Raspberry Pi - Taster, falls Sie noch nie einen GPIO-Pin als Eingang mit Pull-up konfiguriert haben. Der PC817 wird genau auf dieselbe Weise gelesen.
- Lesen Sie stattdessen das Tutorial Raspberry Pi - Endschalter, wenn Sie einen potenzialfreien mechanischen Kontakt erkennen möchten, der überhaupt keine Spannung führt. In diesem Fall wird kein Optokoppler benötigt.
- Lesen Sie das Tutorial Raspberry Pi - Daten mit Zeitstempel auf SD-Karte protokollieren, wenn Sie den Pi als langfristigen Protokollierungsknoten laufen lassen möchten.
- Lesen Sie das Tutorial Raspberry Pi - Relais, wenn Sie eine 12V/24V-Last schalten statt lesen möchten. Ein Relais ist das ausgangsseitige Gegenstück zum Optokoppler.

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Die Modulvarianten sind dieselbe Platine in verschiedenen Ausführungen – Sie kaufen die, die zu Ihrem Signal passt, nicht mehrere.
Über den PC817-Optokoppler
Der PC817 ist ein Fotokoppler, auch Opto-Isolator oder Optokoppler genannt. In seinem kleinen schwarzen Gehäuse befindet sich eine Infrarot-LED, die über einen isolierenden Spalt hinweg einem Fototransistor gegenübersteht. Wenn Strom durch die LED fließt, schaltet ihr Licht den Fototransistor ein. Da nur Licht den Spalt überquert, bleiben die beiden Seiten des Chips elektrisch voneinander getrennt – und genau das schützt den Raspberry Pi.
Die technischen Daten des PC817 sind:
- Gehäuse: 4-poliges DIP, Pin 1 mit einem Punkt oder einer Kerbe markiert
- Durchlassspannung der Eingangs-LED (Vf): typisch etwa 1,2 V, maximal 1,4 V
- Durchlassstrom der Eingangs-LED (If): maximal 20 mA dauerhaft, 5 mA bis 20 mA im Normalbetrieb, 10 mA ist ein guter Zielwert
- Kollektor-Emitter-Spannung des Ausgangs (VCEO): maximal 35 V
- Kollektorstrom des Ausgangs (IC): maximal 50 mA
- Kollektor-Verlustleistung: 150 mW
- Isolationsspannung: 5000 Vrms für 1 Minute
- Stromübertragungsverhältnis (CTR): 50% bis 600% je nach Klasse (Klasse A 80-160%, Klasse B 130-260%, Klasse C 200-400%, Klasse D 300-600%)
- Schaltgeschwindigkeit: Anstiegszeit etwa 4 us, Abfallzeit etwa 3 us
- Betriebstemperatur: -30 °C bis +100 °C
Die Isolationsspannung von 5000 Vrms ist der für einen Raspberry Pi entscheidende Wert. Er bedeutet, dass der 12V- oder 24V-Stromkreis fünftausend Volt Isolierung durchschlagen müsste, bevor er die Stiftleiste erreichen könnte.
Das PC817-Optokoppler-Isolationsmodul
Der praktische Weg, einen PC817 mit einem Raspberry Pi zu verwenden, ist ein fertiges Isolationsmodul. Es trägt denselben Chip auf einer kleinen Platine zusammen mit einem Vorwiderstand, einer Status-LED und Schraubklemmen, sodass nichts berechnet oder gelötet werden muss:

- Schraubklemmen IN+ und IN-: die Eingangsseite. Das 12V/24V-Signal muss an IN+ angeschlossen werden und die Masse desselben 12V/24V-Stromkreises an IN-.
- VCC-Pin: muss mit 3,3V (Pin 1) des Raspberry Pi verbunden werden.
- GND-Pin: muss mit einem Masse-Pin des Raspberry Pi verbunden werden, zum Beispiel GND (Pin 6).
- OUT-Pin (manchmal als DO oder OUT1 bezeichnet): muss mit einem GPIO-Pin des Raspberry Pi verbunden werden, zum Beispiel GPIO 12 (Pin 32).
Die Status-LED auf der Platine sollten Sie kennen, bevor Sie etwas verdrahten: Sie leuchtet, wenn die Eingangsseite unter Spannung steht, und zeigt Ihnen so, dass die Eingangshälfte funktioniert, noch bevor der Raspberry Pi eingeschaltet ist.
※ Notiz:
Die Anordnung der Pins eines Moduls kann je nach Hersteller unterschiedlich sein. Manche Platinen vertauschen VCC und GND, und manche beschriften die Eingangsklemmen mit + und - statt mit IN+ und IN-. Verlassen Sie sich immer auf die Beschriftung Ihres eigenen Moduls statt auf das Bild oben, und schauen Sie genau hin, bevor Sie etwas mit Spannung versorgen.
Welches Optokoppler-Modul brauche ich – 3-5V, 12V oder 24V?
Dies ist die einzige Kaufentscheidung auf der ganzen Seite, und man kann sie leicht falsch treffen, weil alle drei Varianten identisch aussehen. Der Vorwiderstand ist bereits auf der Platine bestückt und für EINE Eingangsspannung ausgelegt. Deshalb werden die Module als drei separate Versionen verkauft:
| Die zu überwachende Leitung | Das zu kaufende Modul | Typisches Beispiel |
|---|---|---|
| Ein 3,3V- oder 5V-Logiksignal | das 3-5V-Modul | ein Sensorausgang, ein 5V-SPS-Signal, ein anderer Mikrocontroller |
| Ein 12V-DC-Signal | das 12V-Modul | ein Kfz-Stromkreis, eine 12V-Pumpe oder ein 12V-Lüfter, eine Alarmzentrale |
| Ein 24V-DC-Signal | das 24V-Modul | ein Ausgang einer Industriemaschine, ein USV-Alarmkontakt, ein 24V-Magnetventil |
Zwei Fehler sollten Sie vermeiden, denn sie kosten entweder ein Modul oder einen Nachmittag:
- Wird ein 12V-Modul an einer 24V-Leitung betrieben, fließt etwa der doppelte vorgesehene Strom durch seine interne LED, was sie beschädigt.
- Wird ein 24V-Modul an einer 12V-Leitung betrieben, wird die LED zu schwach angesteuert, sodass der Ausgang verspätet, unzuverlässig oder gar nicht schaltet – und ein sporadisch funktionierender Eingang ist weit schwerer zu diagnostizieren als ein toter.
Wenn Ihr Signal zwischen den genannten Spannungen liegt oder Sie nicht sicher sind, welche Spannung es hat, messen Sie es vor der Bestellung mit einem Multimeter. Bei einem Modul berechnen Sie nichts, Sie wählen die richtige Variante – und diese Wahl ist beim Modul das Gegenstück zur manuellen Auswahl des Widerstandswerts.
Die 3-5V-Variante überrascht manche: Warum sollte man ein Signal isolieren, das ein GPIO-Pin direkt lesen könnte? Weil es bei der Isolation darum geht, den Massepfad zu unterbrechen, nicht nur um hohe Spannung. Sie lohnt sich immer dann, wenn die beiden Stromkreise aus getrennten Netzteilen versorgt werden, an entgegengesetzten Enden eines langen Kabels sitzen oder einer von ihnen elektrisch verrauscht ist – etwa ein Motortreiber oder die Niederspannungs-Steuerplatine in einem netzbetriebenen Gerät. Beim Raspberry Pi wiegt dieses Argument schwerer als sonst, denn Sie schützen einen ganzen Linux-Computer mit einer SD-Karte darin.
Funktionsweise
Der GPIO-Pin des Raspberry Pi wird als Eingang mit aktiviertem internen Pull-up konfiguriert, sodass er auf 3,3V liegt, solange nichts ihn herunterzieht. Der Fototransistor ist das, was ihn herunterzieht.
| Externes 12V/24V-Signal | Interne LED | Fototransistor | Raspberry Pi GPIO-Messwert |
|---|---|---|---|
| VORHANDEN | an | leitend | LOW |
| NICHT VORHANDEN | aus | nicht leitend | HIGH |
Der Messwert ist also INVERTIERT: Der Pin liest LOW, wenn das externe Signal vorhanden ist, und HIGH, wenn es fehlt. Das überrascht beim ersten Mal fast jeden. Der Code auf dieser Seite kehrt es wieder um, sodass eine Variable namens signal_active True ist, wenn die 12V/24V-Leitung tatsächlich unter Spannung steht.
Der Raspberry Pi hat per Software zuschaltbare interne Pull-up-Widerstände an seinen GPIO-Pins, sodass kein externer Pull-up-Widerstand hinzugefügt werden muss. Er wird mit einem Argument in GPIO.setup() aktiviert.
Ist Ihr Optokoppler-Modul Active-LOW oder Active-HIGH?
Die obige Tabelle ist gesicherte Physik für den nackten Chip, wenn er wie auf dieser Seite beschrieben verdrahtet ist: Mit einem Pull-up am GPIO-Pin zieht der Fototransistor den Pin herunter, also bedeutet Signal vorhanden = LOW.
Bei einem Modul sieht es anders aus. Manche Hersteller fügen auf der Platine eine invertierende Stufe hinzu, sodass der OUT-Pin dem Eingang folgt, statt ihm entgegengesetzt zu sein. Beide Arten sind im Handel, sie sehen gleich aus, und aus dem Angebot des Verkäufers geht selten hervor, welche Sie haben. Gehen Sie also nicht von etwas aus – nehmen Sie sich eine Minute, um es herauszufinden:
- Verdrahten Sie das Modul wie unten gezeigt mit dem Raspberry Pi und führen Sie das erste Skript auf dieser Seite aus, das den Rohzustand des Pins meldet.
- Notieren Sie, was das Terminal ausgibt, während an den Eingangsschraubklemmen nichts angeschlossen ist.
- Legen Sie nun Spannung an die Eingangsseite an und notieren Sie, was stattdessen ausgegeben wird.
- Was bei vorhandenem Signal erscheint, ist der aktive Pegel Ihres Moduls. Liest der Pin dann LOW, ist das Modul Active-LOW; liest er HIGH, ist das Modul Active-HIGH.
- Gleichen Sie es mit der Status-LED auf der Platine ab: Diese LED leuchtet, wenn die Eingangsseite unter Spannung steht, daher sollten das Aufleuchten der LED und das Erreichen des aktiven Pegels am Pin immer gleichzeitig geschehen. Wenn die LED leuchtet und sich am Pi überhaupt nichts ändert, liegt das Problem auf der Ausgangsseite – VCC, GND oder die OUT-Leitung – und nicht auf der Eingangsseite.
Wie auch immer es bei Ihnen ausfällt, die Korrektur ist ein einziges Wort im Code. Beide Python-Skripte auf dieser Seite beginnen mit:
MODULE_ACTIVE_LOW = True
Lassen Sie es für ein Active-LOW-Modul auf True und setzen Sie es für ein Active-HIGH-Modul auf False. Sonst muss in keinem der beiden Skripte etwas geändert werden, da jeder Messwert von dieser einen Konstante abgeleitet wird.
Schaltplan
Anschluss eines PC817-Optokoppler-Isolationsmoduls an den Raspberry Pi

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Um Ihren Verdrahtungsaufbau zu vereinfachen und zu organisieren, empfehlen wir die Verwendung eines Schraubklemmenblock-Shields für Raspberry Pi. Dieses Shield gewährleistet sicherere und besser verwaltbare Verbindungen, wie unten gezeigt:

Die Verbindungen sind:
- Die Plusleitung des externen 12V/24V-Signals an die Schraubklemme IN+ des Moduls
- Die Masse des externen 12V/24V-Stromkreises an die Schraubklemme IN- des Moduls
- Der VCC-Pin des Moduls an 3,3V (Pin 1) des Raspberry Pi
- Der GND-Pin des Moduls an GND (Pin 6) des Raspberry Pi
- Der OUT-Pin des Moduls an GPIO 12 (Pin 32) des Raspberry Pi
In dieser Liste taucht nirgends ein Vorwiderstand auf, und genau das ist der Sinn eines Moduls – solange die Variante zur Spannung an den Eingangsklemmen passt, ist der Widerstand bereits auf der Platine.
※ Notiz:
Versorgen Sie die Ausgangsseite des Optokopplers über 3,3V (Pin 1 oder Pin 17) des Raspberry Pi, NICHT über 5V (Pin 2 oder Pin 4). Ein GPIO-Pin ist nur für 3,3V ausgelegt, und ein mit 5V versorgtes Modul kann 5V an seinem OUT-Pin ausgeben.
※ Notiz:
Die Masse des 12V/24V-Stromkreises darf NICHT mit der Masse des Raspberry Pi verbunden werden. Diese beiden Massen müssen getrennt bleiben – diese Trennung ist der ganze Grund, warum der PC817 da ist. Werden die beiden Massen verbunden, schaltet die Schaltung zwar weiterhin und der Code funktioniert noch, aber die Isolation ist weg und der Raspberry Pi ist wieder allem ausgesetzt, was auf der 12V/24V-Seite passiert.
Optional – Denselben Eingang aus dem nackten PC817-Chip aufbauen
Wenn Sie lieber selbst löten, erledigt der nackte Chip dieselbe Aufgabe günstiger – Sie übernehmen einfach wieder die Widerstandsauswahl, die das Modul für Sie getroffen hat.
Der Chip ist ein 4-poliges DIP, Pin 1 ist mit einem Punkt oder einer Kerbe markiert und die Pins sind von dort aus gegen den Uhrzeigersinn nummeriert.

Die Verbindungen sind:
- Die Plusleitung des externen 12V/24V-Signals an ein Bein des Vorwiderstands
- Das andere Bein des Vorwiderstands an PC817 Pin 1 – Anode (A)
- PC817 Pin 2 – Kathode (K) an die Masse des externen 12V/24V-Stromkreises, NICHT an die Masse des Raspberry Pi
- PC817 Pin 4 – Kollektor (C) an GPIO 12 (Pin 32) des Raspberry Pi
- PC817 Pin 3 – Emitter (E) an GND (Pin 6) des Raspberry Pi
Die Pins 1 und 2 sind die Eingangsseite, die Pins 3 und 4 die Ausgangsseite, ohne elektrische Verbindung dazwischen. Dimensionieren Sie den Widerstand mit R = (Vin - 1.2) / 0.01 für einen LED-Zielstrom von 10 mA: 220 Ω bei 3,3V, 390 Ω bei 5V, 1 kΩ bei 12V, 2,2 kΩ bei 24V (bei 24V ein 1/2-W-Bauteil). Bleibt ein 1-kΩ-Widerstand an einer 24V-Leitung eingesetzt, fließen etwa 22,8 mA durch eine LED, die für 20 mA ausgelegt ist – die Nackt-Chip-Version davon, ein 12V-Modul an einer 24V-Leitung zu betreiben. Ein auf diese Weise verdrahteter nackter Chip ist immer Active-LOW.
Den PC817 parallel zum zu überwachenden Gerät anschließen
Die obigen Schaltpläne zeigen den Eingang aus einer eigenen Spannungsquelle gespeist, wie man es auf dem Labortisch tun würde. In einer realen Installation wird die Eingangsseite überhaupt nicht von einer eigenen Quelle gespeist – sie wird ÜBER das Gerät, dessen Zustand Sie wissen möchten, parallel dazu abgegriffen. Als Beispiel dient hier der 24V-Alarmkontakt einer Maschine oder einer USV, also eine Leitung, die bereits mit einer Signalleuchte oder einem Schaltfeld verbunden ist und die Sie nun zusätzlich vom Raspberry Pi überwachen lassen möchten.
WARNING
Schalten Sie den Optokoppler-Eingang niemals in REIHE mit dem Gerät. In Reihe wird der gesamte Laststrom dieses Geräts – einer Relaisspule, eines Schützes, einer Lampe, eines Motors – durch die interne LED gezwungen, und die LED wird in dem Moment zerstört, in dem das Gerät eingeschaltet wird. Der Eingang wird parallel über die beiden Anschlüsse des Geräts gelegt, und im bestehenden Stromkreis wird nichts getrennt oder umgeleitet.
Mit dem 24V-Maschinen- oder USV-Alarmkontakt als Beispiel und einem 24V-Modul dafür sind die Verbindungen:
- Der positive (geschaltete) Anschluss des 24V-Alarmkontakts an die Schraubklemme IN+ des Moduls
- Der negative (Rückleiter-)Anschluss des 24V-Alarmkontakts an die Schraubklemme IN- des Moduls
- Der VCC-Pin des Moduls an 3,3V (Pin 1) des Raspberry Pi
- Der GND-Pin des Moduls an GND (Pin 6) des Raspberry Pi
- Der OUT-Pin des Moduls an GPIO 12 (Pin 32) des Raspberry Pi
- Die bestehende Verdrahtung des Alarmkontakts bleibt genau so, wie sie war – nichts wird abgeklemmt
Ein paralleler Abgriff mit einem Modul benötigt keinen eigenen Vorwiderstand; der auf der Platine ist bereits für 24V dimensioniert, und genau deshalb muss die Variante zur abgegriffenen Leitung passen. Beim Aufbau mit dem nackten Chip erhält derselbe Abgriff einen 2,2-kΩ-Widerstand vor Pin 1.
Der Abgriff zieht etwa 10 mA. Verglichen mit dem, was eine Relaisspule, eine Lampe, ein Magnetventil oder ein Motor aufnimmt, ist das praktisch nichts, sodass das Gerät genau wie zuvor weiterarbeitet. Die Messung ist rückwirkungsfrei und rein lesend.
Die Polarität ist wichtig, denn die Eingangsseite ist eine LED, und eine LED leitet nur in eine Richtung. Vertauschen Sie IN+ und IN- – oder bei einem nackten Chip Pin 1 und Pin 2 – und die Schaltung wird einfach nie einschalten, ohne ein anderes Symptom, an dem man sich orientieren könnte. Prüfen Sie vor dem Verdrahten, welche Seite des Abgriffs positiv ist.
※ Notiz:
Ein induktives Gerät benötigt eine Klemmdiode. Eine Relaisspule, ein Magnet, ein Schütz, ein Ventil oder ein Motor erzeugt in dem Moment, in dem er abschaltet, eine große Rückspannungsspitze, und die Eingangs-LED des PC817 ist nur für 6 V in Sperrrichtung ausgelegt, sodass diese Spitze sie zerstören kann. Setzen Sie eine gewöhnliche Diode antiparallel direkt über die Eingangsklemmen – Kathode der Diode an IN+, Anode der Diode an IN- (bei einem nackten Chip Kathode an Pin 1 und Anode an Pin 2). Im Normalbetrieb ist diese Diode in Sperrrichtung gepolt und tut überhaupt nichts; bei einer Spitze leitet sie und begrenzt die Rückspannung auf deutlich unter ein Volt. Eine 1N4148 eignet sich für einen kleinen Abgriff, eine 1N4007 für einen stärkeren.
Manche Halbleiterausgänge haben Leckströme. SPS-Transistorausgänge, Triac-Ausgänge und LED-Lampentreiber können auch im ausgeschalteten Zustand einen kleinen Strom durchlassen, und genug davon bringt die interne LED teilweise zum Leuchten – dann meldet der Raspberry Pi das Gerät als EIN, obwohl es tatsächlich im Leerlauf ist. Das Symptom ist leicht zu erkennen: Der Messwert kehrt nie in den inaktiven Zustand zurück, und bei einem Modul glimmt die Status-LED schwach, statt zu erlöschen. Abhilfe schafft ein Ableitwiderstand von etwa 4,7 kΩ bis 10 kΩ parallel zu den Eingangsklemmen des Optokopplers, sodass der Leckstrom durch den Widerstand statt durch die LED fließt.
Dies ist außerdem ein reiner DC-Abgriff: Der PC817-Eingang ist eine einzelne LED und reagiert nur auf eine Polarität, daher ist er das falsche Bauteil, um eine AC-Leitung zu erfassen – dafür braucht man einen Optokoppler, dessen Eingangsstufe zwei antiparallele LEDs enthält.
Da der Abgriff über dem Gerät liegt und nicht davor, liest der Raspberry Pi den tatsächlichen Zustand dieses Geräts, ganz gleich, was ihn verursacht hat – ein Thermostat, ein Schwimmerschalter, eine SPS, ein Timer oder jemand, der am anderen Ende des Gebäudes einen Taster drückt. Er folgt dem Gerät genauso zuverlässig, wenn es überhaupt nicht einschaltet, und genau das macht die Protokollierung lohnenswert: Laufzeitsummen, Fehlerwarnungen und Prüfungen wie „Ist es tatsächlich angelaufen?“ ergeben sich alle aus demselben Abgriff. Eine ehrliche Einschränkung: Dies sagt Ihnen, dass das Gerät unter Spannung steht, nicht, dass es seine Aufgabe erfüllt. Ein blockierter Motor oder eine durchgebrannte Heizung nimmt weiterhin Strom auf und wird weiterhin als EIN gelesen.
Raspberry Pi Code – Ein isoliertes 12V/24V-Signal über den PC817-Optokoppler lesen
Für dieses Projekt wird keine Bibliothek benötigt. Der PC817 wandelt die externe Spannung in einen einfachen HIGH/LOW-Pegel um, daher genügt RPi.GPIO allein.
Schnelle Schritte
- Verdrahten Sie den PC817 wie im obigen Modul-Schaltplan gezeigt mit Ihrem Raspberry Pi und prüfen Sie nochmals, dass die 12V/24V-Masse den Pi nicht berührt.
- Stellen Sie sicher, dass Raspberry Pi OS oder ein anderes mit dem Raspberry Pi kompatibles Betriebssystem auf Ihrem Pi installiert ist.
- Stellen Sie sicher, dass Ihr Raspberry Pi mit demselben lokalen Netzwerk wie Ihr PC verbunden ist.
- Stellen Sie sicher, dass Ihr Raspberry Pi mit dem Internet verbunden ist, falls Sie Bibliotheken installieren müssen.
- Wenn Sie den Raspberry Pi zum ersten Mal verwenden, lesen Sie wie man den Raspberry Pi einrichtet
- Verbinden Sie Ihren PC über SSH mit dem Raspberry Pi, entweder mit dem integrierten SSH-Client unter Linux und macOS oder mit PuTTY unter Windows.
- Stellen Sie sicher, dass die Bibliothek RPi.GPIO installiert ist. Falls nicht, installieren Sie sie mit folgendem Befehl:
- Erstellen Sie eine Python-Skriptdatei pc817_optocoupler.py und fügen Sie den folgenden Code hinzu:
- Speichern Sie die Datei und führen Sie das Python-Skript aus, indem Sie den folgenden Befehl im Terminal eingeben:
- Legen Sie Spannung an die externe 12V/24V-Leitung an und schalten Sie sie dann wieder ab.
- Überprüfen Sie das Ergebnis im Terminal.
Das Skript fragt den GPIO-Pin fortlaufend jede halbe Sekunde ab und gibt jedes Mal eine Zeile aus, ohne Ende. Es stoppt erst, wenn Sie im Terminal Ctrl + C drücken, wodurch auch der GPIO-Pin freigegeben wird.
Dies ist auch das Skript für die zuvor beschriebene Prüfung auf Active-LOW oder Active-HIGH: Legen Sie Spannung an den Eingang an und sehen Sie, welche Bezeichnung erscheint. Wenn es ENERGISED ausgibt, während die Leitung im Leerlauf ist, und idle, während die Leitung unter Spannung steht, invertiert Ihr Modul auf der Platine – setzen Sie MODULE_ACTIVE_LOW oben in der Datei auf False und führen Sie es erneut aus. Nichts anderes im Skript entscheidet darüber, in welche Richtung der Messwert interpretiert wird, daher ist diese eine Konstante das Einzige, was geändert werden muss.
Code-Erklärung
Sehen Sie sich die zeilenweise Erklärung in den Kommentaren des Quellcodes an!
Raspberry Pi Code – Überwachen, ob ein Gerät ein- oder ausgeschaltet ist, und mit Zeitstempel protokollieren
Zweimal pro Sekunde dieselbe Zeile auszugeben, ist für einen ersten Test nützlich, aber ein Raspberry Pi läuft meist als kleiner, ständig eingeschalteter Server. In dieser Rolle möchten Sie keinen Strom identischer Zeilen – Sie möchten eine Aufzeichnung der Momente, in denen sich tatsächlich etwas geändert hat. Dieses zweite Skript gibt nur dann eine Zeile aus und hängt sie an eine Datei an, wenn der isolierte Eingang seinen Zustand ändert, zusammen mit der Dauer des vorherigen Zustands.
Das macht es direkt nutzbar für eine 24V-Leitung „Maschine läuft“ oder „Störungslampe“ und für ein 12V-Laufsignal eines Gefrierschrankkompressors oder einer Sumpfpumpe, bei denen die interessante Frage nicht der aktuelle Zustand ist, sondern wie oft und wie lange das Gerät über Nacht gelaufen ist. Wochenlang laufen gelassen – unter nohup oder als kleiner systemd-Dienst – erstellt dasselbe Skript still eine Betriebsstundenaufzeichnung des Geräts, und die Lücke zwischen zwei Einträgen beantwortet die Frage, die ein Blick auf ein Schaltfeld nie beantworten kann: Ist es tatsächlich angelaufen, als es sollte?
Klären Sie die Polaritätsfrage mit dem ersten Skript, BEVOR Sie weggehen und dieses hier laufen lassen, denn ein falsch herum verdrahtetes Modul fällt hier nicht lautstark aus – es schreibt still eine plausible, aber invertierte Historie in die Protokolldatei, jeder Lauf als Leerlaufphase und jede Leerlaufphase als Lauf aufgezeichnet, und Sie bemerken es womöglich wochenlang nicht.
Schnelle Schritte
- Erstellen Sie eine Python-Skriptdatei pc817_optocoupler_logger.py und fügen Sie den folgenden Code hinzu:
- Speichern Sie die Datei und führen Sie das Python-Skript aus, indem Sie den folgenden Befehl im Terminal eingeben:
- Schalten Sie die externe 12V/24V-Leitung einige Male ein und aus und lassen Sie sie jeweils eine Weile in jedem Zustand.
- Überprüfen Sie das Ergebnis im Terminal.
Dieselben Zeilen werden an eine Datei namens isolated_input.log neben dem Skript angehängt, sodass die Historie erhalten bleibt, nachdem Sie die SSH-Sitzung geschlossen haben. Dieses Skript enthält dieselbe Konstante MODULE_ACTIVE_LOW wie das erste und leitet seine Änderungserkennung davon ab, sodass alles, was Sie dort festgelegt haben, auch hier gilt. Das Skript fragt in seinem eigenen Schleifenintervall weiter ab, bis Sie im Terminal Ctrl + C drücken.
Code-Erklärung
Sehen Sie sich die zeilenweise Erklärung in den Kommentaren des Quellcodes an!
Video Tutorial
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.
Fordern Sie sich heraus
- Einfach: Ändern Sie die ausgegebenen Bezeichnungen passend zu Ihrer eigenen Maschine und lassen Sie eine LED an einem anderen GPIO-Pin leuchten, sobald der isolierte Eingang unter Spannung steht.
- Mittel: Machen Sie aus dem zweiten Skript einen Betriebsstundenzähler für das überwachte Gerät: Addieren Sie die Zeit, in der es unter Spannung stand, zählen Sie, wie oft es gestartet ist, und geben Sie beide Summen bei jeder Änderung aus.
- Fortgeschritten: Fügen Sie eine Software-Entprellung hinzu, damit eine verrauschte, lange 24V-Leitung nicht zwei Ereignisse hintereinander auslösen kann, überwachen Sie vier isolierte Leitungen gleichzeitig mit einem 4-Kanal-Optokoppler-Modul, oder schreiben Sie eine Warnung „Die Pumpe ist nicht angelaufen“ in das Protokoll, wenn der Eingang einige Minuten nach dem erwarteten Zeitpunkt immer noch nicht unter Spannung steht.
Zusätzliches Wissen
Eine sehr häufige Anfängerfrage lautet, warum ein paar Widerstände nicht dieselbe Aufgabe für viel weniger Geld erledigen würden.
Vergleichen wir einen PC817-Optokoppler mit einem Widerstands-Spannungsteiler zum Lesen eines 24V-Signals an einem Raspberry Pi.
Die Gemeinsamkeiten von Optokoppler und Spannungsteiler:
- Beide bringen ein 24V-Signal auf einen Wert herunter, den ein 3,3V-GPIO-Pin verträgt.
- Beide werden mit derselben einzelnen Python-Zeile gelesen.
- Beide kosten sehr wenig.
Die Unterschiede zwischen Optokoppler und Spannungsteiler:
| PC817-Optokoppler | Widerstands-Spannungsteiler | |
|---|---|---|
| Elektrische Verbindung zum Pi | keine, die beiden Seiten sind getrennt | direkt, die beiden Stromkreise teilen sich eine Masse |
| Isolationsspannung | 5000 Vrms | keine |
| Wenn auf der 24V-Seite eine Spitze oder ein Kurzschluss auftritt | der Pi bleibt unbeeinträchtigt | die Spitze erreicht den GPIO-Pin |
| Messwert | beim nackten Chip und bei den meisten Modulen invertiert, per einer Konstante im Code einstellbar | nicht invertiert, HIGH bedeutet Signal vorhanden |
| Umgang mit der Masse | die 12V/24V-Masse muss getrennt bleiben | die 12V/24V-Masse muss mit der Pi-Masse verbunden werden |
| Zusätzliche Bauteile | ein Modul oder ein Chip und ein Widerstand | zwei Widerstände |
Für ein Experiment auf Ihrem Schreibtisch mit einem Labornetzteil, das Sie kontrollieren, ist ein Spannungsteiler akzeptabel. Für alles, was an einem Fahrzeug, einer Maschine, einer Alarmzentrale oder einem netzbetriebenen 24V-Netzteil hängt, ist der Spannungsteiler ein schlechter Tausch: Er spart ein Bauteil und gibt dafür das Einzige auf, was zwischen einem elektrischen Fehler und einem toten Raspberry Pi steht. Da ein beschädigter GPIO-Pin normalerweise den Austausch des ganzen Boards statt nur eines einzelnen Chips bedeutet, macht sich der Optokoppler beim ersten Mal, wenn etwas schiefgeht, bezahlt.