ESP32 verbindet sich nicht mit WLAN: WiFi.status() und Lösungen
ESP32 verbindet sich nicht mit dem WLAN? WiFi.status() und Reason-Codes, 2,4 GHz, Passwortfehler, Brownout, setTxPower, Reconnect, statische IP und eduroam.
Dein ESP32 verbindet sich nicht mit dem WLAN und im seriellen Monitor erscheinen nur endlose Punkte? Ein defektes Board ist fast nie der Grund. Die üblichen Verdächtigen sind: ein 5-GHz-Netz, ein kleiner Tippfehler im Netzwerknamen oder Passwort, ein schwaches Netzteil, dessen Spannung beim Einschalten des WLANs einbricht, die Sicherheits- und Kanaleinstellungen des Routers oder ein Unternehmensnetz in Schule oder Firma. Die gute Nachricht: Der ESP32 verrät dir bereits, was schiefgelaufen ist. Du musst nur den Wert von WiFi.status() und den Reason-Code (Grund) lesen können, den er beim Verbindungsabbruch meldet.
In dieser Anleitung siehst du zuerst, in welchen Schritten sich der ESP32 mit einem Netz verbindet und welchen Statuscode er bei jedem Schritt liefert. Danach folgen ein Diagnose-Sketch, der Status- und Reason-Codes ausgibt, ein Scanner, der die Netze in deiner Umgebung auflistet, die 2,4-GHz-Pflicht und Dualband-Router, Brownouts und die setTxPower-Lösung, ein Reconnect-Sketch, der Verbindungsabbrüche selbst behebt, statische IP, eine WPA2-Enterprise-Verbindung für Schulnetze und der Handy-Hotspot-Test, der dir in wenigen Minuten zeigt, ob das Problem am Router oder am Board liegt. Die Sketches laufen mit den Versionen 2.x und 3.x des ESP32-Cores für die Arduino IDE; am Ende gibt es zusätzlich ein Testskript für den Raspberry Pi Pico W und MicroPython.

