[vermutlich gelöst] ESP01 (Tasmota) und Tx (GPIO0, GPIO2) als Relay geht nicht?

Begonnen von andies, 02 September 2023, 13:08:52

Vorheriges Thema - Nächstes Thema

andies

Ich habe eine Frage, vielleicht kann mir jemand helfen. Anscheinend kann ich in Tasmota nicht Tx (GPIO1) als Relay definieren.

Zuerst zum Problem selber: Ich habe einen schwer zugänglichen RPi, der alle paar Monate zurückgesetzt werden muss (=Strom aus und an; so ein- bis zweimal im Jahr ist das nötig). Da der so schwer zugänglich ist habe ich mir überlegt, ich schalte ein Relais dazwischen, das wiederum mit einem ESP01 angesteuert wird. Normalerweise macht der ESP nichts, das Relais leitet durch und die beiden Male im Jahr, wenn nötig, schaltet sich das Relais ein und unterbricht damit den Stromkreis zum RPi kurz und gibt dann wieder frei.

Ich habe dann die angehängte Idee umgesetzt (ich bin kein Profi, was die Zeichnungen angeht).
Du darfst diesen Dateianhang nicht ansehen.
Auf den ESP01 habe ich Tasmota 13.0 geflasht und dann war nur noch die Frage, an welchen GPIO (im Schaltplan mit schwarzer Farbe und nicht rot bezeichnet) ich das Relais anschließe. Beim ESP01 kommen in Frage GPIO0, GPIO2 sowie Tx und Rx. (Auch schon merkwürdig, dass bei diesem Chip vier von acht Pins allein mit Stromversorgung und Rücksetzen belegt sind, aber egal.) Von GPIO0 und GPIO2 ist bekannt, dass sie beim booten HIGH sein müssen, sonst geht der ESP in Flash-Modus (auch schön konstruiert  ;D ), also habe ich Tx oder Rx gewählt.

An der Stelle beginnt nun das Problem. Der Chip ist geflasht und funktioniert sowohl im Web als auch in FHEM (via MQTT) einwandfrei, kann eingerichtet werden usw. Sobald ich aber den Transistor (einen BC238C) an den GPIO1=Tx oder an GPIO3=Rx anschließe, scheint mir der ESP durchzubrennen. Er ist nicht mehr im Netz erreichbar, kann nicht erneut geflasht werden und nichts funktioniert.

Ich verstehe das nicht. Weil die Beschreibung auf den PINs nicht ganz korrekt ist (das übliche Viereck ist nicht bei GND, sondern bei Tx), vermute ich, dass die Chips Ausschuss sind. Kennt das jemand? Oder habe ich einen Denkfehler? Ich meine, die Schaltung ist doch elend einfach... 
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

PS Es scheint auch egal zu sein, wo man die kauft. Also "Lieferung aus D" ist kein Garant für vernünftige Ware, das ist mir jedenfalls früher mal aufgefallen. Viele Kleinhändler lassen sich Tausend Stück zusenden und hoffen, dass das Produkt ok ist. Geprüft wird das anscheinend nicht.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

#2
Also vermutlich habe ich die Antwort:
ZitatGPIO1: pin is high at BOOT, boot failure if pulled LOW
aus Link. Vermutlich zieht die Basis des Transistors trotz internem Pull-up den GPIO so weit nach LOW, dass der ESP nicht bootet. Das würde aber auch bedeuten, dass die Schaltung an sich gar nicht funktionieren kann - was aber schon mal jemand bemerkt haben müsste?

Ich müsste das mit pnp-Transistoren bauen. Wenn es dann geht, stimmt meine Vermutung.

<edit> Nachgemessen mit Oszilloskop: An Tx liegt beständig 0,7V. Mithin ist der GPIO pulled LOW und die Schaltung kann so gar nicht funktionieren. Und wahrscheinlich habe ich den anderen ESP durchgebrannt, als ich den Transistor an Rx hatte.

<edit2> Die Forderung, dass der GPIO beim starten HIGH ist, gilt für alle ,,erreichbaren" GPIOs des ESP01, nicht nur für Tx, das steht bereits im ersten Post. Insofern kann man anscheinend den ESP nicht mit einer Relaysteuerung verbinden, wenn man sich eines NPN-Transistors bedienen will.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

