Wemos D1 Mini Einsteiger-Tutorial: Vom ersten Sketch zum ESP8266 WLAN-Webserver

Kaum größer als eine Briefmarke, WLAN an Bord und für kleines Geld zu haben: Der Wemos D1 Mini mit ESP8266-Chip ist seit Jahren das Lieblingsboard für Smart-Home-Bastler – und der vielleicht einfachste Einstieg in vernetzte Mikrocontroller-Projekte überhaupt. In diesem Tutorial richtest du die Arduino IDE für den D1 Mini ein, verstehst die etwas eigenwillige Pin-Belegung, liest einen DHT22-Sensor aus und baust am Ende einen eigenen WLAN-Webserver, über den du Temperatur abliest und ein Relais vom Handy aus schaltest.

Warum der D1 Mini der perfekte Einstieg ins IoT ist

Ein klassischer Arduino UNO ist toll zum Lernen – aber sobald dein Projekt ins Netzwerk soll, brauchst du Zusatzhardware. Der ESP8266 auf dem D1 Mini bringt WLAN direkt mit: Er verbindet sich mit deinem Heimnetz, kann Webseiten ausliefern, Daten an Server schicken oder per MQTT mit deinem Smart Home sprechen. Dazu kommt: Der Chip läuft mit 80 MHz (statt 16 MHz beim UNO), hat 4 MB Flash und wird bequem per USB-C programmiert – in derselben Arduino IDE, die du schon kennst.

Der D1 Mini ist dabei bewusst minimalistisch: 11 nutzbare GPIO-Pins, ein Analogeingang, kompaktes Format für den Dauereinsatz in kleinen Gehäusen. Für Sensorknoten, WLAN-Schalter, Wetterstationen und ESPHome-Projekte ist genau das ideal.

ℹ️ 3,3V-Logik beachten: Anders als der UNO arbeitet der ESP8266 intern mit 3,3V. Die 5V vom USB-Anschluss stehen am 5V-Pin zur Verfügung (z. B. für Sensoren), aber die GPIO-Pins vertragen offiziell nur 3,3V. Viele Module wie der DHT22 funktionieren problemlos direkt mit 3,3V.

Was du brauchst

1x Wemos D1 Mini ESP8266 mit USB-C – Zum Produkt
Alternativ als Sparpaket: 3x WEMOS D1 Mini V4.0.0 – Zum Produkt
1x AM2302 (DHT22) Temperatur- und Feuchtigkeitssensor – Zum Produkt
1x KY-019 Relais-Modul 5V – Zum Produkt
1x Solderless Breadboard 400 Kontakte – Zum Produkt

Arduino IDE für den ESP8266 einrichten

  1. 1Öffne in der Arduino IDE Datei → Einstellungen und trage bei „Zusätzliche Boardverwalter-URLs“ ein: http://arduino.esp8266.com/stable/package_esp8266com_index.json
  2. 2Öffne den Boardverwalter, suche nach „esp8266“ und installiere das Paket esp8266 by ESP8266 Community.
  3. 3Wähle unter Werkzeuge → Board den Eintrag LOLIN(WEMOS) D1 R2 & mini.
  4. 4Schließe das Board per USB-C an und wähle den neuen COM-Port aus. Wird kein Port angezeigt, installiere den CH340-USB-Treiber (siehe Troubleshooting).

Die Pin-Belegung verstehen: D-Nummern vs. GPIO

Die größte Stolperfalle beim D1 Mini: Die aufgedruckten Pin-Namen (D0 bis D8) entsprechen nicht den GPIO-Nummern des ESP8266. Im Code kannst du zum Glück einfach die D-Konstanten verwenden – digitalWrite(D4, HIGH) funktioniert direkt. Ein paar Pins haben außerdem Sonderfunktionen beim Booten:

Aufdruck GPIO Besonderheit
D0 GPIO16 Kein Interrupt/PWM, nötig für Deep-Sleep-Wakeup (Brücke zu RST)
D1 / D2 GPIO5 / GPIO4 Beste Allrounder-Pins, Standard für I2C (SCL/SDA)
D3 GPIO0 Boot-Pin: muss beim Start HIGH sein
D4 GPIO2 Boot-Pin, interne LED (invertiert: LOW = an)
D5–D7 GPIO14/12/13 SPI-Pins, sonst frei verwendbar
D8 GPIO15 Boot-Pin: muss beim Start LOW sein
A0 ADC0 Einziger Analogeingang, max. 3,2V am D1 Mini

Merkregel: Sensoren und Aktoren zuerst an D1, D2, D5, D6, D7 anschließen – diese Pins haben keine Boot-Fallen.

Code 1: Blink mit der internen LED

Der Klassiker zum Testen der Toolchain. Beachte: Die interne LED des D1 Mini ist invertiert – LOW schaltet sie ein.

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // interne LED an D4 (GPIO2)
}

void loop() {
  digitalWrite(LED_BUILTIN, LOW);  // LED AN (invertiert!)
  delay(500);
  digitalWrite(LED_BUILTIN, HIGH); // LED AUS
  delay(500);
}

Code 2: Mit dem WLAN verbinden und DHT22 auslesen

Verkabelung: DHT22 VCC an 3V3, GND an G, Datenpin an D2. Installiere im Bibliotheksverwalter die DHT sensor library von Adafruit (inkl. Adafruit Unified Sensor).

#include <ESP8266WiFi.h>
#include <DHT.h>

#define DHT_PIN D2
#define DHT_TYP DHT22

const char* WLAN_NAME     = "DEIN_WLAN_NAME";
const char* WLAN_PASSWORT = "DEIN_WLAN_PASSWORT";

DHT dht(DHT_PIN, DHT_TYP);

void setup() {
  Serial.begin(115200);
  dht.begin();

  WiFi.mode(WIFI_STA);
  WiFi.begin(WLAN_NAME, WLAN_PASSWORT);
  Serial.print("Verbinde mit WLAN");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Verbunden! IP-Adresse: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  float temperatur = dht.readTemperature();
  float feuchte    = dht.readHumidity();

  if (isnan(temperatur) || isnan(feuchte)) {
    Serial.println("Fehler beim Lesen des DHT22!");
  } else {
    Serial.print("Temperatur: ");
    Serial.print(temperatur);
    Serial.print(" °C  |  Luftfeuchte: ");
    Serial.print(feuchte);
    Serial.println(" %");
  }
  delay(3000);
}

Im seriellen Monitor (115200 Baud) siehst du nach dem Verbindungsaufbau die IP-Adresse deines Boards – die brauchst du gleich für den Webserver.

Code 3: WLAN-Webserver mit Sensoranzeige und Relais-Steuerung

Jetzt kombinieren wir alles: Der D1 Mini liefert eine kleine Webseite aus, die Temperatur und Luftfeuchte anzeigt und zwei Buttons zum Schalten des Relais bietet. Relais-Verkabelung: VCC an 5V, GND an G, IN an D1.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>

#define DHT_PIN    D2
#define DHT_TYP    DHT22
#define RELAIS_PIN D1

const char* WLAN_NAME     = "DEIN_WLAN_NAME";
const char* WLAN_PASSWORT = "DEIN_WLAN_PASSWORT";

DHT dht(DHT_PIN, DHT_TYP);
ESP8266WebServer server(80);
bool relaisAn = false;

String baueSeite() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  String html = "<!DOCTYPE html><html><head>";
  html += "<meta charset='utf-8'>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  html += "<meta http-equiv='refresh' content='10'>";
  html += "<title>D1 Mini Dashboard</title></head><body>";
  html += "<h1>D1 Mini Dashboard</h1>";
  html += "<p>Temperatur: " + String(t, 1) + " &deg;C</p>";
  html += "<p>Luftfeuchte: " + String(h, 1) + " %</p>";
  html += "<p>Relais ist: " + String(relaisAn ? "AN" : "AUS") + "</p>";
  html += "<p><a href='/an'>Relais AN</a> | <a href='/aus'>Relais AUS</a></p>";
  html += "</body></html>";
  return html;
}

void setup() {
  Serial.begin(115200);
  dht.begin();
  pinMode(RELAIS_PIN, OUTPUT);
  digitalWrite(RELAIS_PIN, LOW);

  WiFi.mode(WIFI_STA);
  WiFi.begin(WLAN_NAME, WLAN_PASSWORT);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Webserver erreichbar unter: http://");
  Serial.println(WiFi.localIP());

  server.on("/", []() { server.send(200, "text/html", baueSeite()); });
  server.on("/an", []() {
    relaisAn = true;
    digitalWrite(RELAIS_PIN, HIGH);
    server.sendHeader("Location", "/");
    server.send(303);
  });
  server.on("/aus", []() {
    relaisAn = false;
    digitalWrite(RELAIS_PIN, LOW);
    server.sendHeader("Location", "/");
    server.send(303);
  });
  server.begin();
}

void loop() {
  server.handleClient();
}

Rufe die IP-Adresse aus dem seriellen Monitor im Browser auf deinem Handy oder PC auf (gleiches WLAN vorausgesetzt) – und du steuerst dein erstes IoT-Gerät. Die Seite aktualisiert die Messwerte alle 10 Sekunden automatisch.

⚠️ Sicherheitshinweis Relais: Schalte mit dem KY-019 zum Lernen nur Kleinspannung (z. B. eine 12V-LED-Leiste). Netzspannung (230V) gehört ausschließlich in die Hände von Fachkräften – Lebensgefahr!

Code 4: Strom sparen mit Deep Sleep

Für Batterie-Sensorknoten ist der Deep-Sleep-Modus Gold wert: Der ESP8266 wacht in festen Intervallen auf, misst, sendet und schläft weiter. Wichtig: Verbinde dafür D0 mit RST – ohne diese Brücke kann sich der Chip nicht selbst aufwecken. Zum Flashen die Brücke wieder trennen.

#include <ESP8266WiFi.h>

void setup() {
  Serial.begin(115200);
  delay(100);

  Serial.println();
  Serial.println("Aufgewacht! Hier wuerde jetzt gemessen und gesendet.");

  // Hier: Sensor lesen, WLAN verbinden, Daten uebertragen ...

  Serial.println("Schlafe fuer 60 Sekunden...");
  ESP.deepSleep(60e6); // Mikrosekunden: 60e6 = 60 s
}

void loop() {
  // wird nie erreicht
}

Praxistipps

📡 WLAN-Empfang prüfen: Mit WiFi.RSSI() liest du die Signalstärke in dBm aus. Werte besser als -70 dBm sind solide; darunter helfen ein anderer Standort oder eine kürzere Distanz zum Router.

🏠 Perfekt für ESPHome & Home Assistant: Der D1 Mini ist eines der beliebtesten ESPHome-Boards – statt selbst Code zu schreiben, beschreibst du Sensoren und Schalter in einer YAML-Datei und bindest sie direkt in Home Assistant ein.

🔌 Saubere Stromversorgung: WLAN-Sendespitzen ziehen kurzzeitig bis zu 300 mA. Bei mysteriösen Resets im Akku- oder Netzteilbetrieb hilft ein Elko (z. B. 470 µF) zwischen 5V und GND direkt am Board.

Troubleshooting

⚠️ Kein COM-Port sichtbar: Der D1 Mini nutzt den CH340-USB-Chip – unter Windows und älteren macOS-Versionen muss der CH340/CH341-Treiber einmalig installiert werden. Auch ein reines Ladekabel ohne Datenleitungen ist ein häufiger Übeltäter.

⚠️ Board bootet nicht oder Upload schlägt fehl: Prüfe, ob etwas an den Boot-Pins D3, D4 oder D8 hängt, das den Pegel beim Start verzieht. Zum Flashen im Zweifel alle externen Module abziehen.

⚠️ Ständige Watchdog-Resets (wdt reset): Der ESP8266 muss regelmäßig seine WLAN-Routinen bedienen. Vermeide lange blockierende Schleifen ohne delay() oder yield() – schon ein delay(1) pro Schleifendurchlauf beruhigt den Watchdog.

⚠️ DHT22 liefert nan: Zwischen zwei Messungen müssen mindestens 2 Sekunden liegen. Prüfe außerdem, ob der Datenpin wirklich an D2 hängt und der Sensor mit 3,3V versorgt wird.

📡 Starte dein erstes WLAN-Projekt

Alle Bauteile für dieses Tutorial findest du bei MAKEROO.

Fazit

Mit dem Wemos D1 Mini bist du in unter einer Stunde vom ersten Blink-Sketch beim eigenen WLAN-Webserver – inklusive echter Sensordaten und Relais-Steuerung vom Handy. Wenn du die Eigenheiten des Boards kennst (D-Nummern statt GPIOs, Boot-Pins, 3,3V-Logik), ist der ESP8266 ein extrem zuverlässiger Arbeiter für Smart-Home-Knoten aller Art. Der nächste logische Schritt: mehrere D1 Minis als Sensornetz, die ihre Daten per MQTT an eine Zentrale melden.

Zurück zum Blog