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
constchar*ssid="*****";// Name WLAN
6
constchar*password="*****";// Passwort WLAN
7
8
// LED-Pins (Minuspol der LEDs an den GPIO-Pins)
9
constintredLED=4;// D2 (Minuspol an D2, Pluspol an GND)
10
11
ESP8266WebServerserver(80);
12
13
voidsetup(){
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
Stringhtml=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; }
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.
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.
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?
Die Lösung ist doch ganz einfach:
Er hat die Anode der LED auf Gnd gelegt und die Kathoden auf Ports.
Also ist die einfachste Lösung: Den Vcc des ESP auf Gnd legen und
den Gnd des ESP auf -3,3V. Einfacher gehts doch nicht.
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.
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.