RalfRog

Hi zum Thema "durchbrennen" gibt es hier ein paar Hinweise wenn man RX oder GPIO0 als Output verwenden will (wird von abgeraten).
https://www.instructables.com/How-to-use-the-ESP8266-01-pins/

Problem entsteht ggfs. beim programmieren wenn man da die PINs nicht mit einem Vorwiderstand schützt. Genau dann wenn der ESP noch zum programmieren verbunden ist aber der Sketch startet und aus dem Input einen Output macht.

FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

Papa Romeo

Also ich hab alle Variationen durch und es funktionieren alle GPIO´s des ESP01 als Eingang sowie als Ausgang.

Beispiel:  https://forum.fhem.de/index.php?msg=830748

Man muss aber bestimmte Dinge wissen bzw. beachten:

1. GPIO 0, 1 und 2 dürfen beim Booten nicht LOW sein. D.h. nutze ich einen dieser Pins als Ausgang, kann man mit dem
   internen Pullup nur arbeiten, wenn man als "Schalter" Bauelemente mit hohen Eingangswiderständen nutzt ... z.B. ein FET.
   Nimmt man einen normalen bipolaren Transitor sollte man externe Pullup´s verbauen und Vorwiderstände des Transistors etwa
   mit dem Faktor 10 oder höher ansetzen. Ich habe, wie im Beispiel zu sehen, gute Erfahrungen mit 1kOhm Pullup und 47kOhm
   Basiswiderstand gemacht.

2. Nimmt man einen dieser Pin´s als Ausgang, so zieht ein zu steuerndes Relais beim Booten kurzzeitig an.


LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

andies

Vielen Dank - bei mir reichten 10kOhm als Basiswiderstand nicht aus, um das Relais zu schalten. Ich hatte dann dort statt der nötigen 5V nur etwa 2,7V.

War das dann der falsche Transistor, mit zu geringer Verstärkung?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zitat von: RalfRog am 03 September 2023, 08:53:21Hi zum Thema "durchbrennen"
https://www.instructables.com/How-to-use-the-ESP8266-01-pins/
Danke für den Tipp, diese Seite hatte ich auch schon gefunden. Da steht im Grunde drin, was ich gerade selbst erkannt habe. Schade, dass man in China so chaotische Bauteile entwirft (wieso wird zB beim ESP01 nicht der GPIO5 herausgeleitet, der hat keine Einschränkungen?).

Ich habe jetzt eine pnp-Schaltung gebastelt und Papa Romeos Hinweise berücksichtigt. Aber an eines hatte ich nicht gedacht: Ich muss ja den Emitter an VCC anschließen, das sind bei mir aber 5V (weil 5V-Relais) und nicht 3.3V. Mithin fallen an der Basis und damit dem GPIO 5-0.6=4.4 Volt an. Bumm, durchgebrannt.

Ich brauche einen Spannungsteiler nach GND, und den entsprechenden Widerstand habe ich gerade nicht. Wird also wieder dauern mit der Rückmeldung.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

RalfRog

Zitat von: andies am 03 September 2023, 18:11:58Ich habe jetzt eine pnp-Schaltung gebastelt und Papa Romeos Hinweise berücksichtigt. Aber an eines hatte ich nicht gedacht: Ich muss ja den Emitter an VCC anschließen, das sind bei mir aber 5V (weil 5V-Relais) und nicht 3.3V. Mithin fallen an der Basis und damit dem GPIO 5-0.6=4.4 Volt an. Bumm, durchgebrannt.

Wat ein Schei... :o    Wenn es schlecht läuft dann so richtig.

Mein Fazit hier wäre, dass mit dem kleinen Modul im Grunde alles auf high (inaktiv) ausgelegt sein muss.
zum Booten muss man GPIO0 &2 auf high halten
GPIO1 &3 gehen beim Booten auch auf high (bzw. TX sendet sogar vorübergehend Debug-Daten - toggelt also)

FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

Nobbynews

#8
Vieleicht wäre das hier eine Alternative:

https://www.makershop.de/plattformen/esp8266/esp01-relais-modul/

https://de.elv.com/joy-it-fernsteuerbares-relais-modul-esp-01s-mit-wifi-253488?gad=1&gclid=EAIaIQobChMIjIu00KWQgQMVjotoCR3VQgDuEAQYBiABEgJC9PD_BwE

