ESP32 empfängt keine Sensordaten und steuert MOSFET-Relais nicht trotz vorhandener Stromversorgung

Ich habe ein ESP32-Setup aufgebaut, bei dem sowohl der ESP32 selbst als auch mein MOSFET-Relaismodul sichtbar mit Strom versorgt werden, da bei beiden die Status-LED leuchtet. Trotzdem funktioniert das System nicht wie erwartet.

Mein Temperatursensor liefert keinerlei Daten an den ESP32, obwohl ich ihn laut Beschreibung korrekt angeschlossen habe, also an D2 (Daten), GND und 3,3 Volt. Parallel dazu habe ich das MOSFET-Relaismodul mit zwei Jumper-Kabeln an D18 und ebenfalls an 3,3 Volt angeschlossen. Allerdings kann ich weder Temperaturwerte auslesen noch das Relaismodul bzw. die Stromdurchleitung darüber steuern.

Das führt dazu, dass ich unsicher bin, wo genau der Fehler liegt. Entweder stimmt etwas in meiner ESPHome-Konfiguration beziehungsweise im Code nicht, oder ich habe ein grundlegendes technisches Problem in der Verdrahtung oder im Verständnis der Komponenten.

Der Code nach dem grundlegenden Code

# OneWire Bus

one_wire:
 - platform: gpio
   pin: GPIO4
   id: bus_a

# Temperatur Sensor

sensor:
 - platform: dallas_temp
   name: “Temperatur”
   id: temp_sensor
   one_wire_id: bus_a
   update_interval: 10s
   on_value:
    then:
      - lambda: |-
            // MANUELLER OVERRIDE
            if (id(manual_override).state) {
            id(relais).turn_on();
            return;
            }

            // Failsafe: Sensorfehler
            if (isnan(x)) {
            id(relais).turn_off();
            return;
            }

            static bool hot_active = false;
            static bool cold_active = false;

            float high_on = id(temp_high_on).state;
            float high_off = id(temp_high_off).state;
            float low_on = id(temp_low_on).state;
            float low_off = id(temp_low_off).state;

            // HITZE (Lüfter)
            if (!hot_active && x >= high_on) {
              hot_active = true;
              id(relais).turn_on();
            } else if (hot_active && x <= high_off) {
              hot_active = false;
              if (!cold_active) {
                id(relais).turn_off();
              }
            }

            // KÄLTE (Frostschutz)
            if (!cold_active && x <= low_on) {
              cold_active = true;
              id(relais).turn_on();
            } else if (cold_active && x >= low_off) {
              cold_active = false;
              if (!hot_active) {
                id(relais).turn_off();
              }
            }

# Einstellbare Werte (Home Assistant)

number:
 - platform: template
   name: “Max Temperatur Lüfter an”
   id: temp_high_on
   min_value: 20
   max_value: 40
   step: 0.5
   initial_value: 30
   restore_value: true
   optimistic: true

 - platform: template
   name: “Max Temperatur Lüfter aus”
   id: temp_high_off
   min_value: 20
   max_value: 40
   step: 0.5
   initial_value: 28
   restore_value: true
   optimistic: true

 - platform: template
   name: “Min Temperatur Frost an”
   id: temp_low_on
   min_value: -10
   max_value: 10
   step: 0.5
   initial_value: 5
   restore_value: true
   optimistic: true

 - platform: template
   name: “Min Temperatur Frost aus”
   id: temp_low_off
   min_value: -10
   max_value: 10
   step: 0.5
   initial_value: 7
   restore_value: true
   optimistic: true

switch:
 - platform: gpio
   pin: GPIO18
   id: relais
   internal: True
   name: “Lüfter Frostschutz”
   restore_mode: RESTORE_DEFAULT_OFF

 - platform: template
   name: “Manueller Override”
   id: manual_override
   optimistic: true

:crayon:by HarryP: Post formatiert

Hast du den Widerstand ?

https://esphome.io/components/one_wire/

Hat der PIN vom Sensor in/out ?

Welcher Sensor ist das genau ?

Moin, also Du könntest den Pin des Relais einfach mal direkt an GND und 3,3V halten - dann müsste das Relais ja schon mal schalten. Wenn nicht …. liegt es wohl am Relais.