Wie verbindet sich der ESP32 mit einem WLAN?
Wenn du WiFi.begin() aufrufst, arbeitet der ESP32 im Hintergrund vier Schritte ab. Zuerst durchsucht er die Kanäle nach einem Netz mit dem angegebenen Namen (SSID). Findet er es, authentifiziert er sich beim Router und meldet sich an (Association). Bei WPA2-Netzen folgt der 4-Wege-Handshake, bei dem sich zeigt, ob das Passwort stimmt. Zum Schluss fordert er beim DHCP-Server des Routers eine IP-Adresse an. WiFi.status() liefert erst dann WL_CONNECTED, wenn auch dieser letzte Schritt erledigt ist. Wenn du weißt, bei welchem Schritt er hängt, kennst du meist auch die Ursache:
| Schritt | Was passiert? | Status und Reason, wenn es hakt |
|---|---|---|
| 1. Scan | Der ESP32 sucht den Netzwerknamen auf den 2,4-GHz-Kanälen | WL_NO_SSID_AVAIL (1), Reason 201 |
| 2. Authentifizierung und Anmeldung | Der Router nimmt den ESP32 an oder lehnt ihn ab | WL_CONNECT_FAILED (4) oder WL_DISCONNECTED (6), Reason 202 oder 203 |
| 3. 4-Wege-Handshake | Aus dem Passwort abgeleitete Schlüssel werden verglichen | WL_DISCONNECTED (6) mit Reason 15; bei Reason 204 WL_CONNECTION_LOST (5) |
| 4. DHCP | Der Router vergibt eine IP-Adresse an den ESP32 | Bleibt bei WL_IDLE_STATUS (0) hängen |
| Nach dem Verbinden | Der Router sendet regelmäßig Beacon-Pakete | Bleiben sie aus: WL_CONNECTION_LOST (5), Reason 200 |
Was die WiFi.status()-Codes bedeuten
WiFi.status() gibt einen Wert vom Typ wl_status_t zurück. Gibst du ihn direkt im seriellen Monitor aus, siehst du nur eine Zahl. Die Tabelle unten zeigt, was die Zahlen im ESP32-Arduino-Core bedeuten. Achtung: Die Werte 0 bis 6 tragen zwar dieselben Namen wie in der alten Arduino-WiFi-Bibliothek, tauchen beim ESP32 aber in etwas anderen Situationen auf. Direkt nach WiFi.begin() ist der Status zum Beispiel 6 und nicht 0; er wechselt auf 0, sobald das Board am Router angemeldet ist und auf eine IP wartet, und auf 3, wenn es eine bekommen hat.
| Code | Konstante | Bedeutung | Zuerst prüfen |
|---|---|---|---|
| 0 | WL_IDLE_STATUS | Am Router angemeldet, aber noch keine IP-Adresse | Ein paar Sekunden sind normal; dauert es länger, DHCP |
| 1 | WL_NO_SSID_AVAIL | Kein Netz mit diesem Namen gefunden | Netzwerkname, 2,4-GHz-Band, Entfernung |
| 2 | WL_SCAN_COMPLETED | Ein Netzwerkscan ist abgeschlossen | Hat nichts mit der Verbindung zu tun |
| 3 | WL_CONNECTED | Verbunden und IP-Adresse erhalten | Alles in Ordnung |
| 4 | WL_CONNECT_FAILED | Der Router hat die Verbindung abgelehnt | Passwort, Sicherheitsmodus, MAC-Filter |
| 5 | WL_CONNECTION_LOST | Eine bestehende Verbindung ist abgerissen | Signalstärke, Stromversorgung, Antenne |
| 6 | WL_DISCONNECTED | Nicht verbunden; Versuch läuft noch oder ist gescheitert | Der Reason-Code |
| 254 | WL_STOPPED | Die WLAN-Station ist gestoppt (Core 3.x) | WiFi.mode(WIFI_STA) aufrufen |
| 255 | WL_NO_SHIELD | WLAN wurde noch nicht gestartet (Core 2.x) | WiFi.mode() oder WiFi.begin() aufrufen |
Diagnose-Sketch: Status und Reason-Code im seriellen Monitor ausgeben
Der folgende Sketch versucht 20 Sekunden lang, sich zu verbinden, gibt den Statuscode bei jeder Änderung mit Namen aus und zeigt bei jedem Verbindungsabbruch den Reason-Code von ESP-IDF. Klappt die Verbindung, gibt er IP-Adresse, Gateway, Signalstärke (RSSI) und Kanal aus; in jedem Fall zeigt er außerdem die MAC-Adresse des Boards. Ersetze Netzwerkname und Passwort durch deine eigenen, lade den Sketch hoch und öffne den seriellen Monitor mit 115200 Baud. Lässt sich der Sketch gar nicht erst hochladen, lies zuerst die Anleitung zu Upload-Fehlern.
1#include <WiFi.h>
2
3const char* WIFI_ADI = "EvAgi_2G"; // Wi-Fi adı, büyük-küçük harfe duyarlı / network name, case-sensitive
4const char* WIFI_SIFRE = "sifre1234"; // Wi-Fi şifresi / Wi-Fi password
5
6// Durum kodunu adına çevir / turn the status code into its name
7const char* durumAdi(wl_status_t durum) {
8 switch (durum) {
9 case WL_IDLE_STATUS: return "WL_IDLE_STATUS";
10 case WL_NO_SSID_AVAIL: return "WL_NO_SSID_AVAIL";
11 case WL_SCAN_COMPLETED: return "WL_SCAN_COMPLETED";
12 case WL_CONNECTED: return "WL_CONNECTED";
13 case WL_CONNECT_FAILED: return "WL_CONNECT_FAILED";
14 case WL_CONNECTION_LOST: return "WL_CONNECTION_LOST";
15 case WL_DISCONNECTED: return "WL_DISCONNECTED";
16 default: return "WL_NO_SHIELD / WL_STOPPED";
17 }
18}
19
20// Bağlantı her koptuğunda sebep kodunu yaz / print the reason code on every disconnect
21void koptugunda(arduino_event_id_t olay, arduino_event_info_t bilgi) {
22 Serial.printf("Koptu / Disconnected, reason: %d\n", (int)bilgi.wifi_sta_disconnected.reason);
23}
24
25void setup() {
26 Serial.begin(115200);
27 delay(1000);
28 WiFi.onEvent(koptugunda, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
29 WiFi.mode(WIFI_STA); // istasyon modu / station mode
30 WiFi.begin(WIFI_ADI, WIFI_SIFRE); // begin() yalnızca bir kez / call begin() only once
31
32 wl_status_t onceki = WL_NO_SHIELD;
33 unsigned long baslangic = millis();
34 while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 20000) {
35 wl_status_t simdi = WiFi.status();
36 if (simdi != onceki) { // yalnızca değişince yaz / print only when it changes
37 Serial.printf("Durum / Status: %d %s\n", (int)simdi, durumAdi(simdi));
38 onceki = simdi;
39 }
40 delay(500);
41 }
42
43 if (WiFi.status() == WL_CONNECTED) {
44 Serial.print("Bagli / Connected, IP: ");
45 Serial.println(WiFi.localIP());
46 Serial.print("Ag gecidi / Gateway: ");
47 Serial.println(WiFi.gatewayIP());
48 Serial.printf("RSSI: %d dBm, kanal / channel: %d\n", (int)WiFi.RSSI(), (int)WiFi.channel());
49 } else {
50 wl_status_t son = WiFi.status();
51 Serial.printf("Baglanamadi / Failed, son durum / last status: %d %s\n", (int)son, durumAdi(son));
52 }
53 Serial.print("MAC: ");
54 Serial.println(WiFi.macAddress()); // MAC filtresi için / for MAC filtering
55}
56
57void loop() {}Es ist normal, dass zuerst Durum / Status: 6 WL_DISCONNECTED erscheint. Klappt die Verbindung, wechselt der Status kurz auf 0 und dann auf 3. Bleibt er bei 1, wurde das Netz gar nicht gefunden; kommen immer wieder Zeilen wie Koptu / Disconnected, reason: 15, ist sehr wahrscheinlich das Passwort falsch. Für noch mehr Details stellst du in der Arduino IDE Werkzeuge > Core Debug Level auf Warn oder Info: Der Core schreibt dann bei jedem Abbruch auch den Namen des Grundes, zum Beispiel Reason: 201 - NO_AP_FOUND. Diese Reason-Codes begegnen dir am häufigsten:
| Reason | Name | Was bedeutet das? | Lösung |
|---|---|---|---|
| 2 | AUTH_EXPIRE | Die Authentifizierung ist abgelaufen | Schwaches Signal oder ausgelasteter Router; näher ran, Router neu starten |
| 5 | ASSOC_TOOMANY | Die Geräteobergrenze des Routers ist erreicht | Ungenutzte Geräte entfernen oder das Limit erhöhen |
| 8 | ASSOC_LEAVE | Der ESP32 hat das Netz selbst verlassen | Dein Code ruft WiFi.disconnect() auf; das ist normal |
| 15 | 4WAY_HANDSHAKE_TIMEOUT | Der Passwort-Handshake wurde nicht abgeschlossen | Meist falsches Passwort; Passwort und Sicherheitsmodus prüfen |
| 200 | BEACON_TIMEOUT | Vom Router kommen keine Beacons mehr | Schwaches Signal oder Spannungseinbruch; Antenne, Netzteil, setTxPower |
| 201 | NO_AP_FOUND | Kein Netz mit diesem Namen gefunden | SSID-Schreibweise, 5-GHz-Netz, Entfernung, verstecktes Netz, Kanal 12 und 13 |
| 202 | AUTH_FAIL | Die Authentifizierung wurde abgelehnt | Passwort oder ein inkompatibler Sicherheitsmodus wie Enterprise |
| 203 | ASSOC_FAIL | Der Router hat die Anmeldung abgelehnt | MAC-Filter oder ein Funkmodus wie nur 802.11ax |
| 204 | HANDSHAKE_TIMEOUT | Zeitüberschreitung beim Handshake | Falsches Passwort oder sehr schwaches Signal |
| 210, 211 | NO_AP_FOUND_W_COMPATIBLE_SECURITY, NO_AP_FOUND_IN_AUTHMODE_THRESHOLD | Netz gefunden, aber Sicherheitsmodus inkompatibel oder unter der erlaubten Mindeststufe (Core 3.x) | Router auf WPA2-Personal (AES) stellen oder die Mindeststufe mit WiFi.setMinSecurity() senken |
2,4-GHz-Pflicht: Der ESP32 sieht keine 5-GHz-Netze
Der klassische ESP32, ESP32-S2, ESP32-S3, ESP32-C3 und ESP32-C6 funken nur im 2,4-GHz-Band. Ein Netz, das auf 5 GHz sendet, sehen sie beim Scan nie, und das Ergebnis ist immer WL_NO_SSID_AVAIL. Die meisten Router zu Hause senden auf beiden Bändern. Verwendet dein Router für jedes Band einen eigenen Namen (zum Beispiel MeinWLAN und MeinWLAN_5G), gib dem ESP32 immer den Namen des 2,4-GHz-Netzes. Tragen beide Bänder denselben Namen (Smart Connect, Band Steering oder Mesh-Systeme), verbindet sich der ESP32 meist problemlos mit der 2,4-GHz-Seite, weil er das 5-GHz-Signal ohnehin nicht sieht. Probleme entstehen, wenn das 2,4-GHz-Band abgeschaltet ist oder der Router Geräte auf 5 GHz drängen will: Der ESP32 verbindet sich, fliegt ein paar Sekunden später raus, und das Spiel wiederholt sich. Trenne in diesem Fall die Bänder in der Router-Oberfläche oder richte ein Gastnetz ein, das nur auf 2,4 GHz sendet.
| Board | WLAN-Band | Hinweis |
|---|---|---|
| ESP32 (WROOM-32, DevKit), ESP32-S2, ESP32-S3 | Nur 2,4 GHz | 802.11 b/g/n |
| ESP32-C3 | Nur 2,4 GHz | Günstige Super-Mini-Boards brauchen eventuell weniger Sendeleistung |
| ESP32-C6 | Nur 2,4 GHz | Unterstützt Wi-Fi 6 (802.11ax), aber trotzdem nur auf 2,4 GHz |
| ESP32-C5 | 2,4 GHz und 5 GHz | Der erste Dualband-Chip von Espressif |
| ESP8266 (NodeMCU, Wemos D1 mini, ESP-01) | Nur 2,4 GHz | 802.11 b/g/n |
| Raspberry Pi Pico W und Pico 2 W | Nur 2,4 GHz | Funkchip CYW43439 |
| Arduino Uno R4 WiFi | Nur 2,4 GHz | Das WLAN übernimmt der ESP32-S3 auf dem Board |
Stimmt das Band und das Netz wird trotzdem nicht gefunden, prüfe die Kanal- und Modus-Einstellungen des Routers. In der Standard-Ländereinstellung des ESP32 werden die Kanäle 1 bis 11 aktiv gescannt, die Kanäle 12 und 13 dagegen nur passiv abgehört. Sichtbare Netze auf diesen Kanälen werden meist trotzdem gefunden, aber ein verstecktes Netz (SSID-Broadcast aus) auf Kanal 12 oder 13 findet der ESP32 nicht. Am sichersten stellst du den Kanal von automatisch auf fest 1, 6 oder 11. Mit einem Router, der nur 802.11ax (Wi-Fi 6) erlaubt, können sich der klassische ESP32, S2, S3 und C3 nicht verbinden; stelle den Modus auf b/g/n oder den Mischbetrieb b/g/n/ax. Bei der Sicherheit sind WPA2-Personal (AES) oder der WPA2/WPA3-Mischmodus am verträglichsten. Standardmäßig lehnt der Arduino-Core alles unterhalb von WPA2 ab (WEP und altes WPA-TKIP); musst du wirklich in ein sehr altes Netz, schreibe vor begin() WiFi.setMinSecurity(WIFI_AUTH_WEP). Bevor du Einstellungen änderst, schau mit diesem Scanner nach, was der ESP32 tatsächlich sieht:
1#include <WiFi.h>
2
3// Güvenlik türünü yazıya çevir / turn the security type into text
4const char* guvenlikAdi(wifi_auth_mode_t tur) {
5 switch (tur) {
6 case WIFI_AUTH_OPEN: return "Acik / Open";
7 case WIFI_AUTH_WEP: return "WEP";
8 case WIFI_AUTH_WPA_PSK: return "WPA";
9 case WIFI_AUTH_WPA2_PSK: return "WPA2";
10 case WIFI_AUTH_WPA_WPA2_PSK: return "WPA/WPA2";
11 case WIFI_AUTH_WPA3_PSK: return "WPA3";
12 case WIFI_AUTH_WPA2_WPA3_PSK: return "WPA2/WPA3";
13 default: return "Diger / Other (Enterprise)";
14 }
15}
16
17void setup() {
18 Serial.begin(115200);
19 WiFi.mode(WIFI_STA);
20 WiFi.disconnect(); // temiz tarama için bağlantıyı kes / disconnect for a clean scan
21 delay(100);
22}
23
24void loop() {
25 Serial.println("Taraniyor / Scanning...");
26 int adet = WiFi.scanNetworks(); // engelleyen tarama, 2-4 sn / blocking scan, 2-4 s
27 if (adet <= 0) {
28 Serial.println("Ag bulunamadi / No networks found");
29 }
30 for (int i = 0; i < adet; i++) {
31 Serial.printf("%2d | %-32s | %4d dBm | kanal/ch %2d | %s\n",
32 i + 1, WiFi.SSID(i).c_str(), (int)WiFi.RSSI(i),
33 (int)WiFi.channel(i), guvenlikAdi(WiFi.encryptionType(i)));
34 }
35 WiFi.scanDelete(); // sonuçları bellekten sil / free the results
36 Serial.println();
37 delay(10000); // 10 sn sonra yeniden tara / scan again in 10 s
38}Taucht der Name deines Netzes gar nicht in der Liste auf, liegt das Problem vor deinem Code: Das Netz ist ein 5-GHz-Netz, versteckt, oder der ESP32 ist zu weit entfernt. Steht der Name in der Liste, sieh dir den RSSI-Wert an: -30 bis -60 dBm ist sehr gut, -60 bis -70 dBm gut; zwischen -70 und -80 dBm verbindet er sich, kann aber abreißen, und unter -80 dBm solltest du keine stabile Verbindung erwarten. Siehst du denselben Namen mehrmals, hat dein Router oder Mesh-System mehrere Zugangspunkte. Beim standardmäßigen Schnellscan verbindet sich der ESP32 mit dem ersten Treffer; soll er das stärkste Signal wählen, füge vor begin() WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN) ein. Wenn du den Namen genau so aus dem Scan kopierst und in den Sketch einfügst, sind Tippfehler endgültig vom Tisch.
Fehler bei Netzwerkname (SSID) und Passwort
Meldet der Diagnose-Sketch Reason 201 oder 15, steckt das Problem meist in zwei Zeilen deines Codes. Eine SSID darf bis zu 32 Byte lang sein, ein WPA2-Passwort 8 bis 63 Zeichen, und beide unterscheiden Groß- und Kleinschreibung. Diese Fehler werden am häufigsten übersehen:
- Groß- und Kleinschreibung: Ein Netz, das im Router als MeinWLAN erscheint, erreichst du nicht mit meinwlan. Für das Passwort gilt dieselbe Regel.
- Unsichtbare Leerzeichen: Ein Leerzeichen am Ende von Netzwerkname oder Passwort oder ein verstecktes Zeichen, das beim Kopieren mitkommt, verhindert die Übereinstimmung.
- Umlaute und Sonderzeichen: Buchstaben wie ä, ö, ü oder ß im Netzwerknamen speichert der Router womöglich in einer anderen Kodierung. Den Namen auf einfache Buchstaben und Ziffern zu ändern ist die sicherste Lösung.
- Typografischer Apostroph: Auf dem iPhone ist der Hotspot-Name der Gerätename, und der enthält oft ein gebogenes ’ statt des geraden ' deiner Tastatur, sodass der Name im Code nicht passt.
- Backslash und Anführungszeichen: Enthält das Passwort \ oder ", schreibe sie im C++-String als \\ und \"; sonst verändert der Compiler das Passwort oder der Sketch lässt sich nicht kompilieren.
- Offenes Netz: Für ein Netz ohne Passwort lässt du den Passwort-Parameter ganz weg; WiFi.begin(name) genügt. Gibst du für ein offenes Netz ein Passwort an, sucht der Core nach WPA2 und findet das Netz nicht.
- Verstecktes Netz: Netze mit abgeschaltetem SSID-Broadcast erreichst du mit dem exakten Namen, aber im Scan tauchen sie nicht auf; hast du Probleme, schalte den Broadcast während des Tests ein.
Stromversorgung und Brownout: Warum startet das Board neu, sobald das WLAN angeht?
Ein ESP32-Modul zieht im Betrieb durchschnittlich etwa 80 mA, doch während der WLAN-Sender arbeitet, steigt der Strom kurzzeitig auf Spitzen von 250–400 mA. Die größten Spitzen treten meist bei der Funkkalibrierung beim Start und beim ersten Verbinden auf. Deshalb empfiehlt Espressif ein Netzteil, das mindestens 500 mA liefern kann. Kommt die Versorgung bei diesen Spitzen nicht mit, bricht die 3,3-V-Schiene kurz ein, der Brownout-Detektor des Chips greift, und das Board startet mit der Meldung Brownout detector was triggered im seriellen Monitor neu. Das Symptom kennt fast jeder: Der Code läuft bis zur WLAN-Zeile, bei WiFi.begin() setzt sich das Board zurück, und daraus wird eine Endlosschleife. Alle Details zu diesem Fehler findest du im Artikel über ESP32-Brownout- und Guru-Meditation-Fehler.

| Stromquelle | Geeignet? | Warum? |
|---|---|---|
| USB-Port hinten am Computer, kurzes und dickes Kabel | Meist ja | Ein USB-2.0-Port liefert 500 mA; ein kurzes Kabel verringert den Spannungsabfall |
| USB an der Gehäusefront, USB-Hub oder langes dünnes Kabel | Kann Probleme machen | Kabel- und Kontaktwiderstand drücken die Spannung bei Stromspitzen |
| 5-V-Handynetzteil mit mindestens 1 A | Ja | Lässt reichlich Reserve für Stromspitzen |
| 3.3V-Pin des Arduino Uno | Nein | Dieser Pin liefert nur etwa 50 mA |
| 3,7-V-Li-Ion-Akku direkt am 5V-Pin des Boards | Nein | Wegen des Spannungsabfalls am AMS1117 sinkt der Ausgang unter 3 V |
| Li-Ion-Akku mit 5-V-Aufwärtswandler oder Low-Dropout-3,3-V-Regler | Ja | Liefert stabile 3,3 V, auch wenn der Akku leerer wird |
| 3,3-V-Ausgang eines MB102-Breadboard-Netzteilmoduls | Meist ja | Mit einem Netzteil mit genug Strom speisen und einen Kondensator ergänzen |
Die setTxPower-Lösung: Sendeleistung reduzieren
Auf manchen Boards sieht der ESP32 trotz gutem Netzteil das Netz, kann sich aber nicht verbinden, oder die Verbindung bricht ständig ab. Vor allem bei günstigen ESP32-C3-Super-Mini-Boards und manchen ESP32-Klonen kommen Antennenschaltung und Spannungsregler bei maximaler Sendeleistung an ihre Grenzen. Standardmäßig sendet der ESP32 mit etwa 19,5–20 dBm. Diese Leistung mit WiFi.setTxPower() zu senken, verkleinert die Stromspitzen und repariert die Verbindung auf diesen Boards oft sofort. Rufe den Befehl direkt nach WiFi.begin() auf; vor dem Start des WLANs, also vor WiFi.mode() oder begin(), wirkt er nicht.
| Konstante | Leistung | Wann verwenden? |
|---|---|---|
| WIFI_POWER_19_5dBm | 19,5 dBm | Nahe am Standard; größte Reichweite |
| WIFI_POWER_15dBm | 15 dBm | Erster Versuch bei leichten Problemen |
| WIFI_POWER_11dBm | 11 dBm | Reicht meist, wenn der Router im selben Raum steht |
| WIFI_POWER_8_5dBm | 8,5 dBm | Der am häufigsten empfohlene Wert für den ESP32-C3 Super Mini |
| WIFI_POWER_5dBm | 5 dBm | Für Tests direkt neben dem Router |
Jede Absenkung um 3 dB halbiert die Sendeleistung, entsprechend sinkt auch die Reichweite. Beginne mit 15 dBm; besteht das Problem weiter, gehe auf 11 und dann auf 8,5 dBm herunter. Behebt die geringere Leistung das Problem, sind meist Netzteil oder Antennendesign die eigentliche Ursache; ergänze deshalb langfristig auch eine bessere Versorgung und einen Kondensator. Die aktuelle Einstellung liest du mit WiFi.getTxPower() aus; der Wert ist in Schritten von 0,25 dBm angegeben, 78 bedeutet also 19,5 dBm.
Sketch für automatisches Wiederverbinden
Der ESP32 verliert die Verbindung, wenn der Router neu startet, der Strom nach einem Ausfall zurückkommt oder das Signal eine Weile schwächelt. Im ESP32-Core ist WiFi.setAutoReconnect(true) standardmäßig aktiv, und nach den meisten Abbrüchen verbindet sich das Board von selbst neu. Bei manchen Gründen wie 202 AUTH_FAIL gibt der Core jedoch nach einem einzigen Versuch auf, und das Board bleibt offline, bis du es zurücksetzt. In einem Projekt, das monatelang laufen soll, solltest du deshalb eine eigene Prüfung einbauen. Der folgende Sketch kommt ohne delay() aus, prüft mit millis() alle 15 Sekunden die Verbindung, verbindet bei Bedarf neu und startet das Board neu, wenn 5 Minuten lang keine Verbindung zustande kommt:
1#include <WiFi.h>
2
3const char* WIFI_ADI = "EvAgi_2G"; // Wi-Fi adı / network name
4const char* WIFI_SIFRE = "sifre1234"; // Wi-Fi şifresi / Wi-Fi password
5
6const unsigned long KONTROL_ARALIGI = 15000; // 15 sn'de bir kontrol / check every 15 s
7const int EN_FAZLA_DENEME = 20; // 20 x 15 sn = 5 dk / 20 x 15 s = 5 min
8unsigned long sonKontrol = 0;
9int basarisizSayac = 0; // üst üste başarısız kontrol / consecutive failed checks
10
11void wifiBaslat() {
12 WiFi.mode(WIFI_STA);
13 WiFi.setAutoReconnect(true); // çekirdeğin kendi yeniden bağlanması / core auto-reconnect
14 WiFi.begin(WIFI_ADI, WIFI_SIFRE);
15 WiFi.setTxPower(WIFI_POWER_15dBm); // gerekirse 8_5dBm'e kadar düşür / lower to 8_5dBm if needed
16 WiFi.setSleep(false); // modem uykusunu kapat / disable modem sleep
17}
18
19void setup() {
20 Serial.begin(115200);
21 wifiBaslat();
22}
23
24void loop() {
25 if (millis() - sonKontrol >= KONTROL_ARALIGI) {
26 sonKontrol = millis();
27 if (WiFi.status() == WL_CONNECTED) {
28 basarisizSayac = 0;
29 Serial.printf("Bagli / Connected, IP: %s, RSSI: %d dBm\n",
30 WiFi.localIP().toString().c_str(), (int)WiFi.RSSI());
31 } else {
32 basarisizSayac++;
33 Serial.printf("Bagli degil / Not connected (%d/%d), yeniden baglaniyor / reconnecting\n",
34 basarisizSayac, EN_FAZLA_DENEME);
35 WiFi.disconnect();
36 WiFi.reconnect();
37 if (basarisizSayac >= EN_FAZLA_DENEME) {
38 Serial.println("Yeniden baslatiliyor / Restarting");
39 delay(100);
40 ESP.restart(); // son çare: kartı yeniden başlat / last resort: restart the board
41 }
42 }
43 }
44
45 // Projenin kodu buraya; uzun delay() kullanma / your project code here; avoid long delay()
46}Die Zeile WiFi.setSleep(false) schaltet den Modem-Sleep ab, bei dem der ESP32 sein Funkmodul im verbundenen Zustand in kurzen Abständen ausschaltet. Das verringert Abbrüche an manchen Routern und Verzögerungen beim Webserver; dafür zieht das Board einige zehn mA mehr. In Akkuprojekten kannst du die Zeile löschen und mit dem Rechner Akkulaufzeit ausrechnen, wie lange der Akku hält. Die setTxPower-Zeile behältst du nur, wenn du die Probleme aus dem vorherigen Abschnitt hast. Vermeide lange delay()-Aufrufe, wenn du deinen Projektcode in loop() einfügst, denn die Verbindungsprüfung läuft nur, solange loop() durchläuft. Willst du die WLAN-Zugangsdaten lieber per Handy eingeben statt sie fest einzuprogrammieren, sieh dir die Bibliothek WiFiManager an.
Statische IP-Adresse am ESP32 einstellen
Normalerweise vergibt der Router dem ESP32 per DHCP eine Adresse, die sich jedes Mal ändern kann. Baust du einen Webserver, den du vom Handy aus immer unter derselben Adresse aufrufst, oder spinnt der DHCP des Routers (der Status bleibt bei 0 hängen), macht eine statische IP das Leben leichter. Beachte drei Regeln: WiFi.config() muss vor WiFi.begin() aufgerufen werden; die gewählte Adresse muss im Netz des Routers, aber außerhalb seines DHCP-Bereichs liegen (vergibt der Router 192.168.1.2–100, nimm zum Beispiel 192.168.1.200; bei einer FRITZ!Box lauten die Adressen meist 192.168.178.x); und das Gateway ist die Adresse des Routers selbst. Um die Adresse deines Routers herauszufinden, lass den Diagnose-Sketch einmal mit DHCP laufen; er gibt auch das Gateway aus.
1#include <WiFi.h>
2
3const char* WIFI_ADI = "EvAgi_2G"; // Wi-Fi adı / network name
4const char* WIFI_SIFRE = "sifre1234"; // Wi-Fi şifresi / Wi-Fi password
5
6IPAddress sabitIP(192, 168, 1, 200); // DHCP havuzunun dışında bir adres / an address outside the DHCP pool
7IPAddress agGecidi(192, 168, 1, 1); // modemin adresi / router address
8IPAddress altAgMaskesi(255, 255, 255, 0); // alt ağ maskesi / subnet mask
9IPAddress dns1(1, 1, 1, 1); // birinci DNS / primary DNS
10IPAddress dns2(8, 8, 8, 8); // ikinci DNS / secondary DNS
11
12void setup() {
13 Serial.begin(115200);
14 WiFi.mode(WIFI_STA);
15 // config() mutlaka begin()'den önce / config() must come before begin()
16 if (!WiFi.config(sabitIP, agGecidi, altAgMaskesi, dns1, dns2)) {
17 Serial.println("Statik IP ayarlanamadi / Static IP config failed");
18 }
19 WiFi.begin(WIFI_ADI, WIFI_SIFRE);
20
21 unsigned long baslangic = millis();
22 while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 15000) {
23 delay(500);
24 Serial.print('.');
25 }
26 Serial.println();
27 Serial.print("IP: ");
28 Serial.println(WiFi.localIP()); // 192.168.1.200 olmalı / should be 192.168.1.200
29}
30
31void loop() {}Schul- und Firmennetze: Verbindung mit WPA2-Enterprise (eduroam)
eduroam an Hochschulen, Firmennetze und manche Schulnetze nutzen WPA2-Enterprise (802.1X), das jedem Nutzer einen eigenen Benutzernamen und ein eigenes Passwort gibt statt eines gemeinsamen Passworts. Ein normales WiFi.begin(name, passwort) scheitert in diesen Netzen immer, und im Scanner erscheint ihr Sicherheitstyp als Diger / Other (Enterprise). Die Versionen 2.x und 3.x des ESP32-Arduino-Cores bieten eine fertige begin()-Variante für PEAP, das verbreitetste Verfahren:
1#include <WiFi.h>
2
3const char* AG_ADI = "eduroam"; // kurum ağının adı / enterprise network name
4const char* EAP_KIMLIK = "[email protected]"; // kimlik, çoğu zaman kullanıcı adıyla aynı / identity, usually same as username
5const char* EAP_KULLANICI = "[email protected]"; // kullanıcı adı / username
6const char* EAP_SIFRE = "kurum_sifren"; // kurum şifresi / enterprise password
7
8void setup() {
9 Serial.begin(115200);
10 WiFi.disconnect(true); // önceki bağlantıyı kapat / close any previous connection
11 WiFi.mode(WIFI_STA);
12 // PEAP (MSCHAPv2) ile bağlan, CA doğrulaması yok / connect with PEAP (MSCHAPv2), no CA check
13 WiFi.begin(AG_ADI, WPA2_AUTH_PEAP, EAP_KIMLIK, EAP_KULLANICI, EAP_SIFRE);
14
15 unsigned long baslangic = millis();
16 while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 30000) {
17 delay(500);
18 Serial.print('.');
19 }
20 Serial.println();
21 if (WiFi.status() == WL_CONNECTED) {
22 Serial.print("Bagli / Connected, IP: ");
23 Serial.println(WiFi.localIP());
24 } else {
25 Serial.printf("Baglanamadi / Failed, durum / status: %d\n", (int)WiFi.status());
26 }
27}
28
29void loop() {}An den meisten Einrichtungen ist die Identität (identity) gleich dem Benutzernamen; manche verlangen eine anonyme äußere Identität wie [email protected]. Dieser Sketch prüft das Serverzertifikat (CA) nicht: Die Verbindung funktioniert, aber ein gefälschter Zugangspunkt könnte dein Passwort abgreifen. Frage deshalb die IT-Abteilung, bevor du dein persönliches Passwort auf einen ESP32 schreibst, und bitte möglichst um ein Konto oder Netz für Geräte. Verlangt deine Einrichtung ein Zertifikat, übergibst du die CA-Datei als sechsten Parameter von begin(). Netze, die im Browser eine Anmeldeseite öffnen (Captive Portals), etwa in Hotels, Wohnheimen und Cafés, sind ein eigenes Problem, denn der ESP32 kann diese Seite nicht ausfüllen. Manche Schulen verlangen außerdem, dass die MAC-Adressen von Geräten vorab registriert werden; schicke der IT die MAC-Adresse, die der Diagnose-Sketch ausgibt. In solchen Netzen ist der Hotspot deines Handys oder ein kleiner mobiler Router die praktischste Lösung.
Handy-Hotspot-Test: Liegt es am Router oder am ESP32?
Am schnellsten grenzt du die Ursache ein, indem du den ESP32 mit einem Netz verbindest, dessen Einstellungen du komplett selbst bestimmst. Der Hotspot deines Handys ist dafür ideal:
- Gib dem Hotspot einen kurzen Namen nur aus einfachen Buchstaben und Ziffern (zum Beispiel esptest) und ein schlichtes Passwort mit mindestens 8 Zeichen (zum Beispiel test12345).
- Stelle unter Android in den Einstellungen des mobilen Hotspots die Band-Option (bei manchen Handys AP-Band oder Geschwindigkeit und Kompatibilität) auf 2,4 GHz und wähle WPA2-Personal als Sicherheitstyp.
- Schalte auf dem iPhone unter Einstellungen > Persönlicher Hotspot die Option Zugriff für andere erlauben ein. Bei neueren Modellen aktivierst du zusätzlich Kompatibilität maximieren; damit wechselt der Hotspot auf 2,4 GHz. Der Hotspot-Name ist der Gerätename; vereinfache ihn unter Einstellungen > Allgemein > Info > Name und lass den Bildschirm Persönlicher Hotspot geöffnet, bis sich der ESP32 verbunden hat.
- Ersetze Netzwerkname und Passwort im Diagnose-Sketch durch die Hotspot-Daten, lege das Handy 1–2 Meter vom ESP32 entfernt hin und lade den Sketch hoch.
- Lies die Status- und Reason-Codes im seriellen Monitor und probiere denselben Sketch danach mit den Daten deines Heimrouters.
So deutest du das Ergebnis: Verbindet sich der ESP32 mit dem Hotspot, aber nicht mit deinem Heimrouter, sind Code, Board und Stromversorgung in Ordnung; das Problem liegt bei Band, Kanal, Sicherheit, MAC-Filter oder Geräteobergrenze des Routers. Klappt es auch mit dem Hotspot nicht, liegt das Problem beim ESP32: Tausche Netzteil und Kabel, senke die Leistung mit setTxPower, sorge dafür, dass kein Metall vor der Antenne ist, und prüfe den Code erneut. Der Hotspot-Test ist außerdem der schnellste Beweis, dass ein Projekt, das sich in der Schule nicht verbindet, eigentlich funktioniert.
WLAN-Test mit dem Raspberry Pi Pico W und MicroPython
Auch der Raspberry Pi Pico W und der Pico 2 W unterstützen nur 2,4 GHz; alle Tipps in diesem Artikel zu Band, Passwort, Stromversorgung und Hotspot gelten auch für diese Boards. In MicroPython liest du die Statuscodes über Konstanten aus dem Modul network. Das folgende Skript läuft unverändert in Thonny auf dem ESP32 und dem Pico W. Auf dem Pico W hört es sofort auf zu warten, wenn das Netz nicht gefunden wird oder das Passwort falsch ist; auf dem ESP32 versucht MicroPython es bei manchen Fehlern weiter, deshalb gibt das Skript dort nach 20 Sekunden den letzten Status aus:
1import network, time
2
3AG_ADI = "EvAgi_2G" # Wi-Fi adı / network name
4SIFRE = "sifre1234" # Wi-Fi şifresi / Wi-Fi password
5
6wlan = network.WLAN(network.STA_IF)
7wlan.active(True)
8if wlan.isconnected():
9 wlan.disconnect() # eski bağlantıyı kapat / close the previous connection
10 time.sleep(1)
11wlan.connect(AG_ADI, SIFRE)
12
13durum = wlan.status()
14for saniye in range(20): # en fazla 20 sn bekle / wait up to 20 s
15 durum = wlan.status()
16 print(saniye, "durum / status:", durum)
17 if durum in (network.STAT_GOT_IP, network.STAT_NO_AP_FOUND, network.STAT_WRONG_PASSWORD):
18 break # sonuç belli, beklemeyi bırak / result is known, stop waiting
19 time.sleep(1)
20
21if durum == network.STAT_GOT_IP:
22 print("Bagli / Connected, IP:", wlan.ifconfig()[0])
23 print("RSSI:", wlan.status("rssi"), "dBm")
24elif durum == network.STAT_NO_AP_FOUND:
25 print("Ag bulunamadi / Network not found (SSID, 2.4 GHz)")
26elif durum == network.STAT_WRONG_PASSWORD:
27 print("Sifre yanlis / Wrong password")
28else:
29 print("Baglanamadi / Failed, durum / status:", durum)Auf dem Pico W sind die Zahlenwerte anders: 3 bedeutet verbunden mit IP, 2 verbunden, aber wartet auf eine IP, -1 allgemeiner Fehler, -2 Netz nicht gefunden und -3 falsches Passwort. Auf dem ESP32 siehst du stattdessen 1001 während des Verbindens, 1010 mit IP und bei Problemen ESP-IDF-Reason-Codes wie 201 und 202. Um Probleme mit Kanal 12 und 13 auf dem Pico W zu vermeiden, setze vor dem Verbinden den Ländercode (rp2.country('DE'), bei neuerer Firmware network.country('DE')); reißt die Verbindung ab und zu ab, kannst du den Energiesparmodus mit wlan.config(pm=0xa11140) abschalten. Wie du mit dem Pico W einen Webserver baust, zeigt der Artikel Pico W WLAN-Webserver; bist du neu bei MicroPython, wirf einen Blick auf die Anleitung MicroPython-Grundlagen.
Häufige Fehler und Lösungen
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Wirre Zeichen im seriellen Monitor | Baudrate passt nicht | Seriellen Monitor auf 115200 Baud stellen |
| Status 1, Reason 201 | Falscher Netzwerkname, 5-GHz-Netz oder zu weit weg | Scanner laufen lassen und den Namen des 2,4-GHz-Netzes exakt kopieren |
| Status 6, immer wieder Reason 15 | Falsches Passwort | Passwort neu eintippen und auf Groß-/Kleinschreibung und Sonderzeichen achten |
| Status 4 oder 6; Reason 202, 210 oder 211 | Inkompatibler Sicherheitsmodus | Router auf WPA2-Personal (AES) oder WPA2/WPA3-Mischmodus stellen |
| Hängt bei Status 0 | Am Router angemeldet, bekommt aber keine IP per DHCP | Router neu starten, DHCP-Bereich vergrößern oder statische IP nutzen |
| Reset bei WiFi.begin() mit Brownout detector was triggered | Das Netzteil schafft die Stromspitzen nicht | Kurzes Kabel, Netzteil mit mindestens 1 A, 470 µF zwischen 3V3 und GND |
| Verbindet sich, bricht nach ein paar Minuten ab (Reason 200) | Schwaches Signal, Modem-Sleep oder Stromproblem | setSleep(false), setTxPower, Reconnect-Sketch, näher an den Router |
| Auf dem Tisch klappt es, im Gehäuse nicht | Metallgehäuse oder Akku vor der Antenne | Antenne an den Gehäuserand nach außen legen, Kunststoffgehäuse verwenden |
| Verbunden, aber die Webseite öffnet sich am Handy nicht | Handy ist in einem anderen Netz oder das Gastnetz isoliert die Geräte | Beide ins selbe Netz bringen, IP im seriellen Monitor ablesen |
| analogRead()-Werte spinnen bei aktivem WLAN | Sensor hängt an einem ADC2-Pin, und ADC2 nutzt das WLAN | Sensor auf die ADC1-Pins GPIO 32–39 umlegen |
| Nur wenige Zentimeter Reichweite bei ESP32-CAM oder Board mit externer Antenne | Antennenwahl steht auf extern, aber keine Antenne angeschlossen | Antenne an die IPEX-Buchse stecken oder den 0-Ω-Antennenwahl-Widerstand auf dem Board prüfen |
Verbunden: Was kannst du jetzt bauen?
- Webserver und Live-Dashboard: Baue einen ESP32-Webserver mit WebSocket, der Sensorwerte in Echtzeit auf dem Handy zeigt.
- Internet-Uhr: Hole die Uhrzeit von einem NTP-Server und zeige sie auf einem Display an.
- Wetteranzeige: Rufe Temperatur und Luftfeuchtigkeit deiner Stadt über eine Wetter-API ab.
- Benachrichtigungen aufs Handy: Schicke eine Nachricht über einen Telegram-Bot, sobald die Tür aufgeht.
- Smart Home: Binde den ESP32 per MQTT in Home Assistant ein.
- Kommunikation ohne Router: Lass zwei ESP32 per ESP-NOW miteinander reden, ohne ein Netz zu betreten.
- Kabelloses Hochladen: Ist das Board erst im Gehäuse verbaut, spielst du neuen Code per OTA-Update über das WLAN auf.
Ein ESP32, der sich nicht mit dem WLAN verbindet, verwirrt zunächst, doch Status- und Reason-Code verraten dir immer, in welchem Schritt das Problem liegt: 1 und 201 heißen, dass das Netz nicht gefunden wurde, 15 und 202 deuten auf Passwort oder Sicherheitsmodus, 0 auf DHCP, und 200 oder plötzliche Resets auf Signal oder Stromversorgung. Bist du neu beim ESP32, findest du die Grundlagen im Artikel Was ist der ESP32?. In der BlueGrays-App kannst du außerdem Projekte wie ESP32-WLAN-Verbindung, Webserver, mDNS, NTP-Uhr, Wetterstation, OTA-Update und Telegram-Alarm mit Schritt-für-Schritt-Schaltplänen und fertigem Code entdecken.
Häufige Fragen
Warum verbindet sich mein ESP32 nicht mit dem WLAN?
Die häufigsten Ursachen sind ein 5-GHz-Netz, ein Tippfehler in Netzwerkname oder Passwort, ein schwaches Netzteil, dessen Spannung beim WLAN-Start einbricht, und die Sicherheitseinstellungen des Routers. Gib den Wert von WiFi.status() und den Reason-Code beim Verbindungsabbruch aus, dann siehst du sofort, was davon zutrifft. Wird das Netz nicht gefunden, siehst du 1 und 201, bei falschem Passwort meist 6 und 15.
Kann sich der ESP32 mit 5-GHz-WLAN verbinden?
Der klassische ESP32, ESP32-S2, S3, C3 und C6 unterstützen nur 2,4 GHz und sehen 5-GHz-Netze beim Scan überhaupt nicht. Das Dualband-Modell ist der ESP32-C5. Sendet dein Router beide Bänder unter getrennten Namen, gib dem ESP32 den Namen des 2,4-GHz-Netzes.
Was bedeutet WiFi.status() 6 beim ESP32?
6 steht für WL_DISCONNECTED: Das Board ist nicht verbunden, und der Verbindungsversuch läuft entweder noch oder ist gescheitert. Beim ESP32 liefert ein falsches Passwort oft diesen Wert statt 4 (WL_CONNECT_FAILED). Die eigentliche Ursache zeigt der Reason-Code im Ereignis ARDUINO_EVENT_WIFI_STA_DISCONNECTED.
Warum verliert mein ESP32 ständig die WLAN-Verbindung?
Die Hauptursachen für ständige Abbrüche sind ein schwaches Signal, ein Netzteil, das die WLAN-Stromspitzen nicht schafft, Metall oder ein Akku vor der Antenne und die Band-Steering-Einstellungen des Routers. Bring das Board näher an den Router, setze einen 100–470-µF-Kondensator zwischen 3V3 und GND und schalte den Modem-Sleep mit WiFi.setSleep(false) ab. Schreibe deinen Code außerdem so, dass er sich nach einem Abbruch selbst wieder verbindet.
Kann sich ein ESP32 mit einem Handy-Hotspot verbinden?
Ja, solange der Hotspot auf 2,4 GHz sendet. Stelle unter Android das Hotspot-Band auf 2,4 GHz, aktiviere auf dem iPhone Kompatibilität maximieren und halte den Hotspot-Namen einfach. Der Hotspot-Test ist der schnellste Weg, um herauszufinden, ob das Problem beim Heimrouter oder beim ESP32 liegt.
Kann sich ein ESP32 mit eduroam oder einem Schulnetz verbinden?
Mit WPA2-Enterprise-Netzen wie eduroam verbindet sich der ESP32 über die Variante WiFi.begin(name, WPA2_AUTH_PEAP, identity, benutzer, passwort) des ESP32-Arduino-Cores. In Netzen, die im Browser eine Anmeldeseite öffnen (Captive Portal), kann der ESP32 diese Seite dagegen nicht ausfüllen. Frag am besten vorher die IT-Abteilung und bitte nach Möglichkeit um ein eigenes Konto für Geräte.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
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 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. `configTzTime()` startet den SNTP-Dienst; bei verfügbarem Netzwerkzugang erfolgt regelmäßig eine erneute Synchronisierung, und zwischen den Sy

ESP32 HTTPClient + Wetter-API (mit LCD-Display)
In diesem Projekt führen wir mit dem ESP32 über das Internet mithilfe von `HTTPClient.h` einen REST-API-Aufruf an die Wetter-API (wttr.in) durch. Mit ArduinoJson v7 analysieren wir die zurückgegebenen JSON-Daten und zeigen Informationen zu Stadt, Temperatur, Luftfeuchtigkeit, Wetter und Wind sowohl auf Türkisch als auch auf Englisch auf einem I2C-LCD-Display an. wttr.in ist kostenlos und erfordert keinen API-Schlüssel – Sie können den aktuellen Wetterbericht einer beliebigen Stadt abrufen, indem

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

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 Bewegungsalarmsystem (PIR + Buzzer + LED + Telegram)
Ein intelligentes Sicherheitsalarmsystem, das Buzzer und LED aktiviert, sobald der PIR-Sensor Bewegung erkennt, und gleichzeitig eine sofortige Benachrichtigung per Telegram an den Besitzer sendet. Ein 30-sekündiger Cooldown begrenzt die Häufigkeit wiederholter Alarme; dieser Mechanismus überprüft weder die Gültigkeit der PIR-Erkennungen noch verhindert er Fehlauslösungen. Geeignet für Heimsicherheit, Garagenüberwachung, Lagerräume oder Arbeitszimmer. Mit ESP32-CAM sind Foto-Benachrichtigungen m
Weitere Artikel
BlueGrays-App
Diese Schaltung Schritt für Schritt auf dem Handy nachbauen
Schaltplan, Code und Teileliste auf einem Bildschirm. Über 160 Arduino-, ESP32- und Pico-Projekte zum Nachbauen.
Mit dem Handy scannen
Richte die Kamera auf den Code, dann öffnet sich der App-Store deines Handys.
oder im Store öffnen

