ESP8266 - PC817 Optokoppler: 12V/24V-DC-Eingangssignal überwachen

Mit einem PC817-Optokoppler-Modul kann der ESP8266 eine 12V- oder 24V-Leitung überwachen, ohne sie jemals elektrisch zu berühren – und das ist bei einem Board, dessen Pins nur für 3,3V ausgelegt sind, sehr wichtig. Dieses Tutorial zeigt Ihnen, wie Sie mit dem ESP8266 einen isolierten Digitaleingang auf Basis des PC817 auslesen und wie Sie diesen Eingang an einem Gerät abgreifen, damit das Board die Frage beantworten kann, die Sie wirklich interessiert: Läuft dieses Gerät gerade oder nicht? Im Einzelnen lernen wir:

ESP8266 NodeMCU PC817 Optokoppler isolierter 12V- und 24V-Eingang

Wir empfehlen:

Erforderliche Hardware

1×ESP8266 NodeMCU ESP-12F
1×Alternativ: ESP8266 D1 Mini NodeMCU ESP-12F
1×Alternativ: ESP8266 NodeMCU ESP-12E (Uno-form)
1×Micro USB Cable
1×Alternativ: ESP8266 NodeMCU ESP-12F (SMD-form)
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×PC817 Optocoupler Module 12V
1×PC817 Optocoupler Module 3-5V
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP8266

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den PC817-Optokoppler

Der PC817 ist ein vierpoliger Chip, der ein digitales Signal mithilfe von Licht statt eines Drahts von einer Schaltung zur anderen überträgt. Im Kunststoffgehäuse sitzt eine Infrarot-LED gegenüber einem Fototransistor, getrennt durch einen isolierenden Spalt: Fließt Strom durch die LED, schaltet ihr Licht den Transistor ein, sodass das Signal als Licht statt als Elektrizität übertragen wird. Dieser Spalt ist der Grund, warum beide Seiten elektrisch getrennt bleiben, und er ist für 5000 Vrms über eine Minute ausgelegt.

Für den ESP8266 ist diese Trennung kein Luxus. Der ESP8266 arbeitet mit 3,3V und seine GPIO-Pins sind nicht 5V-tolerant, sodass eine 12V- oder 24V-Leitung, die direkt an einen Pin gelegt wird, den Chip zerstört. Mit einem PC817 dazwischen teilen sich die 24V-Seite und die 3,3V-Seite keinen einzigen Leiter.

Kaum jemand lötet für diese Aufgabe heute noch den nackten Chip. Ein PC817-Optokoppler-Isolationsmodul setzt denselben Chip zusammen mit seinem Vorwiderstand, einer Status-LED, Schraubklemmen für die gefährliche Seite und einer Stiftleiste für die ESP8266-Seite auf eine kleine Platine, sodass der gesamte isolierte Eingang aus drei Drähten und zwei Schrauben besteht. Dieses Tutorial basiert auf diesem Modul; den nackten Chip behandeln wir weiter unten für alle, die ihn lieber selbst aufbauen möchten.

Technische Daten des PC817 im Modul:

Eigenschaft Wert
Gehäuse 4-poliges DIP, Pin 1 durch einen Punkt oder eine Kerbe markiert
Durchlassspannung der Eingangs-LED (Vf) ca. 1,2 V typisch, 1,4 V max
Durchlassstrom der Eingangs-LED (If) 20 mA Dauerstrom max, 5-20 mA normal, 10 mA als gutes Ziel
Kollektor-Emitter-Spannung am Ausgang (VCEO) 35 V max
Kollektorstrom am Ausgang (IC) 50 mA max
Kollektor-Verlustleistung 150 mW
Isolationsspannung 5000 Vrms für 1 Minute
Stromübertragungsverhältnis (CTR) 50% bis 600% je nach Klasse (A 80-160%, B 130-260%, C 200-400%, D 300-600%)
Schaltgeschwindigkeit Anstiegszeit ca. 4 us, Abfallzeit ca. 3 us
Betriebstemperatur -30 C bis +100 C

Pinbelegung des PC817-Optokoppler-Moduls