Allerdings ist das Relais mit GPIO 0 verbunden und daher zieht es, wie @Papa Romeo schon geschrieben hat, beim Einschalten kurz an.
Da GPIO 0 beim Boooten high sein muss, ist das Relais low aktiv.

andies

Oh Mann, 5€ und ich bastle da zwei Tage. Wenigstens gerade nicht vorrätig  8)
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

TomLee

Im nächsten Hornbach bekommt man für 13,20€ einen Shelly 1.

andies

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Papa Romeo

#12
Zitat von: andies am 03 September 2023, 18:11:58Ich habe jetzt eine pnp-Schaltung gebastelt und Papa Romeos Hinweise berücksichtigt. Aber an eines hatte ich nicht gedacht: Ich muss ja den Emitter an VCC anschließen, das sind bei mir aber 5V (weil 5V-Relais) und nicht 3.3V. Mithin fallen an der Basis und damit dem GPIO 5-0.6=4.4 Volt an. Bumm, durchgebrannt.

nein, die Basis würde theoretisch mit etwa -1,7 Volt angesteuert werden. Beim PNP musst du gegen +Ub messen, da der Emitter auf diesem Potentential liegt und immer die Basis-Emitter die Steuerstrecke ist.
Aber auch das ist noch zu viel und der Transistor verabschiedet sich in die ewigen Jagdgründe.

PNP ist in diesem Fall keine gute Lösung. Du  bekommst den Transistor nie gesperrt, da du deine Basisspannung nie auf 0, sprich in die Nähe von 5 Volt bekommst.

Wenn du das Anziehen des Relais beim Booten unterbinden willst, mußt du einfach zwei NPN-Transistoren hintereinander schalten.

Siehe Skizze.

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Papa Romeo

Eine weitere Option ... einen Elko zwischen Basis und Emitter schalten. Ich hatte ein ähnliches Problem wie andies. Zwei FS10 Dimmer unter der Holzdecke, die gelegentlich ihre Funkkanalzugehörigkeit vergessen und nur durch das längere Betätigen einer Taste am Dimmer neu konfiguriert werden können. Um nicht jedes mal die Holzdecke öffnen zu müssen um an den Taster zu kommen, hab ich einen IWEAS 4.0 unter der Decke angebracht über den ich dann die beiden Taster bedienen kann. Nachteil dieser Methode, was aber in diesem Fall keine Rolle spielt: Das Einschalten der Relais erfolgt etwa eine halbe Sekunde verzögert (Basiswiderstand 47kOhm, Elko 10 uF). Das Ausschalten funktioniert sofort.

LG
Papa Romeo

...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

andies

#14
Ich benötige wohl nochmal Eure Hilfe. Also mein Problem war, das habe ich vermutlich nicht gut erklärt, nicht ein Durchbrennen des Transistors. Der ist ok. Nein, da an dem GPIO 5V anlagen, war der ESP hinüber. Auch dass das Relais uU beim Einschalten anzieht, stört mich überhaupt nicht.

Ich habe nun gedacht, dass ich das Problem mit einem Widerstand zu GND lösen kann. Denn dann sind im Ruhezustand am GPIO nicht 4,6V, sondern (das habe ich ausgerechnet und das klappt) 3V. Also brennt der ESP nicht durch. Zeichnung steht da unten, wobei ich den ESP nicht richtig eingezeichnet habe (Spannungsversorgung fehlt) und ich die Freilaufdiode vergessen habe. Ich möchte gern, dass das Relais eigentlich die ganze Zeit in Ruhe liegt und ich damit 5V über den "Ruheanschluss" abgreife, und wenn ich das per ESP das Relais schalte, die 5V für ca 10 Sekunden unterbrochen werden.

Das klappt aber nicht. Der ESP brennt nicht durch, Transistor auch nicht. Aber am Relais liegt nur etwa 3V an, das zieht nicht an, wenn ich beim GPIO auf HIGH gehe. Kann mir jemand sagen, wo ich da einen Denkfehler habe - oder besser, was ich falsch mache, ich bin kein Profi. Ich sitze schon so lange an der Sache, langsam wird das vollständig ineffizient. Aber wenigstens will ich was lernen.

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann