Ratgeber · 14 Min. Lesezeit

ESP32 IoT Unterricht: Unterrichtsreihe über 8 Wochen

ESP32 IoT im Unterricht: 8-Wochen-Tabelle, Schul-WLAN und Hotspot, Code für einen WLAN-Webserver, Sicherheit und Ethik, Materialliste für 8 Gruppen, Rubrik.

Wenn du ESP32 IoT im Unterricht als Unterrichtsreihe für die Oberstufe oder die Berufsschule planst, teile sie in vier Schichten: Zuerst nimmt das Board seine Umgebung wahr (GPIO und Sensoren), dann verbindet es sich mit einem Netz (WLAN), dann teilt es Daten (Webserver, HTTP-Client, Nachrichten), und zuletzt lernt es, mit Akku zu laufen und geschützt zu sein (Deep Sleep und Sicherheit). Mit zwei Unterrichtsstunden pro Woche passen diese vier Schichten bequem in acht Wochen: zwei Wochen Hardware, zwei Wochen Netz und Server, zwei Wochen Datenaustausch, eine Woche Energie und Sicherheit, die letzte Woche für das Abschlussprojekt. Am Ende geben die Lernenden ein Gerät ab, das einen Sensor liest, den Messwert auf einer vom Handy aufgerufenen Seite zeigt oder bei einem Ereignis eine Nachricht aufs Handy schickt, dessen Akkulaufzeit berechnet ist und dessen Passwort nicht offen im Code steht.

Dieser Beitrag setzt die erste ESP32-Unterrichtsstunde fort; Installation, Treiber, BOOT-Taste und die erste LED stehen dort und werden hier nicht wiederholt. Hier findest du eine Wochentabelle mit Ziel, echtem BlueGrays-Projekt, Begriff und Ergebnis, ein 80-minütiges Wochengerüst, warum das Schulnetz den ESP32 meist nicht hereinlässt und was hilft, fünf Fragen an die IT-Betreuung, kompilierbaren Code für einen WLAN-Webserver, einen Abschnitt zu Sicherheit und Ethik, eine Materialliste für 8 Gruppen und Kriterien für das Abschlussprojekt. Die Beispiele gehen davon aus: Du hast 24 Lernende in 8 Dreiergruppen und zwei Unterrichtsstunden pro Woche (2 × 45 Minuten, gerechnet mit 2 × 40 Minuten Arbeitszeit). Ist deine Klasse anders, passe die Zeiten anteilig an.

LDR zum Messen der Helligkeit im ESP32-IoT-Unterricht
Der gemeinsame Sensor der Reihe: Der in Woche 2 gelesene LDR erscheint in Woche 4 auf einer Webseite, die vom Handy aufgerufen wird.

Die Logik der Reihe: erfassen, verbinden, teilen, Energie sparen

Ein Unterricht zum Internet der Dinge (IoT) lehrt nicht das Internet selbst, sondern wie ein Gerät mit anderen Geräten im Netz spricht. Dafür braucht es zuerst etwas zu messen: Ein Board, das sich mit dem WLAN verbindet, aber nichts misst, hat im Netz nichts zu sagen. Deshalb laufen die ersten zwei Wochen bewusst ohne WLAN: Die Lernenden arbeiten mit Taster, LDR und Temperatur- und Feuchtesensor und klären Pinwahl und Messintervall. In Woche drei kommt das Board ins Netz, in Woche vier wird es zum Server, in Woche fünf zum Client, der Daten von einem anderen Server abfragt, in Woche sechs meldet es ein Ereignis per Nachricht. Woche sieben gehört zwei Themen, die in kurzen IoT-Workshops meist fehlen: Akkulaufzeit und Sicherheit. Jede Schicht baut auf der vorigen auf, also tausche die Reihenfolge nicht; läuft die WLAN-Woche schlecht, löse das Verbindungsproblem, bevor du weitergehst.

Voraussetzung: Vor Beginn der Reihe sollte jede Gruppe mindestens einmal Code auf einen ESP32 hochgeladen haben. Ist deine Klasse noch nicht so weit, halte zuerst die erste ESP32-Stunde; Treiber-, Boardpaket- und Port-Probleme aus der WLAN-Woche herauszuhalten, ist der größte Zeitgewinn der ganzen Reihe.

Die 8-wöchige ESP32-IoT-Unterrichtsreihe

Jedes Projekt in der Tabelle liegt in BlueGrays mit Schaltplan, Bauteilliste und Code bereit. Die Projekte der ersten vier Wochen, einschließlich WLAN-Verbindung und Webserver, sind komplett kostenlos; die ab Woche 5 genutzten Projekte zu HTTP-Client, Telegram, WebSocket und Deep Sleep sind Premium. Im ersten Monat braucht also niemand Premium; was du tust, wenn Premium nötig wird, steht am Ende des Beitrags.

WocheZielBlueGrays-ProjektBegriffErgebnis
1Eingang lesen, Ausgang schaltenESP32 LED-Steuerung mit Drucktaste (Push), ESP32 LED Steuerung mit Taster (Toggle) (Kostenlos)GPIO, INPUT_PULLUP, digitaler Ein- und Ausgang, ZustandsvariablePer Taster ein- und ausschaltbare LED und Pinplan der Gruppe
2Die Umgebung messenMessung der Lichtintensität mit dem ESP32-LDR-Modul, ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display) (Kostenlos)Analoges Lesen (12 Bit, 0–4095), ADC1 und ADC2, I2C, Bibliotheken, MessintervallTabelle mit 10 Helligkeitswerten im seriellen Monitor, Temperatur und Feuchte auf dem LCD
3Das Board ins Netz bringenESP32-WLAN-STA-Verbindung (mit LCD-Display) (Kostenlos)WLAN-Station-Modus (STA), SSID, IP-Adresse, RSSI (dBm), WiFi.status(), WiederverbindenIP, MAC-Adresse und Signalstärke im Netzprotokoll
4Das Board zum Server machenESP32 Async-Webserver (mit IP-Anzeige auf dem LCD) (Kostenlos) und der Code in diesem BeitragWebserver, HTTP-Anfrage und -Antwort, Port 80, Pfade (/, /on, /off)Seite, die vom Handy eine LED schaltet und den Helligkeitswert zeigt
5Das Board zum Client machenESP32 HTTPClient + Wetter-API (mit LCD-Display), ESP32: Echtzeit aus dem Internet per NTP (Premium)HTTP-Client, GET-Anfrage, Statuscodes (200, 404), JSON, Uhrzeit per NTPWetter oder Uhrzeit aus dem Internet; Messwert der Nachbargruppe abrufen
6Ein Ereignis per Nachricht meldenESP32 Bewegungsalarmsystem (PIR + Buzzer + LED + Telegram), ESP32-WebSocket-Zähler (2 Tasten + LCD + Web-Echtzeit) (Premium)Benachrichtigung, Bot-Token, HTTPS, WebSocket, Idee von Publish-Subscribe (MQTT)Nachricht aufs Handy bei erkannter Bewegung oder eine Seite, die sich selbst aktualisiert
7Mit Akku laufen und das Gerät schützenESP32 Deep Sleep – Batteriesparmodus (OLED + RTC-RAM-Zähler) (Premium)Deep Sleep, Weckquellen, RTC-Speicher, mittlerer Strom, Passwörter in eigener DateiAkkulaufzeit-Berechnung und Projekt mit Passwort in secrets.h
8AbschlussprojektWahl der Gruppe, etwa ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display) plus die Webseite aus Woche 4Begriffe verbinden, dokumentieren, präsentierenFunktionierendes Gerät, 3-Minuten-Präsentation, Netzprotokoll

Drei Hinweise zur Tabelle. Erstens gibt es in der App kein fertiges MQTT-Projekt; erkläre MQTT in Woche 6 als Konzept an der Tafel (Geräte sprechen nicht direkt miteinander, sondern veröffentlichen Nachrichten unter einem Topic an einen Vermittlungsserver, den Broker, und wer sich interessiert, abonniert dieses Topic) und mache den praktischen Teil mit der Telegram-Benachrichtigung und der WebSocket-Seite. Die Details zu Telegram stehen im Beitrag ESP32 Telegram-Bot. Zweitens braucht das Async-Webserver-Projekt in Woche 4 die Bibliotheken AsyncTCP und ESPAsyncWebServer; installiere sie vor dem Unterricht auf jedem Rechner, sonst bricht das Kompilieren in der ersten Zeile ab. Drittens braucht die Nachbargruppen-Übung in Woche 5 kein Internet: Der ESP32 von Gruppe A liest die Adresse /deger auf dem Server, den Gruppe B in Woche 4 gebaut hat. Hat die Schule keinen Internetzugang, funktioniert diese Woche trotzdem.

Denk bei der Pinwahl in Woche 2 schon an die WLAN-Wochen. Die ESP32-Pins am ADC2 (GPIO0, 2, 4, 12–15 und 25–27) können bei aktivem WLAN nicht analog lesen; ein Potentiometer, das in Woche 2 an GPIO4 tadellos läuft, liefert in Woche 4 immer denselben falschen Wert. Schließe analoge Sensoren von Anfang an an ADC1-Pins (GPIO32–39) an; deshalb nutzt auch das LDR-Projekt in der App GPIO34.

Das Wochengerüst: 80 Minuten

Wenn jede Woche nach demselben Gerüst läuft, stecken die Lernenden ihre Energie in den neuen Begriff statt in einen neuen Ablauf. Kannst du die zwei Stunden als Doppelstunde legen, läuft der Ablauf unten am Stück; sonst in zwei Hälften zu 40 Minuten, und dann baust du die Schaltung am Ende der ersten Stunde nicht ab, sondern legst sie aufgebaut in die Kiste. Das Netzprotokoll ist eine Seite, die jede Gruppe führt: Datum, IP-Adresse des Boards, MAC-Adresse, Signalstärke, aufgetretener Fehler und wie er gelöst wurde. Ab Woche 3 läuft die Hälfte der Fehlersuche über dieses Protokoll.

MinutenPhaseWas passiert?
0–10EinstiegDie Exit-Frage der Vorwoche wird besprochen, Gruppen öffnen ihr Netzprotokoll, Kisten werden verteilt.
10–20BegriffDer eine Begriff der Woche wird an die Tafel gezeichnet: in Woche 4 Handy, ESP32 und die Pfeile für Anfrage und Antwort dazwischen.
20–30Code lesenDas Projekt der Woche wird projiziert, Zusammenfassung und Schritt-für-Schritt-Erklärung im Tab Code verstehen werden gemeinsam gelesen, die Lernenden sagen die Ausgabe voraus.
30–55Aufbauen und hochladenDie Gruppen bauen die Schaltung, laden den Code hoch und sehen die erste Ausgabe im seriellen Monitor. Wer länger als 3 Minuten feststeckt, bekommt von dir ein Ersatzset.
55–70Etwas ändernJede Gruppe ändert genau eine Sache: Aktualisierungsintervall, Seitentext, Schwellenwert oder Schlafdauer. Die Änderung kommt ins Netzprotokoll.
70–80AbschlussDie Exit-Frage wird schriftlich beantwortet, die Schaltung abgebaut oder aufgebaut in die Kiste gelegt, Bauteile werden gezählt.

Schulnetz-Realität: Warum der ESP32 nicht ins Schul-WLAN kommt

Die meisten IoT-Reihen hängen am Netz, nicht am Code. Der klassische ESP32 arbeitet nur im 2,4-GHz-Band; einen Zugangspunkt, der nur auf 5 GHz sendet, sieht er gar nicht. Schulnetze arbeiten oft nicht wie ein Heimnetz mit einem gemeinsamen Passwort, sondern mit Unternehmens-Authentifizierung über Benutzername und Passwort (WPA2-Enterprise); der ESP32 kann das mit zusätzlichem Code, aber dafür müsste das persönliche Kontopasswort einer Lehrkraft oder eines Lernenden in den Code, und das geht im Unterricht nicht. Gastnetze öffnen nach dem Verbinden eine Bestätigungsseite im Browser (Captive Portal); der ESP32 hat weder Bildschirm noch Browser, kommt an dieser Seite nicht vorbei und wirkt verbunden, erreicht aber nie das Internet. Manche Schulen lassen nur Geräte mit vorher registrierter MAC-Adresse zu. Die letzte Falle ist die unbekannteste: Gastnetze trennen Geräte meist voneinander (Client-Isolation). Dann verbindet sich der ESP32 und zeigt sogar seine IP-Adresse, aber das Handy im selben Netz erreicht diese Adresse nicht, und der Webserver aus Woche 4 öffnet sich nie.

NetztypVerbindet sich der ESP32?Für die Webserver-WocheHinweis
2,4-GHz-Netz mit einem Passwort (WPA2-PSK)JaGeeignetWie ein Heimnetz; in Schulen selten für Lernende offen
Netz, das nur auf 5 GHz sendetNein, er sieht es nichtNicht geeignetFehlt es in der Netzliste, zuerst das Band prüfen
Unternehmensnetz mit Benutzername und Passwort (WPA2-Enterprise)Technisch mit zusätzlichem Code möglichNicht empfohlenEin persönliches Kontopasswort landet im Code
Gastnetz mit Bestätigungsseite (Captive Portal)Verbindet sich, kommt aber nicht ins InternetMeist nicht geeignetMeist ist auch Client-Isolation aktiv
Persönlicher Hotspot eines HandysJa, wenn 2,4 GHz aktiv istGeeignetBegrenzte Zahl gleichzeitiger Geräte
Eigener 2,4-GHz-Router ohne Verbindung zum SchulnetzJaAm besten geeignetBraucht er Internet, mit der IT-Betreuung absprechen

Die Lösung: Handy-Hotspot oder eigener Router

Am schnellsten hilft der persönliche Hotspot auf deinem Handy. Auf dem iPhone schaltet die Option Kompatibilität maximieren in den Einstellungen des Persönlichen Hotspots auf 2,4 GHz um; unter Android wählst du in den Hotspot-Einstellungen das 2,4-GHz-Band. Das liefert auch Internet, aber Handys nehmen nur eine begrenzte Zahl von Geräten gleichzeitig an, und mit 8 Gruppen plus Handys der Lernenden ist die Grenze schnell erreicht. Faustregel: Wenn die 8 ESP32 am Handy der Lehrkraft hängen, dürfen die 8 Handys, mit denen der Browser geöffnet wird, nicht an einem zweiten Handy hängen, denn Handy und ESP32 müssen im selben Netz sein. Verbinde in Woche 3 und 4 deshalb 4 Gruppen mit einem Hotspot und die anderen 4 mit einem zweiten, und jede Gruppe testet mit nur einem Handy.

Wiederholst du die Reihe jedes Jahr, ist die dauerhafte Lösung ein eigener 2,4-GHz-Router nur für diesen Unterricht. Der Router funktioniert auch ohne Verbindung zum Schulnetz; Woche 3 und 4 sowie die Nachbargruppen-Übung gehen ohne Internet, weil ESP32 und Handy im selben lokalen Netz sind. Internet brauchst du nur in Woche 5 und 6 (Wetter, NTP, Telegram); nutze dafür einen Hotspot oder plane den Anschluss des Routers ans Schulnetz zusammen mit der IT-Betreuung. Ändere Netzname und Passwort jedes Halbjahr und das Admin-Passwort des Routers gleich am ersten Tag. Gibt es überhaupt kein physisches Netz: In den WLAN-Projekten der App ist der voreingestellte Netzname Wokwi-GUEST; derselbe Code lässt sich mit diesem Netz im Wokwi-Simulator im Browser ausprobieren. Stelle der IT-Betreuung mindestens zwei Wochen vor Beginn diese fünf Fragen:

  1. Gibt es an der Schule ein Netz, das auf 2,4 GHz mit einem gemeinsamen Passwort (WPA2-PSK) sendet, und dürfen Unterrichtsgeräte es nutzen?
  2. Hat das Gastnetz ein Captive Portal und Client-Isolation? Können sich zwei Geräte im selben Netz erreichen?
  3. Müssen Geräte vorab mit ihrer MAC-Adresse registriert werden? Wenn ja, bis wann brauchst du die Liste der 9 Boards?
  4. Ist es nach den Schulregeln erlaubt, im Fachraum einen eigenen Router ohne Verbindung zum Schulnetz oder einen Hotspot vom Handy der Lehrkraft zu nutzen?
  5. Wenn die ESP32 in Woche 5 und 6 ins Internet müssen: Welche Verbindungen lässt die Firewall zu (Webseiten, Zeitserver, Messenger-Dienste)?

Der Code: ESP32 ins WLAN bringen und einen Sensorwert auf einer Seite zeigen

Der Code unten ist der Kern von Woche 4 und nutzt nur die Bibliotheken WiFi.h und WebServer.h, die mit dem ESP32-Boardpaket kommen; zusätzliche Bibliotheken sind nicht nötig. Die Schaltung bleibt aus Woche 2: VCC des LDR-Moduls an 3V3, GND an GND, AO an GPIO34. GPIO34 liegt am ADC1 und lässt sich deshalb auch bei aktivem WLAN lesen. Ersetze vor dem Hochladen die beiden Platzhalter AG_ADI (Netzname) und AG_SIFRESI (Passwort) durch die Daten deines 2,4-GHz-Netzes oder verschiebe diese zwei Zeilen, wie in Woche 7, in eine eigene Datei namens secrets.h; findet der Code diese Datei, nutzt er sie.

C++ (Arduino IDE)
1// ESP32 Wi-Fi + web sunucu: LDR değerini tarayıcıda göster / ESP32 Wi-Fi + web server: show the LDR value in a browser
2#include <WiFi.h>
3#include <WebServer.h>
4
5// Ağ bilgileri: secrets.h varsa oradan gelir / Network credentials: taken from secrets.h if it exists
6#if __has_include("secrets.h")
7#include "secrets.h"
8#else
9const char* WIFI_SSID = "AG_ADI";       // 2,4 GHz ağın adı / Name of the 2.4 GHz network
10const char* WIFI_PASS = "AG_SIFRESI";   // Ağ şifresi / Network password
11#endif
12
13const int LDR_PIN = 34;   // ADC1 pini, Wi-Fi açıkken de okunur / ADC1 pin, still readable while Wi-Fi is on
14
15WebServer server(80);     // 80 numaralı portta web sunucu / Web server on port 80
16
17// Ana sayfa: ölçümü HTML olarak gönder / Home page: send the reading as HTML
18void handleRoot() {
19  int raw = analogRead(LDR_PIN);              // 0-4095 ham değer / Raw value 0-4095
20  int percent = map(raw, 4095, 0, 0, 100);    // Modülde ışık arttıkça değer düşer / On the module the value drops as light rises
21  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>";
22  html += "<meta name='viewport' content='width=device-width'>";
23  html += "<script>setTimeout(() => location.reload(), 5000);</script>";   // 5 saniyede bir yenile / Reload every 5 s
24  html += "<title>ESP32 Grup 1</title></head><body>";
25  html += "<h1>Isik: %" + String(percent) + "</h1>";
26  html += "<p>Ham deger: " + String(raw) + "</p>";
27  html += "<p>Sinyal: " + String(WiFi.RSSI()) + " dBm</p>";
28  html += "</body></html>";
29  server.send(200, "text/html", html);        // 200 = istek başarılı / 200 = request OK
30}
31
32// Yalnız sayıyı döndüren adres / Address that returns only the number
33void handleValue() {
34  server.send(200, "text/plain", String(analogRead(LDR_PIN)));
35}
36
37void setup() {
38  Serial.begin(115200);
39  analogReadResolution(12);                   // 12 bit: 0-4095
40  WiFi.mode(WIFI_STA);                        // İstasyon modu: var olan ağa katıl / Station mode: join an existing network
41  WiFi.begin(WIFI_SSID, WIFI_PASS);
42  Serial.print("Baglaniliyor / Connecting");
43  unsigned long start = millis();
44  while (WiFi.status() != WL_CONNECTED && millis() - start < 20000) {   // En fazla 20 sn bekle / Wait up to 20 s
45    delay(500);
46    Serial.print(".");
47  }
48  if (WiFi.status() != WL_CONNECTED) {
49    Serial.println("\nBaglanamadi, yeniden basliyor / No connection, restarting");
50    delay(2000);
51    ESP.restart();
52  }
53  Serial.print("\nIP: ");
54  Serial.println(WiFi.localIP());             // Telefonda bu adresi aç / Open this address on the phone
55  server.on("/", handleRoot);                 // Ana sayfa: IP/ / Home page: IP/
56  server.on("/deger", handleValue);           // Yalnız sayı: IP/deger / Number only: IP/deger
57  server.begin();
58}
59
60void loop() {
61  server.handleClient();                      // Gelen istekleri karşıla / Serve incoming requests
62}

Öffne nach dem Hochladen den seriellen Monitor mit 115200 Baud. Wenn die Punkte aufhören, erscheint die IP-Zeile, zum Beispiel 192.168.43.57. Öffne auf einem Handy im selben Netz wie der ESP32 den Browser und gib diese Adresse ein: Die Seite zeigt Helligkeit in Prozent, Rohwert und Signalstärke und lädt sich alle 5 Sekunden neu. Deckst du den LDR mit der Hand ab, sinkt der Prozentwert. Hängst du /deger an die Adresse, kommt nur die Rohzahl zurück; genau diese Adresse liest in Woche 5 der ESP32 der Nachbargruppe mit einem HTTP-Client. Verbindet sich das Board nicht innerhalb von 20 Sekunden, startet es neu, damit niemand denkt, es sei eingefroren. Kommt die Verbindung gar nicht zustande, erklärt der Beitrag ESP32 verbindet sich nicht mit dem WLAN die Statuscodes.

Zeigt der serielle Monitor eine IP-Adresse, aber das Handy öffnet die Seite nicht, liegt es fast immer am Netz, nicht am Code. Das Handy hängt vielleicht im Mobilfunknetz oder in einem anderen WLAN, oder Client-Isolation ist aktiv. Prüfe zuerst, ob das Handy im selben WLAN ist wie der ESP32; ist es das und die Seite öffnet sich trotzdem nicht, wechsle auf einen Hotspot.

Sicherheit und Ethik: die Woche, die du nicht streichen solltest

Im IoT-Unterricht wird Sicherheit nicht als eigener Foliensatz gelehrt, sondern als Änderung, die die Lernenden in ihrem eigenen Code machen. In dieser Reihe tragen sie ohnehin an drei Stellen echte Geheimnisse: das WLAN-Passwort, den Bot-Token aus Woche 6 und die selbst gemessenen Daten. Nutze die zweite Hälfte von Woche 7 für diese fünf Punkte und verlange zu jedem eine konkrete Änderung im Projekt der Gruppe:

  • Passwörter nicht in den Code schreiben: Verschiebe WLAN-Passwort und Bot-Token in eine eigene Datei namens secrets.h und lass diese Datei weg, wenn Code geteilt oder ein Screenshot gemacht wird. Eine projizierte Codezeile heißt: Alle im Raum kennen das Passwort.
  • Standardpasswörter ändern: Router-Verwaltungsseiten, der eigene Access-Point-Modus (AP) des ESP32 und die Passwörter in fertigen Beispielcodes sind Werte, die alle kennen. Ändere das Passwort des Unterrichtsrouters am ersten Tag und bitte die Lernenden, keine Beispielpasswörter im Projekt zu lassen.
  • Deine Seite ist für alle im Netz offen: Der Webserver in diesem Beitrag hat keine Anmeldung; wer im selben Netz die Adresse kennt, öffnet die Seite und schaltet in einem Projekt mit /on-Adresse auch die LED. Deshalb werden im Unterricht über das Web nur harmlose Ausgaben wie LEDs, Summer und Displays gesteuert; Relais an Netzspannung (230 V) kommen in dieser Reihe nicht vor.
  • Personenbezogene Daten: Temperatur und Helligkeit sind keine personenbezogenen Daten, aber ein Bewegungsmelder, der protokolliert, wann Menschen durch den Flur gehen, eine Kamera oder ein Mikrofon können es werden. Zeichnet eine Projektidee Bewegung, Stimme oder Bild von Menschen auf, lass die Klasse zuerst klären: "Wer sieht es, wie lange wird es gespeichert, wurde zugestimmt?"
  • Updates und Verantwortung: Ein Gerät mit Internetzugang wird nicht einmal eingerichtet und dann vergessen. Zeig den Lernenden, dass am Ende der Reihe der Unterrichtsrouter abgeschaltet, Bot-Tokens widerrufen und Boards zurückgesetzt werden, und besprecht, wer während der ganzen Lebensdauer eines Geräts verantwortlich ist.

Materialliste: pro Gruppe und für 8 Gruppen

Die Liste gilt für 24 Lernende in 8 Dreiergruppen; 9 Sets mit einem Ersatzset reichen. Die meisten Teile werden für die ersten Wochen gekauft und später wiederverwendet; das LCD etwa kommt von Woche 2 bis Woche 5 in vier Projekten vor. Löten ist nicht nötig; Module wie I2C-LCD und OLED werden mit Male-Female-Jumperkabeln angeschlossen. Nimmst du statt des LDR-Moduls einen einzelnen LDR, gib jeder Gruppe einen 10-kΩ-Widerstand dazu und baut den Spannungsteiler in Woche 2 gemeinsam auf.

MaterialPro GruppeFür die Klasse (8 Gruppen + 1 Ersatz)Genutzt in Woche
ESP32 DevKit (30 Pins, ESP32-WROOM-32)191–8
USB-Datenkabel (getestet)1111–8
Steckbrett (830 Kontakte)2181–8
Taster2181, 6
5-mm-LED und 220-Ω-Widerstand3 + 330 + 301, 3, 4
LDR-Modul (mit AO-Ausgang)192, 4, 5
DHT22 Temperatur- und Feuchtesensor192, 8
16x2 I2C-LCD192–5
0,96-Zoll-OLED SSD1306 (I2C)197
PIR-Bewegungsmelder (HC-SR501) und Summer1 + 19 + 96
Jumperkabel (Male-Male und Male-Female)20 + 10etwa 180 + 901–8
2,4-GHz-Zugangspunkt (Handy-Hotspot oder eigener Router)-2 Hotspots oder 1 Router3–8
Handy oder Tablet mit BlueGrays181–8

Bewertung: Kriterien für das Abschlussprojekt

Halte die Regel für das Abschlussprojekt einfach: ein Sensor, eine WLAN-Verbindung und ein Weg zum Teilen (Webseite oder Nachricht). Die Gruppen schreiben ihre Idee am Ende von Woche 6 in einem Satz auf, erstellen in Woche 7 die Materialliste, bauen in der ersten Stunde von Woche 8 und präsentieren in der zweiten je drei Minuten. Bewerte mit den sechs Kriterien unten; jedes bringt 1–3 Punkte, insgesamt 18. Für die allgemeine Logik der Rubrik, das Abgabeformular und das Portfolio kannst du die Vorlage aus dem Beitrag Bewertungsraster für den Arduino-Unterricht unverändert übernehmen.

Kriterium1: Beginnend2: Entwickelnd3: Sicher
Sensor und SchaltungSchaltung aufgebaut, aber kein oder ein sinnloser WertWert wird gelesen, Pinwahl kann nicht begründet werdenWert korrekt gelesen, Wahl von ADC1- oder Digitalpin erklärt
WLAN-VerbindungVerbindet sich nur mit Hilfe der LehrkraftVerbindet sich, aber das Gerät stoppt bei VerbindungsabbruchVerbindet sich, verbindet sich nach Abbruch neu, IP und Signalstärke notiert
Daten teilenDaten nur im seriellen MonitorSeite oder Nachricht vorhanden, muss aber von Hand aktualisiert oder ausgelöst werdenSeite aktualisiert sich selbst oder die Nachricht geht beim Ereignis automatisch raus
EnergiebewusstseinNiemand weiß, wie viel Strom das Gerät ziehtAkkulaufzeit berechnet, Schlafmodus nicht bedachtMit Schlaf und Weckintervall berechnet, Ergebnis gedeutet
Sicherheit und EthikPasswort offen im CodePasswort in secrets.h, Daten nicht besprochenPasswort in eigener Datei, erfasste Daten und wer sie sieht schriftlich festgehalten
Dokumentation und PräsentationNetzprotokoll lückenhaft, Präsentation nur VorführungNetzprotokoll vorhanden, aufgetretene Fehler nicht erklärtNetzprotokoll vollständig, ein Fehler und seine Lösung in der Präsentation erklärt

Exit-Fragen pro Woche und Checkliste vor der Reihe

  1. Woche 1: Welchen Wert liefert digitalRead() an einem Pin mit INPUT_PULLUP, solange der Taster gedrückt ist, und warum?
  2. Woche 2: Warum lässt sich ein Potentiometer an GPIO4 bei aktivem WLAN nicht lesen? Welche Pins sollten wir wählen?
  3. Woche 3: Wenn WiFi.status() nicht verbunden meldet, was prüfst du als Erstes (zwei Dinge)?
  4. Woche 4: Warum kann die IP-Adresse, die du in den Browser getippt hast, nächste Woche anders sein?
  5. Woche 5: War dein ESP32 diese Woche Server oder Client? Was sagen die Statuscodes 200 und 404?
  6. Woche 6: Was passiert, wenn der Bot-Token auf einem Screenshot zu sehen ist? Welche Aufgabe hat der Broker bei MQTT?
  7. Woche 7: Mit demselben Akku läuft ein ESP32 dauerhaft eingeschaltet tagelang, im Deep Sleep monatelang. Woran liegt der Unterschied?
  8. Woche 8: Welche Daten erfasst dein Gerät, wer kann sie sehen und wie lange werden sie gespeichert?
  • Zwei Wochen vor Beginn: Der IT-Betreuung die fünf Fragen stellen und je nach Antwort zwischen Hotspot und Router entscheiden.
  • Zwei Wochen vor Beginn: Boards zählen und die MAC-Adresse jedes Boards auf sein Etikett schreiben (bei Registrierungspflicht Liste an die IT geben).
  • Eine Woche vor Beginn: Auf jedem Rechner das ESP32-Boardpaket und die Bibliotheken DHT, LiquidCrystal I2C, AsyncTCP und ESPAsyncWebServer installieren; mit einem Board testen.
  • Eine Woche vor Beginn: Hotspot auf 2,4 GHz stellen, Name und Passwort ändern, einen ESP32 verbinden und seine Seite vom Handy öffnen.
  • Eine Woche vor Beginn: Für jede Gruppe eine Seite Netzprotokoll kopieren, Sensoren und LCDs testen und in die Kisten legen.
  • Vor Woche 5: Die Codes für die Premium-Projekte vorbereiten und den Lernenden erklären, welche ihrer Daten geteilt werden.

Wo BlueGrays in die Reihe passt

  • ESP32-Projekte: Unter Entdecken › Projekte wählst du mit Filtern die Plattform ESP32; es gibt rund 50 ESP32-Projekte, von der WLAN-Verbindung bis zum Deep Sleep. Jedes hat Schaltplan, Bauteilliste mit Stückzahlen und kopierbaren Quellcode. Mit Link kopieren öffnest du den Code bequem am Rechner.
  • Code verstehen: Die Minuten 20–30 jeder Woche laufen über diesen Tab: Zusammenfassung Was macht dieser Code?, Erklärung Schritt für Schritt, Wenn du nicht weiterkommst und die Aufgabe Probier es selbst. Bei den Projekten der ersten vier Wochen kostenlos, bei Premium-Projekten mit Premium.
  • Pinout-Werkzeug: Im Werkzeug Pinout zeigt jeder ausgewählte ESP32-Pin seine Art und Warnhinweise; bei einem ADC2-Pin heißt es, dass bei aktivem WLAN kein Analoglesen möglich ist, bei einem ADC1-Pin, dass er auch mit WLAN lesbar bleibt. Ideal für den Beamer bei der Pinwahl in Woche 2. Pinout ist ein Premium-Werkzeug.
  • Akkulaufzeit-Werkzeug: Im Werkzeug Akkulaufzeit wählst du das fertige Profil ESP32 · Deep Sleep; nach Eingabe von Akkukapazität, Wachstrom und -dauer, Schlafstrom und Zyklus berechnet es die geschätzte Laufzeit und den mittleren Strom. Der Vergleich "immer an gegen schlafend" in Woche 7 läuft über diesen Bildschirm. Das Werkzeug ist Premium; ohne Premium siehst du eine Beispielrechnung.
  • Lehrer-Pakete: Ab Woche 5 werden Premium-Projekte gebraucht, also sollte pro Gruppe ein Konto Premium haben. Ein jährliches Paket mit 10 Codes reicht für 8 Gruppen und die Lehrkraft; es ist eine Einmalzahlung, verlängert sich nicht, die Lernenden hinterlegen keine Karte, in Meine Codes siehst du, wer welchen Code eingelöst hat, und du kannst Codes an die Gruppe des nächsten Halbjahrs übertragen. Ein 30-tägiger Monatscode, in der ersten Stunde von Woche 5 verteilt, deckt die letzten vier Wochen gerade so ab; liegen Ferien dazwischen, reicht er nicht. Details im Beitrag Premium-Codes für die ganze Klasse.

Nach acht Wochen haben die Lernenden nicht nur ein funktionierendes Gerät, sondern die Gewohnheit, darüber nachzudenken, wie ein Gerät im Netz spricht, warum es sich nicht verbindet, wie viel Energie es braucht und wessen Daten es sammelt; genau das sucht die Berufsausbildung. Wenn du die Projekte, Schaltpläne und Code-verstehen-Erklärungen jeder Woche vor dem Unterricht durchgehen willst, öffne in der BlueGrays-App einfach den ESP32-Filter.

Häufige Fragen

Wie viele Wochen sollte eine ESP32-IoT-Unterrichtsreihe dauern?

Mit zwei Unterrichtsstunden pro Woche reichen 8 Wochen für die IoT-Grundbegriffe, vom Sensor über WLAN und Webserver bis zu Benachrichtigung und Deep Sleep. Hast du nur eine Stunde pro Woche, strecke denselben Plan auf 12–14 Wochen oder fasse Woche 5 und 6 zusammen. Gib dem Abschlussprojekt mindestens eine volle Stunde.

Geht ESP32-IoT-Unterricht ohne Schul-WLAN?

Ja. Solange ESP32 und Handy im selben lokalen Netz sind, brauchen Webserver und Anfragen zwischen Geräten kein Internet; ein 2,4-GHz-Hotspot auf dem Handy der Lehrkraft oder ein eigener Router ohne Verbindung zum Schulnetz genügt. Internet brauchst du nur für externe Dienste wie Wetter, Uhrzeit und Telegram.

Warum verbindet sich der ESP32 nicht mit dem Schul-WLAN?

Der klassische ESP32 arbeitet nur mit 2,4 GHz; ein Netz, das nur auf 5 GHz sendet, taucht gar nicht auf. Schulnetze nutzen oft Unternehmens-Authentifizierung mit Benutzername und Passwort oder ein Captive Portal im Browser, manche lassen nur registrierte MAC-Adressen zu. Dann ist ein Hotspot oder eigener Router die praktischste Lösung.

Warum lässt sich der ESP32-Webserver vom Handy nicht öffnen?

Meist ist das Handy nicht im selben Netz wie der ESP32: Es hängt im Mobilfunknetz oder in einem anderen WLAN. Der zweite Grund ist Client-Isolation in Gastnetzen, bei der sich Geräte im selben Netz nicht erreichen. Probiere die IP-Adresse aus dem seriellen Monitor erneut, wenn Handy und ESP32 am selben Hotspot hängen.

Muss man MQTT im IoT-Unterricht behandeln?

Zwingend ist es nicht, aber als Konzept sollte es vorkommen, weil die meisten echten IoT-Systeme dieses Modell nutzen, bei dem Geräte über einen Broker nach Topics Nachrichten austauschen. In einer 8-wöchigen Reihe genügt es, zuerst mit HTTP das Client-Server-Prinzip zu festigen und MQTT in Woche sechs als Publish-Subscribe-Idee einzuführen.

Sind die ESP32-Projekte in BlueGrays kostenlos?

Ein Teil davon. Die Projekte der ersten vier Wochen dieses Plans, etwa Taster, LDR, DHT22, WLAN-Verbindung und Async-Webserver, sind komplett kostenlos. HTTP-Client, Telegram, WebSocket und Deep Sleep sind Premium; für eine Klasse gibt es Sammelcodes über die Lehrer-Pakete im Profil.

Alle Projekte ansehen
ESP32-WLAN-STA-Verbindung (mit LCD-Display)
#127Fortgeschritten

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.

4.4(21)
34
ESP32 Async-Webserver (mit IP-Anzeige auf dem LCD)
#129Fortgeschritten

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

4.8(16)
26
ESP32 LED-Steuerung mit Drucktaste (Push)
#104Anfänger

ESP32 LED-Steuerung mit Drucktaste (Push)

Die LED leuchtet auf, wenn die Taste gedrückt wird und geht aus, wenn sie losgelassen wird. Zeigt, wie der digitale Eingangspin des ESP32 und der interne Pull-up-Widerstand verwendet werden. Dank des INPUT_PULLUP-Modus ist kein externer Widerstand erforderlich.

4.6(36)
55
Messung der Lichtintensität mit dem ESP32-LDR-Modul
#113Anfänger

Messung der Lichtintensität mit dem ESP32-LDR-Modul

Echtzeit-Anzeige des ADC-Rohwerts des LDR-Moduls und des anhand von Dunkel- und Hellreferenzwerten berechneten relativen Lichtwerts in Prozent im Serial Monitor. Dieser Prozentwert ist keine Lux-Messung. Vermittelt die Kalibrierungslogik des Moduls. Sollte idealerweise vor Projekt 10 durchgeführt werden, da es zur Festlegung des Schwellenwerts dient.

4.6(36)
55
ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display)
#117Mittel

ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display)

Bei diesem Projekt werden die Umgebungstemperatur und die Luftfeuchtigkeit mit einem DHT22-Sensor gemessen und in Echtzeit auf einem 16x2 I2C-LCD angezeigt. Mithilfe der Adafruit-DHT-Bibliothek werden die Daten über das One-Wire-Protokoll vom Sensor ausgelesen. Dieses Projekt bildet die Grundlage für IoT-Wetterstationen, Smart-Home-Automatisierung oder Umgebungsüberwachungssysteme in Gewächshäusern. Die Kommunikation mit dem DHT22 erfolgt über den GPIO-4-Pin des ESP32.

4.8(38)
56
ESP32 HTTPClient + Wetter-API (mit LCD-Display)
#133Fortgeschritten
Premium

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

4.7(13)
20
ESP32 Bewegungsalarmsystem (PIR + Buzzer + LED + Telegram)
#145Fortgeschritten
Premium

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

0.0(0)
9
ESP32 Deep Sleep – Batteriesparmodus (OLED + RTC-RAM-Zähler)
#135Fortgeschritten
Premium

ESP32 Deep Sleep – Batteriesparmodus (OLED + RTC-RAM-Zähler)

Der Deep-Sleep-Modus des ESP32 senkt den Stromverbrauch auf etwa 10 µA, indem er die CPU und die meisten Peripheriegeräte abschaltet, und ist für batteriebetriebene IoT-Geräte von entscheidender Bedeutung. In diesem Projekt verwenden wir drei verschiedene Weckquellen: den Timer (15 s), einen externen Pin (EXT0 – Taste GPIO 33) und die Berührungserkennung (T0/GPIO 4). Mit RTC_DATA_ATTR markierte Variablen bleiben während des Deep-Sleep-Modus erhalten – der Boot-Zähler, der Timer-Wake-Zähler und

4.3(10)
16