Das Modul hat eine Eingangsseite und eine Ausgangsseite, und zwischen ihnen besteht keine elektrische Verbindung.

  • Anschluss IN+ (oder +) – der Pluspol der Eingangsseite. Der geschaltete Pluspol der zu überwachenden 12V- oder 24V-Leitung muss an diese Schraubklemme angeschlossen werden.
  • Anschluss IN- (oder -) – der Minuspol der Eingangsseite. Er muss mit der Rückleitung desselben externen Stromkreises verbunden werden, NICHT mit GND des ESP8266.
  • Pin VCC – die Versorgung der Ausgangsstufe. Er muss mit dem 3,3V-Pin des ESP8266 verbunden werden.
  • Pin GND – die Masse der Ausgangsseite. Er muss mit dem GND-Pin des ESP8266 verbunden werden.
  • Pin OUT (beschriftet als DO oder OUT1..OUTn bei Mehrkanal-Platinen) – der isolierte Ausgang. Er muss mit einem digitalen Eingangspin des ESP8266 verbunden werden, der einen nutzbaren internen Pull-up hat.

※ Notiz:

Die Pinanordnung von Optokoppler-Isolationsmodulen unterscheidet sich je nach Hersteller. Manche Platinen haben VCC in der Mitte, bei manchen sind GND und OUT vertauscht, und bei manchen sind die Eingangsklemmen mit IN und GND statt + und - beschriftet. Lesen Sie immer die Beschriftung auf der Platine, die Sie tatsächlich gekauft haben, statt ein Foto zu kopieren. Die Eingangsspannung, für die eine Platine gebaut ist, ist meist ebenfalls dort aufgedruckt, neben oder unter den Schraubklemmen – das ist der schnellste Weg, um zu prüfen, ob Sie die bestellte Variante erhalten haben.

Welches Optokoppler-Modul brauche ich für eine 12V- oder 24V-Leitung?

Das ist die einzige Kaufentscheidung, auf die es ankommt, also treffen Sie sie vor der Bestellung. Der Vorwiderstand ist bereits auf dem Modul bestückt, und dieser Widerstand ist für EINE Eingangsspannung dimensioniert – genau deshalb werden diese Platinen als drei getrennte Varianten verkauft:

  • 12V module – für ein 12V-DC-Signal. Das ist die Variante für das Beispiel mit Heizkessel und Heizstab, auf das diese Seite immer wieder zurückkommt.
  • 24V module – für ein 24V-DC-Signal: den Sirenenausgang einer Alarmzentrale, einen 24V-SPS-Ausgang, einen 24V-Magnetventil- oder Schützstromkreis.
  • 3-5V module – für 3,3V- und 5V-Logiksignale. Sinnvoll, wenn die beiden Schaltungen aus getrennten Netzteilen versorgt werden, über ein langes Kabel weit voneinander entfernt sind oder eine davon elektrisch störbehaftet ist – ein Schrittmotortreiber, ein Motorcontroller oder die Niederspannungs-Steuerplatine in einem netzbetriebenen Gerät. Bei der Isolation geht es darum, den Massepfad zu unterbrechen, nicht nur darum, eine hohe Spannung zu überstehen.

Kaufen Sie die Variante, die zu Ihrer Leitung passt, und nur diese. Die Varianten sind NICHT austauschbar:

  • Ein 12V-Modul an einer 24V-Leitung erhält etwa den doppelten LED-Strom, für den es gebaut wurde, und seine Eingangs-LED wird beschädigt.
  • Ein 24V-Modul an einer 12V-Leitung steuert seine LED zu schwach an, sodass der Ausgang verspätet, unzuverlässig oder überhaupt nicht schaltet – der tückischere der beiden Fehler, weil er einen Test auf dem Labortisch bestehen und dann im Schaltschrank unbemerkt Ereignisse verpassen kann.

Beachten Sie außerdem, dass es beim PC817-Eingang auf den Strom ankommt und nicht darauf, wie viel das Netzteil liefern könnte: Eine 12 V-Schiene, die viele Ampere liefern kann, belastet die LED nicht stärker als eine, die nur Milliampere liefert, weil der Widerstand auf der Platine den LED-Strom in beiden Fällen festlegt. Bei einem Modul gibt es nichts zu berechnen – die Wahl der Variante IST die Widerstandsberechnung, die bereits im Werk für Sie erledigt wurde.

Wie es funktioniert

Die beiden Hälften des Moduls tauschen nichts als Licht aus:

  • Externes 12V/24V-Signal VORHANDEN: Strom fließt durch die Eingangs-LED, die Status-LED auf der Platine leuchtet und der Fototransistor leitet.
  • Externes 12V/24V-Signal NICHT VORHANDEN: Die Eingangs-LED ist dunkel, die Status-LED ist aus und der Fototransistor sperrt.

Was das für den OUT-Pin und damit für den Wert bedeutet, den der ESP8266 liest, ist Thema des nächsten Abschnitts.

Ist Ihr Optokoppler-Modul active-HIGH oder active-LOW?

Beim nackten Chip ist das durch die Physik festgelegt. Der Fototransistor kann einen Pin nur nach UNTEN ziehen. Da der Pull-up des ESP8266 den Pin auf HIGH hält, wird eine spannungsführende externe Leitung als LOW und eine spannungslose als HIGH gelesen – der Messwert ist INVERTIERT.

Bei einem Modul müssen Sie es prüfen, denn die Ausgangspolarität unterscheidet sich je nach Hersteller. Viele Platinen führen den Kollektor des Fototransistors direkt heraus, sodass sich OUT wie beim nackten Chip verhält und auf LOW geht, wenn der Eingang unter Spannung steht. Andere invertieren das Signal auf der Platine, sodass OUT dem Eingang FOLGT und auf HIGH geht, wenn der Eingang unter Spannung steht. Beide Arten werden verkauft, manchmal sogar mit demselben Produktfoto, daher ist die einzig verlässliche Antwort die, die Ihre eigene Platine liefert.

Der Test dauert weniger als eine Minute:

  • Verbinden Sie das Modul wie unten gezeigt mit dem ESP8266 und laden Sie den Sketch aus diesem Tutorial hoch.
  • Öffnen Sie den Serial Monitor, ohne dass etwas an IN+ und IN- angeschlossen ist, und notieren Sie, was er ausgibt.
  • Schalten Sie die externe Leitung ein und notieren Sie, was er jetzt ausgibt.
  • Der Zustand, der erscheint, WÄHREND das Signal anliegt, ist der aktive Pegel Ihres Moduls.
  • Nutzen Sie die Status-LED auf der Platine zur Gegenprobe. Sie leuchtet, sobald die Eingangsseite unter Spannung steht. Wenn die LED also deutlich leuchtet und der Serial Monitor trotzdem IDLE anzeigt, ist Ihre Annahme zur Polarität falsch herum.

Die Korrektur ist eine einzige Änderung, kein Neuschreiben. Der Sketch unten enthält eine einzige Konstante:

const bool MODULE_ACTIVE_LOW = true;

Lassen Sie sie auf true für ein Modul, dessen Ausgang bei anliegendem Signal auf LOW geht, setzen Sie sie auf false für ein Modul, dessen Ausgang auf HIGH geht, und alles Weitere passt sich automatisch an.

Den isolierten Eingang aus dem nackten PC817-Chip aufbauen (optional)

Wenn Sie ihn lieber aus dem Rohchip aufbauen möchten: Der PC817 ist ein 4-poliges DIP-Gehäuse, bei dem Pin 1 an der Ecke durch einen Punkt oder eine Kerbe markiert ist; die Nummerierung verläuft von oben gesehen gegen den Uhrzeigersinn.

  • Pin 1 – Anode (A) und Pin 2 – Kathode (K): die Eingangs-LED. Der externe Pluspol muss über einen Vorwiderstand an Pin 1 angeschlossen werden, und Pin 2 darf NUR mit der Masse des externen Stromkreises verbunden werden.
  • Pin 3 – Emitter (E): muss mit dem GND-Pin des ESP8266 verbunden werden.
  • Pin 4 – Kollektor (C): muss mit dem Eingangspin des ESP8266 verbunden werden, der den Pull-up liefert.