Sieht so aus als wenn Dein Sensor an GPIO2 hängt … im Code ist GPIO4 eingtragen !
Der 18DS20 braucht wie mein Vorredner sagte einen 2,7 kOhm oder so was nach 3,3V !

hi

Nein, ich habe bisher keinen wiederstand dort eingebaut, wüsste auch nicht wie ehrlich gesagt.

Ich habe einen DS18B20 Temperatur sensor, also hat ein gelbes daten kabel, ein rotes für 3,3v und schwarz für GND

KLICK

erster google Treffer …. Relais mal an GND und 3,3V gehalten …. schaltet es ?

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)
Riesenlink “verpackt”

Habe das Relais mit den Kabeln an 3,3v und GND angeschlossen aber ich konnte keinen durchfluss/ Verbindung bei dem Plus Pols messen, wenn ich diesen mit einem Messgerät messen möchte

3,3V und GND → passt. Aber der Eingangspin des Relais Moduls kannst Du vom ESP trennen und zum testen mal an 3,3V und mal an GND halten (je nachdem wie das Modul aufgebaut ist wird es einmal schalten).

Jetzt sehe ich - Du hast ja nur 2 Leitungen an dem MOSfet Modul - ist das RICHTIG ?

Wie du siehst gibt es hier tatsächlich nur zwei Möglichkeiten zum anschließen.

Ich verstehe allerdings nicht ganz was du meinst mit 3,3v an GND halten?

Ja .. ist auch quatsch. Ich kenne solche Module mit 3 Anschlüssne GND, 3,3V und IN.

Du legst einfach 3,3V an und das Modul schaltet durch. Messen kannst Du das mit einem Multimeter wohl nicht einfach so - aber Deine Schaltspannung kannst Du ja mal anlegen und das dann direkt testen.

Ich habe den Test so aufgebaut, dass das MOSFET-Modul mit dem ESP32 verbunden war. Zusätzlich habe ich ein 5-Volt-Netzteil an die Lastklemmen des MOSFET-Moduls angeschlossen, also an die Plus- und Minusanschlüsse, über die die Spannung geschaltet wird. Dabei konnte ich beobachten, dass die 5 Volt korrekt durch das Modul geschaltet werden. Wenn das Modul aktiv ist, liegt die Spannung am Ausgang an, und wenn die Versorgung weggenommen wird, ist auch keine Spannung mehr messbar. Das zeigt, dass das MOSFET-Modul grundsätzlich funktioniert.

Anschließend habe ich den manuellen Override-Schalter getestet, der über den GPIO-Pin D18 laufen soll. Ziel war es zu prüfen, ob sich das Schaltverhalten des Moduls beeinflussen lässt. Dafür habe ich den Schalter so angeschlossen, dass er ein Signal auf den D18-Pin gibt. Allerdings hat sich dabei nichts am Verhalten des MOSFET-Moduls geändert. Das Modul hat unabhängig vom Zustand des Schalters gleich reagiert, sodass der Override-Schalter über den D18-Pin keinen erkennbaren Einfluss hatte.

Erst einmal hoffe ich das klar ist, dass dieses Relais nur für das Schalten von Gleichspannung funktioniert.

Es gibt DS18B20 Sensoren, wo bereits ein Widerstand im Kabel oder auf der Platine eingebaut ist. Du könntest mal zwischen dem gelben Kabel (Data) und dem roten Kalbel (3,3V) messen. Wenn das nur ein paar Kilo Ohm und nicht Mega Ohm sind, dann ist der Widerstand bereits eingebaut. Bei Mega Ohm benötigst Du einen zusätzlichen ca. 4,7 kOhm Widerstand zwischen 3.3V und Datenleitung, sonst funktioniert der Sensor nicht.

Du hast +3.3V an Relais-Steuer-Plus-Stecker und den GPIO (Dx) an Relais-Steuer-Minus-Stecker angeschlossen. Dann schaltet das Relais also, wenn der GPIO auf Masse (LOW) geschaltet wird (also invertierend). Mit dem GPIO (Dx) an Relais-Steuer-Plus und Relais-Steuer-Minus an Controller-GND würdest du einschalten, wenn der GPIO auf 3.3V (HIGH) geschaltet wird. Der Strom vom GPIO treibt direkt über die LED D1 den Optokoppler (vierbeiniges Bauteil) an, welcher den Mosfet schaltet.

Ich vermute mal, dass die Minus-Leitung auf der Hochvoltseite (Schrauben-Seite) des Relais durchverbunden sind und zwischen den Plus-Anschlüssen (Plus-Rein und Plus-Raus) der Mosfet steckt (Source am Eingang und Drain am Ausgang). Das Gate ist über einen Pull-Up Widerstand mit dem Plus-Eingang verbunden und der Optokoppler zieht das Gate vom Mosfet auf Masse damit der Mosfet schaltet.

Also nach meiner Theorie (Minus mit Minus bei den großen Schrauben verbunden und keine Verbindung zwischen den beiden Plus) müsstet Du, wenn Du die 12-36V Eingangsspannung am Relais Eingang (große Schrauben) anschließt und das Mosfet-Gate mit Masse (Minus-Schraube) verbindest, eine Verbindung zwischen den beiden Plus-Schrauben bekommen (diese Messung würde ich aber als Letztes durchführen…). Einfacherer Test: 3.3V and Steuer-Stecker-Plus und GND and Steuer-Stecker-Minus und das Relais (Mosfet) müsste Schalten. Der schaltet aber nur, wenn die Eingangsspannung an den Schrauben angeschlossen ist, da P-Kanal Mosfets schalten, wenn die Gate-Spannung niedriger als die Source-Spannung ist.

(Mosfet Pinbelegung ist häufig:
Gate (G): Linker Pin (Steuereingang). Drain (D): Mittlerer Pin / Kühlfahne (Ausgang). Source (S): Rechter Pin (Eingang/Versorgungsspannung))

Der DS18B20 benötigt eine Adresse, um ausgelesen zu werden. Wenn die Hardware richtig verdrahtet ist (mit Widerstand), dann wird im ESPHome-Logfile die Adresse deines Sensors angezeigt.

ESPHome Log File:

.
.
.
[17:46:35.955][C][gpio.one_wire:021]: GPIO 1-wire bus:
[17:46:35.959][C][gpio.one_wire:152]:   Pin: GPIO04
[17:46:35.971][C][gpio.one_wire:085]:   Found devices:
[17:46:35.972][C][gpio.one_wire:088]:     0x2c0817c854457145 (DS18B20)
.
.
.

Diese Adresse musst du kopieren und als Adresse in deinen YAML-Code eintragen (und danach Code neu kompilieren und flashen):

one_wire:
  - platform: gpio
    id: bus_one
    pin: GPIO04

sensor:
 #DS18B20
  - platform: dallas_temp
    address: 0x2c0817c854457145
    name: Temperatur
    id: temp_sensor
    update_interval: 10s

2 „Gefällt mir“

Ich habe den Aufbau jetzt so getestet, wie vorgeschlagen: Das MOSFET-Modul ist mit einer 12-Volt-Eingangsspannung versorgt und auf der Steuerseite mit 3,3 Volt sowie dem D18-Pin des ESP32 verbunden. Wenn ich dann mit dem Multimeter an der Ausgangsseite messe, kann ich im eingeschalteten Zustand die 12 Volt erkennen und im ausgeschalteten Zustand nicht, was zunächst so wirkt, als würde das Modul korrekt schalten. Sobald ich jedoch einen 12-Volt-Lüfter an die Ausgangsseite anschließe, tritt das Problem auf: Obwohl das MOSFET eingeschaltet ist und der Stromkreis eigentlich geschlossen sein müsste, läuft der Lüfter nicht an. Stattdessen messe ich am Ausgang nur noch etwa 1,9 Volt. Die zentrale Frage ist deshalb, warum das Modul zwar ohne Last scheinbar korrekt schaltet, unter angeschlossener Last aber die Spannung stark zusammenbricht. Unklar ist dabei vor allem, ob die Ursache an der 3,3-Volt-Ansteuerung des MOSFET-Moduls liegt oder ob es einen anderen technischen Grund für dieses Verhalten gibt.