Externe LEDs am Arduino anschließen
https://oer-informatik.de/externe_led_ansteuern_nodemcu
tl/dr; (ca. 10 min Lesezeit): Nach dem “Hello World” geht es an die digitalen Ausgänge: Wie können LED angeschlossen werden? Welche gibt es? Welche Vorwiderstände benötigen sie? Woran erkenne ich den Widerstandswert? Teil 2 der NodeMCU-Reihe.
Wenn wir externe LED mit dem NodeMCU ansteuern wollen, müssen wir uns zunächst mit den elektronischen Spezifikationen der LED vertraut machen. Unser NodeMCU-Board (ESP8266 oder ESP32) liefert an den einzelnen Pins HIGH
= 3,3V oder LOW
= 0V, somit können wir LED an einer Spannung von 3,3V betreiben. Arduino Unos laufen mit 5V, hier gelten die Überlegungen analog, jedoch mit anderen Werten (siehe Tabelle unten). Typische Betriebsspannungen der LED sind etwa:
LED Farbe | Betriebsspannung |
---|---|
rot | 1,6 - 2,2 V |
gelb | 1,9 - 2,5V |
grün | 1,9 - 2,5V |
blau | 2,7 - 3,5 V |
weiß | 2,7 - 3,5 V |
Einfacher Fall: blaue und weiße LED
Eine blaue oder weiße LED können wir am NodeMCU also an 3,3V direkt anschließen, bei den anderen Farben müssen wir uns noch etwas überlegen (dazu später mehr). In den Beispielen gehe ich von einem nodeMCU auf ESP8266-Basis aus (daher Pin D6
). Bei einem ESP32 gilt alles entsprechend, nur der Pin müsste anders heißen (z.B. GPIO4
).
Wir haben zwei Möglichkeiten, die benötigten 3,3V zu erhalten:
- zwischen einem Pin (z.B.
D6
) und GND (0V), wenn wirD6
aufHIGH
(also 3,3V) stellen (high-active)

- zwischen einem Pin (z.B.
D6
) und 3V3 (3,3V), wenn wirD6
aufLOW
(also 0V) stellen (low-active)

Wichtig hierbei ist, dass wir die LED mit dem Pluspol an den jeweilig positiveren Pin anschließen. Der Pluspol (die Anode) ist daran zu erkennen, dass er von allem mehr hat: mehr Kragen und mehr (längeres) Beinchen. Der Minuspol der LED (Kathode) ist an der LED abgeflacht und hat ein kürzeres Beinchen. Ist die LED verkehrt herum verbunden, sperrt sie und leuchtet nicht.
LED mit Vorwiderstand
Im Fall einer roten, gelben oder grünen LED müssen wir die anliegende Spannung auf unter 3,3V mindern, um die LED nicht zu zerstören. Wir fügen ein zusätzliches Bauteil in den Stromkreis ein: einen Vorwiderstand. Und wir nutzen eine der Grundgesetzmäßigkeiten des elektrischen Stromkreises, das zweite Kirchhoff’sche Gesetz:
Die Summe aller Spannungen beim Umlauf in einer geschlossenen Masche ist Null.

Wir haben in unserem Stromkreis die Spannungsquelle (D6
und GND
) mit U_{ges} =3,3V, die LED (an einer roten LED sollen U_{LED}=1,6V fallen) und einen noch unbekannten Vorwiderstand R_{V}, an dem die Spannung U_{V} fällt.
Es gilt also:
\sum{U_i}=0
Die Spannungen müssen in einem Maschendurchlauf (Pfeilrichtung) summiert werden, wenn der Pfeil gegen die Umlaufrichtung verläuft (bei U_{ges}) mit negativem Vorzeichen!
\Rightarrow U_{V} + U_{LED} - U_{ges} = 0
\Rightarrow U_{V} = U_{ges} - U_{LED} = 3,3V - 1,6 V = 1,7 V
Am Vorwiderstand müssen also 1,7V fallen, damit die LED am Betriebspunkt betrieben werden kann.
Um den Widerstand dimensionieren zu können, müssen wir dem Datenblatt der LED noch die Betriebsstromstärke entnehmen. Üblicherweise liegt diese bei LED um die I_{LED} = 20 mA. Da in unverzweigten Stromkreisen die Stromstärke an jedem Punkt identisch ist, können wir diese Stromstärke auch für den Vorwiderstand annehmen.
Mit Hilfe der Gleichung für den elektrischen Widerstand können wir den benötigten Vorwiderstandswert ausrechnen:
R_{V} = \frac{U_{V}}{I_{LED}} = \frac{1,7V}{0,20A} = 85 \frac{V}{A} = 85 \Omega
Nicht alle Widerstandswerte sind als Bauteil verfügbar, wir müssen daher auf diskrete vorhandene Werte ausweichen. Diese sollten nicht zu niedrig gewählt werden, da sonst eine höhere Stromstärke im Stromkreis fließt. Im ungünstigsten Fall können dadurch Bauteile oder Leiterbahnen zerstört werden. Bei einem zu hoch gewählten Widerstandswert leuchtet die LED mit etwas geringerer Leuchtkraft - das ist vertretbar und unproblematisch.
Widerstände können als Bauteil gekauft werden und sind in Serien sortiert, die unterschiedlich viele Werte je Dekade (je Faktor 10) haben. Die E3 Reihe hat z.B. drei Werte je Dekade: 10 \Omega, 22 \Omega, 47 \Omega und dann in der nächsten Dekade: 100 \Omega, 220 \Omega, 470 \Omega usw. Bei der E6 Reihe sind es entsprechend sechs Werte je Dekade, bei der E12-Reihe zwölf und so weiter. Beispielhaft sind hier für die erste Dekade (1 \Omega <= R < 10 \Omega) die Werte der E-Reihen genannt:

Oft liegen nur die Widerstände der E3-Reihe zwischen 100 \Omega und 10 k\Omega vor. Bei nodeMCU-Controllern kann dann für alle LED-Farben zum 100 \Omega-Widerstand gegriffen werden (bei blauen und weißen LED kann ggf. auf diesen verzichtet werden - siehe Datenblatt oder eigene Messung). Bei 5V-basierten Microcontrollern wie dem Arduino wäre für alle LED ein 220 \Omega-Widerstand passend. Wenn präzisere E-Reihen vorliegen, können die Widerstände an Hand der folgenden Tabelle ausgewählt werden:
LED Farbe | Betriebsspannung | errechneter Vorwiderstandswert an 3,3V Microcontroller (z.B: nodeMCU), ausgewählte Widerstände je E-Reihe | errechneter Vorwiderstandswert an 5 V Microcontroller (z.B: Arduino), ausgewählte Widerstände je E-Reihe |
---|---|---|---|
rot | 1,6 - 2,2 V | 55 \Omega - 85 \Omega E3/E6/E12: 100 \Omega E24: 91 \Omega |
140 \Omega - 170 \Omega E3/E6: 220 \Omega E12/E24: 180 \Omega |
gelb | 1,9 - 2,5V | 40 \Omega - 70 \Omega E3/E6: 100 \Omega E12/E24: 82 \Omega |
125 \Omega - 155 \Omega E3/E6: 220 \Omega E12/E24: 180 \Omega |
grün | 1,9 - 2,5V | 40 \Omega - 70 \Omega E3/E6: 100 \Omega E12/E24: 82 \Omega |
125 \Omega - 155 \Omega E3/E6: 220 \Omega E12/E24: 180 \Omega |
blau | 2,7 - 3,5 V | 0 \Omega - 30 \Omega E3: 47 \Omega E6/E12/E24: 33 \Omega |
75 \Omega - 125 \Omega E3: 220 \Omega E6/E12/E24: 150 \Omega |
weiß | 2,7 - 3,5 V | 0 \Omega - 30 \Omega E3: 47 \Omega E6/E12/E24: 33 \Omega |
75 \Omega - 125 \Omega E3: 220 \Omega E6/E12/E24: 150 \Omega |
Da die Widerstände als Bauteil zu klein sind, um Werte darauf aufzudrucken, wurde eine Farbcodierung entwickelt. Vier oder fünf Farbringe beschreiben den jeweiligen Wert:
Bei vier Ringen: zwei Zahlenwerte, ein Multiplikator, ein Ring zur Angabe der Toleranz (silber oder gold).
Bei fünf Ringen: drei Zahlenwerte, ein Multiplikator, ein Ring zur Angabe der Toleranz (grün, blau, violett).

Ein 100 \Omega (5\%) Widerstand mit vier Ringen hat die Farbfolge: braun-schwarz-braun-gold. Weitere verbreitete Beispiele mit 4 Ringen:

Ein 100 \Omega (1\%) Widerstand mit fünf Ringen hat die Farbfolge: braun-schwarz-schwarz-schwarz-braun. Weitere verbreitete Beispiele mit 5 Ringen:

Aufbau der Schaltung mit externen LED auf einem Breadboard
Das Breadboard führt oben und unten je eine blaue Schiene für Ground (GND
) und eine rote Schiene für 3,3 Volt (3V3
), die waagerecht durchkontaktiert sind und mit den entsprechenden Anschlüssen des NodeMCU verbunden werden sollten.
In der Mitte des Breadboards sind oberhalb und unterhalb der mittigen Nut jeweils 5 Pins senkrecht durchkontaktiert.
Wir schließen die LED an, in dem wir von der unteren GND
-Schiene kommend auf eine Spalte der unteren Hälfte gehen, von dort über einen 100 \Omega - Widerstand auf die obere Hälfte, dort in der selben Spalte die Kathode der LED anschließen (das kürzere Beinchen). Die Anode der LED steckt in der benachbarten Spalte, von wo eine Brücke zu einem der gewählten digitalen Ausgänge geht. Der Beispielcode hier ist für einen ESP8266-basierten NodeMCU (D6
, D7
und D8
). Für andere Microcontroller müssen einfach die entsprechenden GPIO-Bezeichnungen ersetzt werden (also z.B. GPIO25
, GPIO26
, GPIO27
).

Ein zugehöriger Sketch nutzt die selben Elemente, die wir schon beim “Hello World” kennengelernt hatten - nur mit den gewählten Anschlüssen der LED. Diesmal sind die LED highactive, leuchten also bei anliegendem HIGH
-Signal. Eine Ampelschaltung könnte etwa so aussehen:
/*Liste der Ein- und Ausgabeelemente und Deklaration der Pins:
Datentyp | Name | Anschlusspin | Name, Eigenschaften*/
const int LED_ROT = D8; // highaktiv
const int LED_GELB = D7; // highaktiv
const int LED_GRUEN = D6; // highaktiv
void setup() {
pinMode(LED_GRUEN, OUTPUT); // define LED-Pins as an Output
pinMode(LED_GELB, OUTPUT);
pinMode(LED_ROT, OUTPUT);
}
void loop() {
//grün
digitalWrite(LED_GRUEN, HIGH);
digitalWrite(LED_GELB, LOW);
digitalWrite(LED_ROT, LOW);
delay(3000); // wait for three seconds (3000ms)
//gelb
digitalWrite(LED_GRUEN, LOW);
digitalWrite(LED_GELB, HIGH);
delay(1000); // wait for a second (1000ms)
//rot
digitalWrite(LED_GELB, LOW);
digitalWrite(LED_ROT, HIGH);
delay(3000); // wait for three seconds (3000ms)
// rot-gelb
digitalWrite(LED_GELB, HIGH);
digitalWrite(LED_ROT, HIGH);
delay(1000); // wait for a second (1000ms)
}
Weitere Literatur und Quellen
Quellen und offene Ressourcen (OER)
Die Ursprungstexte (als Markdown), Grafiken und zugrunde liegende Diagrammquelltexte finden sich (soweit möglich in weiterbearbeitbarer Form) in folgendem git-Repository:
https://gitlab.com/oer-informatik/mcu/arduino-esp.
Sofern nicht explizit anderweitig angegeben sind sie zur Nutzung als Open Education Resource (OER) unter Namensnennung (H. Stein, oer-informatik.de) freigegeben gemäß der Creative Commons Namensnennung 4.0 International Lizenz (CC BY 4.0).