Forum: Mikrocontroller und Digitale Elektronik ESP8266 D1 Mini + Relaismodul: Relais bleibt bei D1 dauerhaft eingeschaltet


von Denis (denis336)


Lesenswert?

Hallo zusammen,

ich habe ein Problem mit einem ESP8266 D1 Mini und einem 5V-Relaismodul.

Ich möchte später über den ESP8266 einen WLAN-Access-Point mit dem Namen 
lamp erstellen. Wenn sich ein Gerät mit diesem WLAN verbindet, soll das 
Relais jeweils seinen Zustand wechseln (EIN/AUS).

Das eigentliche Problem ist aber, dass ich das Relais momentan überhaupt 
nicht zuverlässig über den D1 Mini schalten kann.

Meine Verkabelung:

Relais VCC → D1 Mini 5V
Relais GND → D1 Mini GND
Relais IN → D1 Mini D1

Das Relais verwendet ein Songle SRD-05VDC-SL-C.

Was ich bisher festgestellt habe:

Wenn ich IN direkt mit GND verbinde, schaltet das Relais EIN.
Wenn ich IN direkt mit 5V verbinde, passiert scheinbar nichts bzw. das 
Relais bleibt in seinem bisherigen Zustand.
Wenn ich im Arduino-Code D1 als Relais-Pin definiere und das Relais an 
D1 angeschlossen ist, bleibt das Relais dauerhaft EIN.
Wenn ich im Arduino-Code stattdessen D2 als Relais-Pin definiere, das 
Relais aber physisch weiterhin an D1 angeschlossen ist, bleibt das 
Relais dauerhaft AUS.

Ich habe auch folgenden Minimaltest ausprobiert:

const int pin = 5;

void setup() {
  pinMode(pin, OUTPUT);
}

void loop() {
  digitalWrite(pin, HIGH);
  delay(200);

  digitalWrite(pin, LOW);
  delay(5000000);
}

Auch damit bleibt das Relais eingeschaltet, obwohl ich davon ausgegangen 
bin, dass `HIGH` das Relais ausschalten müsste.


Zum Vergleich: Wenn ich im Code D2 verwende, während das Relais physisch 
an D1 angeschlossen ist, bleibt das Relais ausgeschaltet.

Ich bin daher etwas ratlos, ob das Problem

1. am D1 Mini bzw. der Pinbelegung,
2. am Relaismodul bzw. dessen Eingangsschaltung,
3. an der LOW-/HIGH-Aktivierung,
4. an einer speziellen Beschaltung des Relaismoduls
5. oder eventuell an einem defekten Bauteil

liegt.

Hat jemand eine Idee, warum sich das Relais an D1 nicht mit HIGH und LOW 
schalten lässt, während es bei Verwendung von D2 im Code ausgeschaltet 
bleibt?


Vielen Dank!
von Hobby B. (bastler2022)


Lesenswert?

Hallo,

dieses Modul ist „aktiv LOW“.

Pin D1 als Ausgang definieren und dann mit digitalWrite auf LOW setzen.

Versorgungsspannung ? Zeige mal einen Bild vom Aufbau und oder einen 
Schaltplan.

Gruß bastler2022
: Bearbeitet durch User
von Karl B. (gustav)


Lesenswert?

Abgesehen davon würde ich Delay durch etwas anderes ersetzen.
Delay blockt das Programm vollständig.

https://forum.arduino.cc/t/anstatt-delay-millis-verwenden-fur-verzogerung/971495

ciao
gustav
von Rainer W. (rawi)


Lesenswert?

Karl B. schrieb:
> Delay blockt das Programm vollständig.

Nein, auf dem ESP8266 wird innerhalb von delay() immer wieder yield() 
aufgerufen, um Rechenzeit für Hintergrundprozesse zur Verfügung zu 
stellen.
von Jens M. (schuchkleisser)


Lesenswert?

3,3V IO und 5V Ansteuerung des Relais passt nicht.
Da dürfte ein Optokoppler drin sein, ist ja Makerschrott und 
ungenannt/hochgeheim, aber "lowaktiv" deutet drauf hin, sonst wäre der 
GPIO schon verdampft.
Das führt dann dazu das die LED im Opto immer ein wenig oder ein wenig 
mehr an ist -> Relais immer aktiv.

Bau eine vernünftige Schaltung, mit einem vernünftigen Relais (eins, das 
Netzspannung auch wirklich verträgt) und verzichte auf die dämliche 
idiotische Potentialtrennung zwischen Prozessor und Spule, und siehe da 
es wird gehen.
von Marcel V. (mavin)


Angehängte Dateien:

Lesenswert?

Mach an den Ausgang D1 eine vernünftige NPN-Transistor Stufe mit einem 
anständigen 5 Volt Relais dran!
von Rahul D. (rahul)


Lesenswert?

Marcel V. schrieb:
> NPN-Transistor

Das geht auch mit einem N-Kanal-MOSFET.
von Stephan S. (uxdx)


Lesenswert?

Bei den fertigen Relais-Shields für den ESP8266 Mini-D1 ist der 
Transistor schon drin!
von Flöte (nsolo)


Lesenswert?

Denis schrieb:
> Wenn ich IN direkt mit GND verbinde, schaltet das Relais EIN.
> Wenn ich IN direkt mit 5V verbinde, passiert scheinbar nichts bzw. das
> Relais bleibt in seinem bisherigen Zustand.

Du gehst also nur nach Gehör und hast kein Messgerät?

Dann ist meine Vermutung, dass das Relais AN (Pin := LOW) ist während du 
das programm über überträgst.

Denis schrieb:
> pinMode(pin, OUTPUT);

Dann schaltest du den Output richtig, der Pin bleibt LOW.


Denis schrieb:
> digitalWrite(pin, HIGH);
>   delay(200);

Dann schaltest du 200ms das Relais AUS, das ist aber zu träge und macht 
gar nichts.

Denis schrieb:
> digitalWrite(pin, LOW);
>   delay(5000000);

Dann schaltest du das Relais wieder AN (für die nächsten 83 Minuten).

Du hörst also keinen Unterschied. Toggle doch einfach mal alle 2 
Sekunden oder so hin und her. Oder löte das Relais an einen anderen Pin, 
oder zeige einen Schaltplan oder Link vom Relais Modul.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.