NodeMCU ESP8266: Pinbelegung, Arduino IDE und WLAN-Webserver
Was ist der NodeMCU ESP8266? D1–D8 und GPIO-Zuordnung, Arduino-IDE-Einrichtung, WLAN, Webserver zum Schalten einer LED, 3,3-V-Grenze und Unterschiede zum ESP32.
Der NodeMCU ist ein günstiges Entwicklungsboard, das den WLAN-fähigen ESP8266-Chip mit USB-Anschluss, 3,3-V-Spannungsregler und steckbrettfreundlichen Pins kombiniert. Du programmierst ihn mit denselben Befehlen, die du aus der Arduino IDE kennst, und er kann sich ganz allein in dein Heimnetz einwählen und eine Webseite bereitstellen, die du auf dem Handy öffnest. Wenn du einen Temperatursensor ins Internet bringen, ein Relais per Handy schalten oder einen LED-Streifen zu Hause steuern möchtest, ist der NodeMCU ESP8266 einer der günstigsten Einstiege.
In dieser Anleitung gehst du Schritt für Schritt durch die technischen Daten des NodeMCU, die verwirrende Zuordnung D1–D8 zu GPIO, die Pins, die den Bootvorgang beeinflussen, die Einrichtung in der Arduino IDE, die WLAN-Verbindung und einen Webserver, der eine LED per Handy schaltet. In den letzten Abschnitten findest du die Unterschiede zwischen ESP8266 und ESP32 sowie Lösungen für die häufigsten Fehler.

Was sind ESP8266 und NodeMCU?
Der ESP8266 ist ein 32-Bit-Mikrocontroller mit integriertem WLAN, den Espressif 2014 auf den Markt brachte. Dank seines sehr niedrigen Preises hat er WLAN-Projekte in der Maker-Szene populär gemacht. Der Name NodeMCU bezeichnete ursprünglich eine Lua-basierte Firmware für diesen Chip und das dazugehörige Open-Source-Entwicklungsboard; heute steht er allgemein für Boards mit dem ESP-12E-Modul. In Lua programmierst du ihn aber kaum noch; die meisten nutzen die Arduino IDE oder MicroPython.
| Eigenschaft | Wert |
|---|---|
| Chip | ESP8266EX, Tensilica L106, 32 Bit |
| Taktfrequenz | 80 MHz (auf 160 MHz erhöhbar) |
| RAM | Etwa 80 KB Benutzer-RAM (bei aktivem WLAN bleiben 40–50 KB für deinen Sketch) |
| Flash-Speicher | 4 MB (ESP-12E-Modul) |
| WLAN | 802.11 b/g/n, nur 2,4 GHz; Station, Access Point oder beides |
| Bluetooth | Nicht vorhanden |
| Nutzbare GPIOs | Etwa 11 (D0–D8, RX, TX) |
| Analogeingang | 1 Kanal (A0), 10 Bit, auf dem Board etwa 0–3,2 V |
| PWM | Softwarebasiert, standardmäßig 1 kHz, Bereich 0–255 |
| Betriebsspannung | 3,3 V (Versorgung mit 5 V über USB oder VIN) |
| Stromaufnahme | Im WLAN durchschnittlich 70–80 mA, beim Senden bis 170 mA |
Auf dem Markt gibt es zwei verbreitete NodeMCU-Versionen. Die V2 (Amica) ist schmal, nutzt einen CP2102-USB-Seriell-Wandler und lässt auf dem Steckbrett auf jeder Seite eine Reihe Löcher frei. Die V3 (LoLin) ist breiter, nutzt einen CH340G und bedeckt ein normales Steckbrett fast vollständig; mit zwei nebeneinander gestellten Steckbrettern arbeitest du mit der V3 deshalb viel bequemer. Beide Versionen haben dieselbe Pinbelegung und laufen mit demselben Code. Wenn du ein kleineres Board willst: Der Wemos D1 Mini trägt denselben Chip und läuft mit denselben Sketches.
NodeMCU-Pinbelegung: D1–D8 und GPIO-Zuordnung
Das Verwirrendste am NodeMCU ist, dass die auf dem Board aufgedruckten D-Bezeichnungen nicht den echten GPIO-Nummern des Chips entsprechen. Der Pin mit der Aufschrift D1 ist zum Beispiel in Wirklichkeit GPIO 5. Wählst du in der Arduino IDE das NodeMCU-Board aus, kannst du im Code D1 schreiben, und der Compiler macht automatisch 5 daraus; schreibst du aber digitalWrite(1, HIGH), steuerst du GPIO 1, also den TX-Pin der seriellen Schnittstelle. In MicroPython verwendest du immer die GPIO-Nummer.
| Aufdruck | GPIO | Zusatzfunktion | Hinweis |
|---|---|---|---|
| D0 | GPIO 16 | Aufwachen aus dem Deep Sleep | Keine Interrupts; für Deep Sleep mit RST verbinden |
| D1 | GPIO 5 | I2C SCL | Sicher, allgemein nutzbar |
| D2 | GPIO 4 | I2C SDA | Sicher, allgemein nutzbar |
| D3 | GPIO 0 | FLASH-Taste | Ist er beim Booten LOW, geht das Board in den Programmiermodus |
| D4 | GPIO 2 | Onboard-LED (invertiert), TX1 | Muss beim Booten HIGH sein |
| D5 | GPIO 14 | SPI SCK | Sicher, allgemein nutzbar |
| D6 | GPIO 12 | SPI MISO | Sicher, allgemein nutzbar |
| D7 | GPIO 13 | SPI MOSI | Sicher, allgemein nutzbar |
| D8 | GPIO 15 | SPI CS | Muss beim Booten LOW sein; das Board hat einen Pull-down-Widerstand |
| RX | GPIO 3 | UART RX | Bei Nutzung des seriellen Monitors frei lassen |
| TX | GPIO 1 | UART TX | Sendet beim Start die Bootmeldungen |
| A0 | ADC0 | Analogeingang | Nur analoges Lesen, etwa 0–3,2 V |
| SD2, SD3 | GPIO 9, 10 | Mit dem Flash-Speicher verbunden | Nicht verwenden |
Laut dieser Tabelle kannst du in deinen ersten Projekten bedenkenlos die Pins D1, D2, D5, D6 und D7 nutzen. D3, D4 und D8 bestimmen dagegen den Bootmodus: Beim Einschalten prüft der ESP8266 die Pegel von GPIO 0, GPIO 2 und GPIO 15 und erwartet für einen normalen Start GPIO 0 und GPIO 2 auf HIGH sowie GPIO 15 auf LOW. Verändert ein Taster, Relais oder Sensor an diesen Pins den Pegel beim Start, bootet das Board statt deines Programms in den Upload-Modus oder gar nicht. Für Taster kannst du D3 und D4 trotzdem nutzen, weil ein Taster beim Booten nicht gedrückt ist; Module, deren Ausgang auf LOW liegt, gehören aber nicht an diese Pins.
Auch der Pin A0 ist ein Sonderfall: Der Analogeingang des ESP8266-Chips misst nur 0–1 V, dank des Spannungsteilers aus 220 kΩ und 100 kΩ auf dem NodeMCU-Board kannst du an A0 aber etwa 0–3,2 V anlegen, und analogRead(A0) gibt diesen Bereich als 0–1023 zurück. Da es nur einen Analogeingang gibt, brauchst du für mehrere analoge Sensoren einen I2C-ADC wie den ADS1115. Die Pins D1 und D2 sind der Standard-I2C-Bus; die Grundlagen von I2C findest du in Was ist I2C?.
ESP8266 in der Arduino IDE einrichten
- Öffne in der Arduino IDE Datei > Einstellungen und trage https://arduino.esp8266.com/stable/package_esp8266com_index.json im Feld „Zusätzliche Boardverwalter-URLs“ ein.
- Öffne Werkzeuge > Board > Boardverwalter, suche nach esp8266 und installiere das Paket von ESP8266 Community.
- Wähle im Menü Werkzeuge > Board den Eintrag NodeMCU 1.0 (ESP-12E Module). Für einen Wemos D1 Mini nimmst du stattdessen LOLIN(WEMOS) D1 R2 & mini.
- Schließe das Board mit einem Datenkabel an und wähle den Port unter Werkzeuge > Port. Erscheint kein Port, installiere den CH340-Treiber für V3-Boards oder den CP2102-Treiber für V2-Boards.
- Lass Upload Speed auf 115200; wenn das Hochladen zuverlässig klappt, kannst du auf 921600 erhöhen und schneller hochladen.
Erster Sketch: die Onboard-LED blinken lassen
Auf dem NodeMCU sitzt auf dem ESP-12E-Modul eine blaue LED an GPIO 2 (D4); V2-Boards (Amica) haben eine zweite LED an D0. Diese LEDs arbeiten mit invertierter Logik: Sie leuchten, wenn der Pin LOW ist, und gehen bei HIGH aus. Im Arduino-Core ist die Konstante LED_BUILTIN bereits als 2 definiert:
1// NodeMCU dahili LED'i: GPIO2 (D4), ters mantık / onboard LED: GPIO2 (D4), inverted logic
2
3void setup() {
4 pinMode(LED_BUILTIN, OUTPUT);
5}
6
7void loop() {
8 digitalWrite(LED_BUILTIN, LOW); // LOW = yanar / LOW = on
9 delay(500);
10 digitalWrite(LED_BUILTIN, HIGH); // HIGH = söner / HIGH = off
11 delay(500);
12}Mit dem WLAN verbinden
Die eigentliche Stärke des ESP8266 ist das WLAN. Der folgende Sketch verbindet das Board im Station-Modus mit deinem Heimnetz und gibt die vom Router vergebene IP-Adresse sowie die Signalstärke im seriellen Monitor aus. Klappt die Verbindung nicht innerhalb von 20 Sekunden, hört er auf zu warten und gibt eine Warnung aus. Ersetze Netzwerkname und Passwort durch deine eigenen Daten und öffne den seriellen Monitor mit 115200 Baud:
1#include <ESP8266WiFi.h>
2
3const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
4const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
5
6void setup() {
7 Serial.begin(115200);
8 Serial.println();
9 WiFi.mode(WIFI_STA); // istemci modu / station mode
10 WiFi.begin(ssid, password);
11 Serial.print("Baglaniyor / connecting");
12 unsigned long start = millis();
13 while (WiFi.status() != WL_CONNECTED) {
14 delay(500);
15 Serial.print('.');
16 if (millis() - start > 20000) { // 20 sn'de bağlanamazsa / give up after 20 s
17 Serial.println("\nBaglanamadi, ag adini ve sifreyi kontrol et / failed, check SSID and password");
18 return;
19 }
20 }
21 Serial.println();
22 Serial.print("IP: ");
23 Serial.println(WiFi.localIP()); // modemin verdiği adres / address given by the router
24 Serial.print("Sinyal / RSSI: ");
25 Serial.print(WiFi.RSSI()); // -50 iyi, -80 zayıf / -50 good, -80 weak
26 Serial.println(" dBm");
27}
28
29void loop() {
30}| RSSI-Wert | Signalqualität | Was du erwarten kannst |
|---|---|---|
| -30 bis -50 dBm | Sehr gut | Stabile, schnelle Verbindung |
| -50 bis -67 dBm | Gut | Reicht für Webserver und Sensordaten |
| -67 bis -80 dBm | Schwach | Gelegentliche Abbrüche, langsamer Seitenaufbau |
| Unter -80 dBm | Sehr schwach | Verbindung klappt eventuell nicht; Board näher an den Router bringen |
LED per Handy schalten: ein einfacher Webserver
Jetzt machen wir aus dem NodeMCU einen kleinen Webserver. Schließe an Pin D1 (GPIO 5) eine LED mit 220-Ω-Widerstand an: Das lange Bein der LED geht über den Widerstand an D1, das kurze an GND. Bei einer roten LED ergibt dieser Widerstand (3,3 V − 2 V) / 220 Ω ≈ 6 mA, also deutlich unter der Grenze des Pins; den Wert für deine eigene LED berechnest du mit dem LED-Vorwiderstand-Rechner. Öffne nach dem Hochladen die im seriellen Monitor angezeigte Adresse im Browser eines Handys, das im selben WLAN ist.
1#include <ESP8266WiFi.h>
2#include <ESP8266WebServer.h>
3#include <ESP8266mDNS.h>
4
5const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
6const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
7
8const int LED_PIN = D1; // GPIO5, 220 ohm direnç ile LED / LED through a 220 ohm resistor
9bool ledOn = false;
10
11ESP8266WebServer server(80);
12
13void handleRoot() {
14 String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>"
15 "<meta name='viewport' content='width=device-width,initial-scale=1'>"
16 "<title>NodeMCU</title></head>"
17 "<body style='font-family:sans-serif;text-align:center'>"
18 "<h1>NodeMCU LED</h1><p>LED: <b>";
19 html += ledOn ? "ACIK / ON" : "KAPALI / OFF";
20 html += "</b></p><p>A0: ";
21 html += analogRead(A0); // 0-1023 arası analog değer / analog value 0-1023
22 html += "</p><p><a href='/on'><button>AC / ON</button></a> "
23 "<a href='/off'><button>KAPAT / OFF</button></a></p></body></html>";
24 server.send(200, "text/html", html);
25}
26
27void setLed(bool on) {
28 ledOn = on;
29 digitalWrite(LED_PIN, on ? HIGH : LOW);
30 server.sendHeader("Location", "/"); // ana sayfaya yönlendir / redirect to the main page
31 server.send(303, "text/plain", "");
32}
33
34void setup() {
35 pinMode(LED_PIN, OUTPUT);
36 digitalWrite(LED_PIN, LOW);
37 Serial.begin(115200);
38 WiFi.mode(WIFI_STA);
39 WiFi.begin(ssid, password);
40 while (WiFi.status() != WL_CONNECTED) {
41 delay(500);
42 Serial.print('.');
43 }
44 Serial.println();
45 Serial.print("Tarayicida ac / open in browser: http://");
46 Serial.println(WiFi.localIP());
47
48 if (MDNS.begin("nodemcu")) { // http://nodemcu.local adresi / address http://nodemcu.local
49 MDNS.addService("http", "tcp", 80);
50 }
51
52 server.on("/", handleRoot);
53 server.on("/on", []() { setLed(true); });
54 server.on("/off", []() { setLed(false); });
55 server.onNotFound([]() { server.send(404, "text/plain", "Bulunamadi / not found"); });
56 server.begin();
57}
58
59void loop() {
60 server.handleClient(); // gelen istekleri işle / handle incoming requests
61 MDNS.update();
62}| Codeteil | Was er macht |
|---|---|
| ESP8266WebServer server(80) | Erstellt einen Server auf Port 80 (HTTP) |
| server.on("/on", ...) | Schaltet die LED ein, wenn der Browser /on aufruft |
| sendHeader("Location", "/") und send(303) | Leitet den Browser nach der Aktion zurück auf die Startseite; ein Neuladen der Seite sendet den Befehl nicht erneut |
| analogRead(A0) | Zeigt den Wert an A0 auf der Seite an; dort kannst du einen LDR oder ein Potentiometer anschließen |
| MDNS.begin("nodemcu") | Macht das Gerät unter dem Namen nodemcu.local statt über die IP erreichbar |
| server.handleClient() | Muss in loop ständig aufgerufen werden; verarbeitet eingehende Anfragen |
Wenn sich die Seite nicht öffnet, prüfe, ob dein Handy im selben WLAN wie der NodeMCU ist und nicht im Gastnetz oder in den mobilen Daten. Der Name nodemcu.local funktioniert auf Computern und iPhones meist; manchen Android-Handys fehlt die mDNS-Unterstützung, dort brauchst du die IP-Adresse. Schließt du statt der LED ein Relaismodul an, steuerst du mit demselben Code eine echte Lampe; Details findest du in Was ist ein Relaismodul?.
Access-Point-Modus (AP): Verbindung ohne Router
Gibt es kein WLAN in der Nähe, kann der NodeMCU ein eigenes Netz aufbauen. Im Access-Point-Modus verbindest du dein Handy direkt mit dem Netz NodeMCU-AP, und das Board antwortet meist unter 192.168.4.1. Dieser Modus ist ideal für eine Bewässerung im Garten oder ein Messgerät im Außeneinsatz. Um den Webserver von oben mit diesem Modus zu kombinieren, ersetzt du einfach die WiFi.begin-Zeilen durch die softAP-Zeilen; der Modus WIFI_AP_STA übernimmt beide Rollen gleichzeitig. Das Passwort muss mindestens 8 Zeichen lang sein, sonst wird das Netz nicht erstellt.
1#include <ESP8266WiFi.h>
2
3void setup() {
4 Serial.begin(115200);
5 WiFi.mode(WIFI_AP); // kendi ağını kur / create its own network
6 bool ok = WiFi.softAP("NodeMCU-AP", "12345678"); // ad ve en az 8 karakter şifre / name and 8+ char password
7 Serial.println(ok ? "AP hazir / AP ready" : "AP hatasi / AP error");
8 Serial.print("IP: ");
9 Serial.println(WiFi.softAPIP()); // genellikle 192.168.4.1 / usually 192.168.4.1
10}
11
12void loop() {
13 Serial.print("Bagli cihaz / stations: ");
14 Serial.println(WiFi.softAPgetStationNum());
15 delay(3000);
16}ESP8266 mit MicroPython
Neben der Arduino-Sprache lässt sich der NodeMCU auch mit MicroPython programmieren. Nachdem du die MicroPython-Firmware mit esptool aufgespielt hast, führst du Python-Code direkt aus einem Editor wie Thonny aus. Da der Speicher des ESP8266 begrenzt ist, können große MicroPython-Programme Speicherfehler auslösen; für einfache WLAN- und Sensorprojekte ist es aber sehr praktisch. Beachte, dass du in MicroPython als Pinnummer die GPIO-Nummer schreibst, nicht die D-Bezeichnung:
1import network, time
2from machine import Pin
3
4led = Pin(2, Pin.OUT) # D4 = GPIO2, dahili LED / onboard LED
5wlan = network.WLAN(network.STA_IF)
6wlan.active(True)
7wlan.connect("AgAdi", "Sifre123") # Wi-Fi adı ve şifresi / Wi-Fi name and password
8
9while not wlan.isconnected():
10 time.sleep(0.5)
11print("IP:", wlan.ifconfig()[0])
12
13while True:
14 led.value(not led.value()) # ters mantık: 0 = yanar / inverted: 0 = on
15 time.sleep(0.5)ESP8266 oder ESP32?
| Eigenschaft | ESP8266 (NodeMCU) | ESP32 (DevKit) |
|---|---|---|
| Prozessor | Ein Kern, 80/160 MHz | Zwei Kerne, 240 MHz |
| RAM | Etwa 80 KB Benutzer-RAM | 520 KB |
| WLAN | 802.11 b/g/n, 2,4 GHz | 802.11 b/g/n, 2,4 GHz |
| Bluetooth | Nicht vorhanden | Classic und BLE |
| GPIO | Etwa 11 | Etwa 34 (einige nur Eingang) |
| Analogeingang | 1 Kanal, 10 Bit | 18 Kanäle, 12 Bit |
| PWM | Softwarebasiert | 16-Kanal-Hardware-PWM (LEDC) |
| I2C und UART | Software-I2C, 1 vollständiger UART plus UART1 nur mit TX | 2 Hardware-I2C, 3 UARTs |
| Touch-Pins und DAC | Nicht vorhanden | 10 Touch-Pins, 2 DACs |
| Preis | Günstiger | Etwas teurer |
Kurz gesagt: Für Aufgaben wie die Daten eines Sensors ins Internet schicken, ein Relais per Handy schalten oder eine einfache Webseite ausliefern reicht der ESP8266 nach wie vor völlig aus, und er ist günstiger. Für neue Projekte mit Bluetooth, vielen Analogeingängen, Kamera, viel Rechenleistung oder vielen gleichzeitigen Aufgaben ist der ESP32 die bessere Wahl. Code lässt sich leicht übertragen: Oft reicht es, WiFi.h statt ESP8266WiFi.h, WebServer.h statt ESP8266WebServer.h und ESPmDNS.h statt ESP8266mDNS.h zu schreiben, die Zeile MDNS.update() zu löschen (die gibt es beim ESP32 nicht) und statt Board-Bezeichnungen wie D1 die GPIO-Nummern zu verwenden. Mehr dazu in Was ist der ESP32? und Arduino oder ESP32?.
Stromversorgung und Deep Sleep
Der NodeMCU wird mit 5 V über USB oder den VIN-Pin versorgt, und der Regler auf dem Board macht daraus 3,3 V. Die Stromspitze von 170 mA beim Senden über WLAN kann an einem schwachen USB-Port oder über ein dünnes Kabel die Spannung einbrechen lassen und das Board neu starten; nimm deshalb ein gutes Kabel und ein Netzteil mit mindestens 1 A. Bei Batterieprojekten schickt ESP.deepSleep() den Chip mit etwa 20 µA schlafen; damit er nach Ablauf des Timers aufwachen kann, musst du D0 (GPIO 16) mit dem RST-Pin verbinden. Der USB-Seriell-Wandler und der Regler auf dem Board ziehen aber auch im Schlaf weiter Strom, daher liefern für lange Akkulaufzeiten ein nacktes ESP-12-Modul oder stromsparende Boards bessere Ergebnisse. Die Akkulaufzeit schätzt du mit dem Akkulaufzeit-Rechner ab.
Projektideen mit dem NodeMCU
- WLAN-Thermometer: Zeige Temperatur und Luftfeuchtigkeit eines DHT11 auf einer Seite an, die du auf dem Handy öffnest.
- Smarte Steckdose: Schalte eine Lampe mit einem Relaismodul über eine Taste auf einer Webseite ein und aus.
- Gießwarnung für Pflanzen: Schließe einen Bodenfeuchtesensor an A0 an und zeige eine Warnung auf der Seite, wenn die Erde austrocknet.
- WLAN-LED-Streifen: Wähle Farbe und Effekt eines WS2812B-Streifens per Handy.
- Internetuhr: Hol dir die Uhrzeit von einem NTP-Server und zeige sie auf einem I2C-LCD an.
- Bewegungsalarm: Schicke eine Telegram-Nachricht, wenn ein PIR-Sensor eine Bewegung erkennt.
Häufige Fehler und Lösungen
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Kein Port sichtbar | Reines Ladekabel oder fehlender Treiber | Datenkabel verwenden; CH340- oder CP2102-Treiber installieren |
| „Failed to connect to ESP8266: Timed out waiting for packet header“ | Board konnte nicht in den Upload-Modus wechseln | FLASH gedrückt halten, RST drücken und loslassen, dann FLASH loslassen und den Upload neu starten |
| Board startet nicht oder bootet ständig neu | Schaltung an D3, D4 oder D8 stört die Bootpegel | Diese Schaltung auf sichere Pins wie D5, D6 oder D7 legen |
| Wirre Zeichen im seriellen Monitor | Falsche Baudrate | Dieselbe Geschwindigkeit wie im Code wählen; Bootmeldungen kommen mit 74880 Baud |
| Keine WLAN-Verbindung | 5-GHz-Netz, falsches Passwort oder schwaches Signal | 2,4-GHz-Netz nutzen, Groß- und Kleinschreibung prüfen, RSSI ansehen |
| LED bleibt aus und der serielle Monitor verstummt | Im Code steht 1 statt D1 (GPIO 1 = TX) | Im Code D1 oder GPIO 5 verwenden |
| Fehler „Soft WDT reset“ | Eine Schleife in loop() läuft zu lange | In lange Schleifen yield() oder delay(1) einbauen; beides gibt den WLAN-Hintergrundaufgaben und dem Watchdog Zeit |
Der NodeMCU ESP8266 ist der günstigste Weg, dein Arduino-Wissen in die drahtlose Welt mitzunehmen: Mit wenigen Zeilen Code verbindet er sich mit deinem Heimnetz und ermöglicht Geräte, die du per Handy steuerst. In der BlueGrays-App findest du drahtlose Projekte wie WLAN-Verbindung, Webserver, WebSocket, NTP-Uhr und mDNS auf dem ESP32 mit Schritt-für-Schritt-Schaltplänen und Code, und dieselbe Logik kannst du ganz einfach auf deinen NodeMCU übertragen.
Häufige Fragen
Sind NodeMCU und ESP8266 dasselbe?
ESP8266 ist der Name des WLAN-Chips von Espressif. Der NodeMCU ist ein Entwicklungsboard, das das ESP-12E-Modul mit diesem Chip um USB-Anschluss, Spannungsregler und steckbrettfreundliche Pins ergänzt. Kurz: Jeder NodeMCU ist ein ESP8266-Board, aber nicht jedes ESP8266-Board ist ein NodeMCU; auch der ESP-01 und der Wemos D1 Mini nutzen denselben Chip.
Funktioniert der NodeMCU mit 5 V?
Das Board lässt sich mit 5 V über USB oder den VIN-Pin versorgen, der Regler macht daraus 3,3 V. Die GPIO-Pins arbeiten jedoch mit 3,3 V und sind offiziell nicht 5-V-tolerant. 5-V-Signale solltest du über einen Spannungsteiler oder Pegelwandler anschließen.
Welcher GPIO ist D1 beim NodeMCU?
D1 ist GPIO 5 und der Standard-SCL-Pin für I2C. Weitere häufige Zuordnungen sind D2 = GPIO 4, D4 = GPIO 2, D5 = GPIO 14, D6 = GPIO 12, D7 = GPIO 13 und D8 = GPIO 15. In der Arduino IDE kannst du direkt D1 in den Code schreiben, in MicroPython musst du die GPIO-Nummer verwenden.
Kann sich der ESP8266 mit 5-GHz-WLAN verbinden?
Nein, der ESP8266 unterstützt nur 802.11-b/g/n-Netze im 2,4-GHz-Band. Achte darauf, dass das 2,4-GHz-Band deines Routers aktiv ist; teilen sich beide Bänder einen Namen, löst ein eigener Netzwerkname für 2,4 GHz Verbindungsprobleme oft.
Was ist der Unterschied zwischen NodeMCU V2 und V3?
Die V2 (Amica) ist schmaler, nutzt einen CP2102-USB-Seriell-Wandler und lässt auf dem Steckbrett beidseitig Löcher frei. Die V3 (LoLin) ist breiter und nutzt einen CH340G. Pins, Prozessor und Code sind identisch; Unterschiede gibt es nur bei der Größe und beim USB-Treiber, den du installieren musst.
Hat der ESP8266 Bluetooth?
Nein, der ESP8266 hat keine Bluetooth-Hardware, er unterstützt nur WLAN. Für Projekte mit Bluetooth oder BLE nimmst du einen ESP32 oder ergänzt dein Board um ein separates Bluetooth-Modul wie den HC-05.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
LED Blinken mit ESP32
Lehrt die grundlegende Verwendung von GPIO-Ausgängen mit ESP32. Wir erreichen einen Blinkeffekt, indem wir eine LED über einen digitalen Pin ein- und ausschalten. ESP32-Version des klassischen Blink-Projekts auf Arduino UNO; Pin-Map und Syntax bleiben gleich, der Unterschied liegt nur in den Pin-Nummern.

ESP32 Interne LED Blinken
Die eingebaute blaue LED auf dem ESP32 DevKit V1 zum Blinken bringen. Keine externen Komponenten erforderlich! Das erste Projekt, das Sie ausprobieren sollten, wenn Sie einen ESP32 kaufen. GPIO 2 ist mit der internen LED verbunden.

ESP32-WLAN-STA-Verbindung (mit LCD-Display)
In diesem Projekt verbinden wir den ESP32 im Station-Modus (STA) sicher und fehlertolerant mit dem heimischen WLAN. Wir lagern SSID und Passwort in eine separate `secrets.h`-Datei aus, um Leaks zu Git zu verhindern, richten einen Auto-Reconnect-Mechanismus ein und zeigen RSSI-Signalpegel und IP-Adresse auf einem I2C-LCD-Display an. Die interne LED dient als Statusanzeige. Ein Verbindungsmanager auf Produktionsniveau.

ESP32 Async-Webserver (mit IP-Anzeige auf dem LCD)
In diesem Projekt verwandeln wir den ESP32 in einen **asynchronen Webserver**, den Sie über Ihr Smartphone oder Ihren Computer im selben WLAN-Netzwerk steuern können. Dank der ESPAsyncWebServer-Bibliothek kann der Server mehrere Anfragen gleichzeitig bearbeiten (im Gegensatz zum klassischen `WebServer.h`, der bei einer einzigen Anfrage blockiert). Sie können über den Browser die IP-Adresse des ESP32 öffnen und durch Drücken der ON/OFF-Schaltflächen (Routen `/on` und `/off`) die an GPIO 5 anges

ESP32-WebSocket-Zähler (2 Tasten + LCD + Web-Echtzeit)
In diesem Projekt ändern zwei am ESP32 angeschlossene Taster (GPIO 5 zählt hoch, GPIO 4 zählt herunter) einen Zähler. Der Wert wird sofort auf einem 16x2-I2C-LCD und über die WebSocket-Unterstützung von ESPAsyncWebServer in allen verbundenen Browsern aktualisiert, ohne die Seite neu zu laden. Statt HTTP-Polling wird eine einzige dauerhafte Verbindung genutzt; der ESP32 sendet den neuen Wert mit ws.textAll() an alle.

ESP32 mDNS: Zugriff auf das Gerät über „bluegrays-esp.local“ (mit LCD-Display)
In diesem Projekt fügen wir dem ESP32 einen mDNS-Dienst (Multicast DNS) hinzu, um den Zugriff nicht über eine IP-Adresse, sondern über einen lesbaren Hostnamen wie `bluegrays-esp.local` zu ermöglichen. Selbst wenn sich die vom DHCP zugewiesene IP-Adresse ändert, können Sie das Gerät immer unter demselben Namen erreichen. Indem wir zusätzlich einen kleinen Webserver darauf betreiben, senden wir über den Browser unter der Adresse `http://bluegrays-esp.local/` Befehle zur LED-Steuerung. Auf dem I2C

ESP32: Echtzeit aus dem Internet per NTP
Der ESP32 verbindet sich mit dem WLAN und ruft die Echtzeit mit Millisekunden-Genauigkeit von NTP-Servern (Network Time Protocol) ab. Dank `configTzTime()` wird die türkische Zeitzone (TRT, UTC+3) automatisch angewendet, und der DST-Wechsel wird per POSIX-TZ-String verwaltet. Die Uhrzeit wird auf dem Serial Monitor und einem optionalen I2C-LCD ausgegeben. Beim Start einmal synchronisiert, danach zählt der interne RTC weiter.

ESP32-OTA-Update – Drahtlose Firmware-Installation (mit LCD-Display)
In diesem Projekt lernst du, wie du auf dem ESP32 ohne USB-Kabel über WLAN neue Firmware installieren kannst. Mit der `ArduinoOTA`-Bibliothek wird der ESP32 im Netzwerk sichtbar und wird im Reiter „Network port“ der Arduino-IDE automatisch als `bluegrays-ota` aufgelistet. Die erste Installation erfolgt über USB, alle nachfolgenden Updates erfolgen drahtlos – eine äußerst wichtige Funktion für Feldgeräte. Auf dem I2C-LCD-Display werden der WLAN-Status, die IP-Adresse, der Hostname, der Fortschrit
Weitere Artikel
Lerne die Pinbelegung des günstigen und beliebten NodeMCU ESP8266 kennen, richte ihn in der Arduino IDE ein, verbinde ihn mit dem WLAN und baue Schritt für Schritt einen Webserver, der eine LED per Handy schaltet; dazu die Unterschiede zum ESP32.

