ESP8266 - LED falsch gepolt betreiben

OP #7778345
Lesenswert?

Hallo,

ich verzweifle gerade an einem simpel klingendem Problem: Es sollen zwei LEDS mit einem ESP8266 (E13) angesteuert werden, allerdings haben die LEDs einen gemeinsamen Pluspol und separate Minuspole. Zur Vereinfachung habe ich in einen simplen Code mit nur einer LED geschrieben und die LED am ESP verpolt angeschlossen (Pluspol der LED an GND, Minuspol an GPIO4 (=D2). Doch die LED leuchtet bei keinem der Befehle. Das Multimeter zeigt, dass die Spannung entweder 0 oder die 3,3V beträgt. Aber theoretisch bräuchte ich -3,3V, da ja die LED verpolt ist. Leider kann ich die LED nicht richtig gepolt einbauen.

Kann der ESP8266 das einfach nicht? Könnte es ein ESP32? Eine externe Lösung wie Transistor oder MOSFET möchte ich vermeiden. Hier der Code:

1
#include <ESP8266WiFi.h>
2
#include <ESP8266WebServer.h>
3

4
// WLAN-Einstellungen
5
const char* ssid = "*****";       // Name WLAN
6
const char* password = "*****"; // Passwort WLAN
7

8
// LED-Pins (Minuspol der LEDs an den GPIO-Pins)
9
const int redLED = 4;    // D2 (Minuspol an D2, Pluspol an GND)
10

11
ESP8266WebServer server(80);
12

13
void setup() {
14
  Serial.begin(115200);
15
  Serial.println("Starte Setup...");
16

17
  // WLAN-Setup als Client
18
  WiFi.mode(WIFI_STA);
19
  WiFi.begin(ssid, password);
20

21
  Serial.print("Verbinde mit WLAN...");
22
  while (WiFi.status() != WL_CONNECTED) {
23
    delay(1000);
24
    Serial.print(".");
25
  }
26

27
  Serial.println("\nWLAN verbunden!");
28
  Serial.print("IP-Adresse: ");
29
  Serial.println(WiFi.localIP());
30

31
  // LED-Pin als Ausgang definieren
32
  pinMode(redLED, OUTPUT);
33

34
  // Alle LEDs aus (da verpolt, müssen wir HIGH setzen, um sie auszuschalten)
35
  digitalWrite(redLED, HIGH);  // Rot aus
36

37
  // Webserver-Routen einrichten
38
  server.on("/test", []() {
39
    // Test: LED ein und aus
40
    digitalWrite(redLED, LOW);  // Rot an
41
    delay(1000);
42
    digitalWrite(redLED, HIGH); // Rot aus
43
    server.send(200, "text/plain", "LED ein/aus Test abgeschlossen!");
44
  });
45

46
  server.on("/", HTTP_GET, []() {
47
    String html = R"rawliteral(
48
      <html>
49
      <head>
50
        <title>LED Steuerung</title>
51
        <style>
52
          body { font-family: Arial, sans-serif; text-align: center; margin: 50px; }
53
          button { font-size: 20px; padding: 15px 30px; margin: 10px; cursor: pointer; border-radius: 5px; }
54
          #test { background-color: blue; color: white; }
55
        </style>
56
      </head>
57
      <body>
58
        <h1>LED Steuerung</h1>
59
        <button id="test" onclick="sendCommand('/test')">LED Test</button>
60
        <script>
61
          function sendCommand(command) {
62
            fetch(command).catch(err => console.log("Fehler: ", err));
63
          }
64
        </script>
65
      </body>
66
      </html>
67
    )rawliteral";
68
    server.send(200, "text/html", html);
69
  });
70

71
  server.begin();
72
  Serial.println("Server gestartet");
73
}
74

75
void loop() {
76
  server.handleClient(); // Verarbeite eingehende Web-Anfragen
77
}
Beitrag #7778348 wurde von einem Moderator gelöscht.
#7778370
Lesenswert?

Darf ich kurz fragen wo die Idee her kommt, dass der Chip oder auch der esp32 -3,3 Volt ausgeben könnte?