Pinbelegung des PC817-Optokopplers
image source: diyables.io

Hier legen Sie den LED-Strom selbst fest, mit R = (Vin - 1.2) / 0.01 für ein Ziel von 10 mA: 220 Ohm bei 3,3 V, 390 Ohm bei 5 V, 1 kOhm bei 12 V und 2,2 kOhm bei 24 V – letzterer setzt etwa 0,24 W in Wärme um, verwenden Sie daher ein 1/2-W-Bauteil. Der nackte Chip ist immer active-LOW, lassen Sie MODULE_ACTIVE_LOW also auf true.

Die Isolationsregel

Verbinden Sie die Masse des 12V/24V-Stromkreises NICHT mit dem GND-Pin des ESP8266 und auch nicht mit dem GND-Pin der Stiftleiste des Moduls. Diese beiden Massen müssen getrennt bleiben, und genau diese Trennung ist der ganze Grund, warum der PC817 da ist. Wenn Sie sie miteinander verbinden, schaltet der Optokoppler weiterhin und alles scheint zu funktionieren, aber die Isolation ist weg, und ein Fehler auf der 24V-Seite hat nun einen direkten Weg in Ihr 3,3V-Board.

Verdrahtungsdiagramm

Der Sketch in diesem Tutorial verwendet Pin D7 (GPIO13) für den isolierten Eingang. Beim ESP8266 ist diese Wahl nicht willkürlich: D7 ist einer der einfachen, boot-sicheren GPIOs und hat einen nutzbaren internen Pull-up – genau das, was ein active-LOW-Optokopplerausgang braucht. Pin D0 (GPIO16) ist der einzige Pin, der überhaupt keinen internen Pull-up hat, und die Pins D3 (GPIO0), D4 (GPIO2) und D8 (GPIO15) sind Boot-Strapping-Pins, deren Pegel beim Einschalten bestimmt, wie der Chip startet. Verwenden Sie in Ihrem Sketch die NodeMCU-Bezeichnungen Dx statt der rohen GPIO-Nummern, denn auf einem NodeMCU-Board wird D7 automatisch zu GPIO13 aufgelöst, während eine wörtlich geschriebene 13 GPIO13 bedeutet und nicht zur Beschriftung auf der Platine passt.

  • Schaltplan zwischen ESP8266 und einem PC817-Optokoppler-Isolationsmodul
Schaltplan ESP8266 NodeMCU PC817 Optokoppler-Isolationsmodul

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Weitere Informationen finden Sie unter ESP8266-Pinbelegung und wie man ESP8266 und andere Komponenten mit Strom versorgt.

Schließen Sie die externe Leitung an die Schraubklemmen IN+ und IN- an und verbinden Sie dann VCC des Moduls mit dem 3,3V-Pin des ESP8266, GND mit dem GND-Pin des ESP8266 und OUT mit D7 des ESP8266. Versorgen Sie die Ausgangsseite des Moduls mit 3,3V statt mit 5V oder Vin, denn die Spannung, mit der die Ausgangsstufe des Moduls versorgt wird, liegt auch am ESP8266-Pin an, und der ESP8266 ist nicht 5V-tolerant. Es muss kein Widerstand bestückt und kein Strom berechnet werden – das wurde bereits mit der Wahl der 12V-, 24V- oder 3-5V-Variante erledigt. Führen Sie nach dem Verdrahten den oben beschriebenen Ein-Minuten-Test durch, um herauszufinden, wie herum der Ausgang Ihres Moduls arbeitet.

  • Schaltplan zwischen ESP8266 und dem nackten PC817-Chip

Beim Aufbau mit dem nackten Chip führt der Pluspol des 12V- oder 24V-Signals über den Vorwiderstand (1 kOhm für 12 V, 2,2 kOhm für 24 V) zu Pin 1, und Pin 2 wird nur mit der Masse dieses externen Stromkreises verbunden. Auf der Ausgangsseite geht Pin 4 an D7 des ESP8266 und Pin 3 an GND des ESP8266. Der Pull-up wird per Software aktiviert, daher ist auf der 3,3V-Seite kein zusätzlicher Widerstand nötig.

Den PC817 parallel anschließen, um zu überwachen, ob ein Gerät ein- oder ausgeschaltet ist

Beide Schaltpläne oben zeigen ein reines 12V- oder 24V-Signal, doch in einer echten Installation gehört dieses Signal bereits zu etwas. Im Heizungsbeispiel, auf das diese Seite immer wieder zurückkommt, ist es die Wärmeanforderungsleitung, die ein Raumthermostat schließt, um einen Heizkessel oder einen Heizstab zu starten. Um diese Leitung zu überwachen, wird der Eingang des Moduls PARALLEL dazu angeschlossen, also parallel zum Gerät und niemals in Reihe. Ein in Reihe geschalteter Optokoppler müsste den gesamten Laststrom – die Schützspule des Kessels oder bei einem direkt angeschlossenen Heizstab das Heizelement selbst – durch eine Infrarot-LED leiten, die für 20 mA ausgelegt ist, und der PC817 würde beim ersten Wärmebedarf des Thermostats zerstört.

Der Abgriff besteht aus zwei Schrauben und durchtrennt nichts:

  • Der positive, geschaltete Anschluss des Geräts geht an die Klemme IN+ des Moduls.
  • Der negative bzw. Rückleiter-Anschluss des Geräts geht an die Klemme IN- des Moduls.
  • Jeder vorhandene Draht bleibt genau dort, wo der Installateur ihn angeschlossen hat.

Dazwischen kommt nichts. Der Vorwiderstand, den der nackte Chip bräuchte, ist bereits auf der Platine, passend zur gekauften Variante dimensioniert, und genau das ist der ganze Komfort des Moduls: Ein paralleler Abgriff besteht aus zwei Schraubverbindungen und keiner Rechnung.

Der Abgriff zieht nur etwa 10 mA, was neben einer Schützspule, einem Ventil, einer Lampe oder einem Pumpenmotor nicht ins Gewicht fällt, sodass das Gerät genau so weiterarbeitet wie vor der Überwachung. Dadurch bleibt die Messung rein lesend, und sie bleibt auch ehrlich: Weil der Optokoppler parallel zum Gerät statt davor sitzt, folgt der Messwert dem tatsächlichen Zustand des Geräts, egal wer es angesteuert hat. Eine Kesselschaltuhr, ein Frostschutzthermostat, ein Speicherthermostat oder eine Hand am Wandregler – alles erscheint im Serial Monitor, ebenso wie eine Anforderung, die gesendet wird und auf die überhaupt keine Reaktion folgt. Betriebsstundenzähler, Stillstandsprotokolle und Warnungen der Art „Hat er wirklich gezündet?“ ergeben sich alle aus diesem einen parallelen Abgriff.

Drei Details entscheiden darüber, ob es beim ersten Versuch funktioniert:

  • Polarität des Abgriffs. Die Eingangsseite ist eine einfache LED und leitet nur in eine Richtung. Vertauschen Sie IN+ und IN-, wird nichts beschädigt, aber der Optokoppler schaltet einfach nie ein und die Status-LED leuchtet nie. Stellen Sie also fest, welche Seite des Abgriffs positiv ist, bevor Sie Isolierung abisolieren.
  • Leckstrom. Manche SPS-Transistorausgänge, Triac-Ausgänge und LED-Lampentreiber lassen auch im ausgeschalteten Zustand einen kleinen Strom durch, und genug davon lässt die PC817-LED teilweise leuchten. Das Symptom ist eindeutig: Der Messwert geht auf ENERGISED und kehrt nie zu IDLE zurück. Setzen Sie einen Ableitwiderstand von etwa 4,7 kOhm bis 10 kOhm zwischen die Klemmen IN+ und IN- des Moduls, damit der Leckstrom durch den Widerstand statt durch die LED fließt.
  • Nur Gleichstrom. Der PC817-Eingang ist eine einzelne LED und reagiert daher nur auf eine Polarität; zur Erkennung einer Wechselstromleitung braucht man einen Optokoppler, dessen Eingangsstufe zwei antiparallele LEDs enthält.

※ Notiz:

Jede induktive Last – eine Relais- oder Schützspule, ein Magnetventil, ein Motorventil, eine Umwälzpumpe – erzeugt beim Abschalten eine große Rückspannungsspitze, und die Eingangs-LED des PC817 verträgt in Sperrrichtung nur 6 V. Setzen Sie eine gewöhnliche Diode antiparallel direkt über die Eingangsklemmen des Moduls, mit der Kathode der Diode an IN+ und der Anode der Diode an IN-. Während das Gerät läuft, 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 genügt für kleine Abgriffe, eine 1N4007 für größere.

Was ein ENERGISED-Messwert beweist und was nicht

Eine Einschränkung sollte klar gesagt werden: Der Abgriff sagt Ihnen, dass das Gerät unter Spannung steht, nicht, dass es seine Aufgabe erfüllt. Ein Heizstab mit durchgebranntem Heizelement zieht seine Wärmeanforderungsleitung trotzdem herunter und wird weiterhin als EIN gelesen, genau wie eine festgefressene Pumpe oder ein blockierter Lüfter. Was der ESP8266 damit tun kann, ist Ursache und Wirkung zu vergleichen – zwei Stunden unter Spannung ohne sichtbares Ergebnis sind für sich genommen ein nützlicher Alarm, solange Sie daran denken, dass es sich um eine Schlussfolgerung und nicht um eine Messung handelt.

Wie man den PC817-Optokoppler programmiert

Im ersten Schritt konfigurieren Sie den gewählten ESP8266-Pin als Eingang mit aktiviertem internem Pull-up. Dieser hält den Pin auf einem definierten HIGH, solange ein active-LOW-Optokopplerausgang im Ruhezustand ist:

pinMode(D7, INPUT_PULLUP);

Im zweiten Schritt lesen Sie den Pin mit der Funktion digitalRead():

int raw = digitalRead(D7);

Im dritten Schritt geben Sie diesem Rohpegel eine Bedeutung, mithilfe der einen Konstante, die die Polarität Ihres Moduls enthält:

const bool MODULE_ACTIVE_LOW = true; bool signal_active = MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH);

Im letzten Schritt reagieren Sie auf diesen booleschen Wert. Ihn mit dem vorherigen Messwert zu vergleichen, statt bei jedem Durchlauf von loop() etwas auszugeben, hält den Serial Monitor übersichtlich und liefert eine Zeile pro tatsächlicher Änderung auf der 12V/24V-Leitung.

ESP8266-Code für den PC817-Optokoppler

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-pc817-optocoupler-monitor-12v-24v-dc-input-signal */ #define OPTO_PIN D7 // The ESP8266 pin D7 (GPIO13) connected to the OUT pin of the PC817 optocoupler module // Most PC817 optocoupler modules pull the output LOW when the input signal is present. // If your module works the other way round, change this to false. const bool MODULE_ACTIVE_LOW = true; // D7 is a plain, boot-safe GPIO with a working internal pull-up. // Avoid D3 (GPIO0), D4 (GPIO2) and D8 (GPIO15): they are boot-strapping pins. // Avoid D0 (GPIO16): it has no internal pull-up. int prev_signal = -1; // The previously reported state, -1 forces the first line to be printed void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // An active-LOW module can only pull the pin down, so the internal pull-up // holds the pin HIGH while the external 12V/24V line is dead. pinMode(OPTO_PIN, INPUT_PULLUP); Serial.println("PC817 isolated input monitor started"); } void loop() { int raw = digitalRead(OPTO_PIN); // The polarity constant above decides which raw level means "signal present" int signal_active = (MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH)) ? 1 : 0; // Print one line only when the external line actually changes if (signal_active != prev_signal) { if (signal_active == 1) Serial.println("Isolated input: ENERGISED (external line live)"); else Serial.println("Isolated input: IDLE (external line dead)"); prev_signal = signal_active; } }

Schnelle Schritte

Um mit dem ESP8266 in der Arduino IDE zu starten, folgen Sie diesen Schritten:

  • Sehen Sie sich das Tutorial Einrichtung der Umgebung für den ESP8266 in der Arduino IDE an, wenn Sie den ESP8266 zum ersten Mal verwenden.
  • Prüfen Sie, ob Ihre Modulvariante zu Ihrer Eingangsspannung passt: das 12V-Modul an einer 12V-Leitung, das 24V-Modul an einer 24V-Leitung, das 3-5V-Modul an einem Logikpegel-Signal.
  • Verdrahten Sie die Bauteile wie im Schaltplan gezeigt und halten Sie die 12V/24V-Masse vom GND des ESP8266 fern.
  • Verbinden Sie das ESP8266-Board über ein USB-Kabel mit Ihrem Computer.
  • Öffnen Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das richtige ESP8266-Board (z. B. NodeMCU 1.0 (ESP-12E Module)) und den zugehörigen COM-Port.
  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Klicken Sie in der Arduino IDE auf die Schaltfläche Upload, um den Code zu kompilieren und auf den ESP8266 hochzuladen.
  • Öffnen Sie den Serial Monitor.
  • Schalten Sie die externe 12V/24V-Leitung einige Male ein und aus.
  • Sehen Sie sich das Ergebnis im Serial Monitor an.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
PC817 isolated input monitor started Isolated input: IDLE (external line dead) Isolated input: ENERGISED (external line live) Isolated input: IDLE (external line dead) Isolated input: ENERGISED (external line live) Isolated input: IDLE (external line dead)
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Wenn der Serial Monitor das Gegenteil dessen meldet, was die Status-LED des Moduls anzeigt, haben Sie ein active-HIGH-Modul: Setzen Sie MODULE_ACTIVE_LOW auf false und laden Sie den Code erneut hoch.

Da der ESP8266 immer nur einen offenen oder geschlossenen Transistor sieht, funktionieren derselbe Sketch und dieselbe Verdrahtung für eine 12 V-Quelle und eine 24 V-Quelle. Das Einzige, was sich zwischen beiden ändert, ist die Modulvariante, die Sie gekauft haben.

Zwei Projekte, für die sich diese Schaltung gut eignet:

  • Ein günstiger, ständig laufender Heizungsmonitor: Ein 12V-Modul überwacht die 12 V-Wärmeanforderungsleitung zwischen einem Raumthermostat und einem Heizkessel oder Heizstab, und der ESP8266 protokolliert, wie viele Minuten pro Tag tatsächlich Wärme angefordert wird – ohne jede Änderung an der Heizungsverdrahtung selbst.
  • Eine Überwachung für eine 24 V-Alarmsirene: Ein 24V-Modul sitzt parallel am 24 V-Sirenenausgang einer Alarmzentrale, sodass der ESP8266 sofort weiß, wenn die Zentrale auslöst, und die Zentrale ihre eigene isolierte Masse behält.
  • Eine allgemeine Ein/Aus-Überwachung für Geräte: Parallel an einer beliebigen gleichstromversorgten Pumpe, einem Ventil, einem Schütz oder einer Lampe abgegriffen, wird dieselbe Schaltung zu einem Betriebsstundenzähler, einem Stillstandsprotokoll für Maschinen und einer Warnung der Art „Die Steuerung hat es angefordert, aber nichts ist angelaufen“.

Code-Erklärung

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

Zusätzliches Wissen

Die Wahl des Pins ist der Teil dieses Projekts, der spezifisch für den ESP8266 ist, und es lohnt sich, ihn richtig zu treffen, bevor Sie irgendetwas festschrauben.

Der ESP8266 stellt etwa elf nutzbare GPIO-Pins bereit, und diese sind nicht austauschbar. Fünf davon verhalten sich wie gewöhnliche Digitaleingänge mit funktionierendem internem Pull-up: D1 (GPIO5), D2 (GPIO4), D5 (GPIO14), D6 (GPIO12) und D7 (GPIO13). Jeder davon ist ein guter Platz für einen Optokopplerausgang.

Drei weitere sind Boot-Strapping-Pins. GPIO0 (D3) und GPIO2 (D4) müssen beim Einschalten des Boards HIGH sein, und GPIO15 (D8) muss LOW sein. Ein Optokoppler, dessen externe Leitung zufällig in dem Moment unter Spannung steht, in dem Sie die Versorgung einschalten, hält seinen Ausgang auf LOW. Wenn er an D3 oder D4 hängt, kann das Board dadurch in den Flash-Modus wechseln, statt Ihren Sketch auszuführen. Der Fehler wirkt zufällig, weil er davon abhängt, ob die 12V/24V-Leitung beim Einschalten unter Spannung stand – und das macht ihn zu einem äußerst lästigen Fehler bei der Suche.

GPIO16 (D0) scheidet aus einem anderen Grund aus. Er ist ein separater Pin auf dem Chip und hat im Gegensatz zu den anderen keinen internen Pull-up: INPUT_PULLUP ist dort nicht verfügbar, nur INPUT_PULLDOWN_16. Da ein nackter Fototransistor einen Pin nur nach unten ziehen kann, gibt es bei einem Pin, der nicht hochgezogen werden kann, nichts, wovon er heruntergezogen werden könnte, und der Messwert floatet. Wenn Sie D0 mit dem nackten Chip wirklich verwenden müssen, fügen Sie einen externen 10-kOhm-Widerstand vom Pin nach 3,3V hinzu und konfigurieren Sie den Pin als einfaches INPUT.

Die Verwendung eines Moduls statt des nackten Chips verschiebt diese beiden Probleme in entgegengesetzte Richtungen. Ein Modul, dessen Ausgangsstufe bereits einen eigenen Pull-up hat, treibt den Pin von beiden Seiten und ist überhaupt nicht auf den internen Pull-up des ESP8266 angewiesen, was den Einwand gegen D0 abschwächt – aber erst, wenn Sie anhand der Platine selbst bestätigt haben, dass Ihre so aufgebaut ist, denn viele Module führen den nackten Kollektor direkt auf die Stiftleiste. Die Boot-Strapping-Pins bekommen keine solche Erleichterung. GPIO0 (D3) und GPIO2 (D4) müssen beim Start des Chips HIGH sein, sodass ein Modulausgang, der in diesem Moment auf LOW liegt, einen normalen Bootvorgang verhindern kann, und GPIO15 (D8) muss LOW sein, sodass ein Modulausgang, der dort auf HIGH liegt, dasselbe bewirken kann. Ob der Ausgang beim Einschalten gerade LOW oder HIGH ist, hängt von der Polarität des Moduls und davon ab, ob die externe Leitung unter Spannung stand – beides können Sie per Software nicht beeinflussen. Halten Sie D3, D4 und D8 aus dieser Schaltung heraus, egal welche Art von Modul Sie besitzen.

Der Wert des Pull-ups selbst ist großzügig bemessen. Der interne Pull-up des ESP8266 liegt im Bereich von einigen zehn Kiloohm und verlangt dem Fototransistor nur einige zehn Mikroampere ab – weit unter den 50 mA, die er aufnehmen kann, und selbst von einem PC817 mit niedrigem CTR bei 10 mA auf der LED-Seite problemlos erreichbar. Ein externer 10-kOhm-Widerstand nach 3,3V funktioniert genauso gut und ist etwas unempfindlicher gegenüber elektrischen Störungen auf langen Kabelstrecken, was sich lohnt, wenn das Modul mehrere Meter entfernt in einem Schaltschrank sitzt.

Es ist offensichtlich, dass die sicherste Anordnung auf diesem Board einer der einfachen D-nummerierten Pins mit per Software aktiviertem INPUT_PULLUP ist, angesprochen über seine Dx-Bezeichnung, damit der Sketch zur Beschriftung auf der Platine passt. Alles andere am PC817 ist auf jedem Mikrocontroller gleich; die Wahl des Pins ist die eine Entscheidung, die der ESP8266 für Sie trifft.

Funktionsreferenzen

Verwandte Tutorials

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!