Soweit ich weiß steht weder in den Datenblättern der Chips noch in irgendwelchen Anleitungen so etwas drin. Daher vermute ich eine konkrete Quelle, die entwedrr falsch ist, was anderes beschreibt oder sich auf zusätzliche Beschaltung bezieht.

(Relevant) negative Spannungen gibt kein (funktionierender) mir bekannter Mikrocontroller aus.

#7778373
Lesenswert?

Michael S. schrieb:

Aber theoretisch bräuchte ich -3,3V, da ja die LED verpolt ist.

Tipp: 0V ist von 3.3V zufällig genau die -3.3V entfernt, die du brauchst.

Andreas B. schrieb:

Plus an Vcc und Minuspole gegen Masse schalten.

Genau das hier.

Nur deine Schaltlogik ist dann umgekehrt. Pin low heißt dann, dass die LED leuchtet.

Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #7778377
Lesenswert?

Andreas B. schrieb:

Plus an Vcc und Minuspole gegen Masse schalten.

Und in "elektronisch": die gemeinsamen Anoden der LEDs an Vcc, die Kathode jeder LED einzeln (über einen Vorwiderstand) an einen µC-Pin. Und wenn dort dann "low" ausgegeben wird, dann leuchtet die LED.

Das Ganze nennt sich im Fachbegriff auch "low-aktiv", weil hier die LED leuchtet, wenn der Ausgang low ist.

Und ob eine 0 oder eine 1 ausgegeben wird, macht in der SW eh' keinen Mehraufwand.

Michael S. schrieb:

ich verzweifle gerade an einem simpel klingendem Problem

Du kannst diese simple Lösung des tatsächlich simplen "Problems" übrigens zigtausendmal im Netz finden, wenn du die richtigen Begriffe verwendest:

Gast #7778388
Lesenswert?

Lothar M. schrieb:

Du kannst diese simple Lösung des tatsächlich simplen "Problems" übrigens zigtausendmal im Netz finden, wenn du die richtigen Begriffe verwendest:

Was mich immer wieder verwundert ist, dass die jüngeren Leute so oft Schwierigkeiten haben, Antworten im Internet finden, obwohl es so einfach geworden ist und sie damit aufgewachsen sind. Wie kommt das?

Google fasst die vielen Ergebnisse ja sogar schon mit KI zusammen, meistens sogar korrekt. Einfacher geht es doch nun wirklich nicht, oder habe ich hier mittelalterliche Vorstellungen?

#7778429
Lesenswert?

Michael S. schrieb:

am ESP verpolt angeschlossen (Pluspol der LED an GND, Minuspol an GPIO4 (=D2). Doch die LED leuchtet bei keinem der Befehle.

Und warum glaubst Du, dass die in dieser Konstellation leuchten sollte?

Michael S. schrieb:

Aber theoretisch bräuchte ich -3,3V, da ja die LED verpolt ist. Leider kann

Eben, und zwar gegen Masse.

ich die LED nicht richtig gepolt einbauen.

Warum kannst Du das nicht? Keine Lust?

OP #7778456
Lesenswert?

Vielen Dank für die hilfreichen Antworten mit Hinweis auf VCC, es funktioniert! LED-Plus an VCC, LED-Minus an GPIO.

Die SMD-LEDs sind so auf dem Baustein gelötet, dass es einen gemeinsamen Pluspol gibt, ein anderer Anschluss ist daher nicht möglich.

Der Denkfehler war, dass man am Board weiterhin GND und den GPIO-Pin benutzt. Darauf aufbauend habe ich dann gesucht, wie man das codebasiert ändert, wenn die LED falsch angeschlossen ist. Ich bin also einen Schritt zu weit in die Fehlersuche eingestiegen und habe nichts passendes gefunden.

Moderator (Firma: Titel) Persönliche Seite #7778531
Lesenswert?

Michael S. schrieb:

Der Denkfehler war, dass man am Board weiterhin GND und den GPIO-Pin benutzt.

Das ist kein Denkfehler, sondern schlichtes Unwissen. Das kann man aber leicht ändern, wenn man sich über die verwendeten Bauteile vor dem Programmieren schlau macht.

LED-Plus an VCC, LED-Minus an GPIO.

Nochmal auf "elektronisch" für vertieften Lerneffekt: ANODE an Vcc und KATHODE an den Pin.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren