Arduino-Quiz mit ESP32 und Smartphones


Arduino-Quiz mit ESP32 und Smartphones
- Das Projekt ist ein digitales Quizspiel mit einem ESP32 als zentraler Spielsteuerung.
- Der ESP32 erstellt ein eigenes lokales WLAN.
- Zwei Spieler:innen verbinden ihre Smartphones mit diesem WLAN.
- Beide öffnen das Spiel im Browser.
- Eine App ist nicht nötig.
- Internet ist nicht nötig.
- Beide Spieler:innen bekommen gleichzeitig dieselbe Frage angezeigt.
- Jede Frage hat genau 4 Antwortmöglichkeiten.
- Ein Spiel besteht aus genau 10 Fragen.
- Pro Frage haben die Spieler:innen 10 Sekunden Zeit.
- Die schnellste richtige Antwort bekommt den Punkt.
- Nach 10 Fragen erscheint der Endstand.
- Die beste Variante ist ein ESP32 oder ESP32-S3 als lokaler WLAN-Server.
- Der ESP32 arbeitet als Access Point.
- Die Smartphones verbinden sich direkt mit dem ESP32-WLAN.
- Die Spieloberfläche läuft als Webseite im Browser.
- Die Spiellogik läuft zentral auf dem ESP32.
- Der Timer läuft ebenfalls zentral auf dem ESP32.
- Dadurch entscheidet nicht das Handy, sondern der ESP32 über Punkte, Zeit und Reihenfolge.
- Diese Lösung ist stabiler und einfacher als Bluetooth oder USB-C.
- Diese Lösung ist günstiger und näher an Arduino als eine Raspberry-Pi-Variante.
- Ein klassischer Arduino Uno ist ungeeignet, weil er kein eingebautes WLAN hat.
- Bluetooth ist für Smartphones im Schulprojekt zu fehleranfällig und oft app-abhängig.
- USB-C zwischen Smartphone und Mikrocontroller ist technisch zu kompliziert und nicht zuverlässig auf allen Geräten.
- Ein Raspberry Pi wäre leistungsfähiger, aber aufwendiger einzurichten.
- Für ein Schulprojekt mit Arduino-Charakter ist der ESP32 die beste Balance aus Kosten, Einfachheit, Leistung und Erweiterbarkeit.
- Zwei Spieler:innen spielen gegeneinander.
- Beide verwenden jeweils ein Smartphone.
- Beide sehen immer dieselbe Frage.
- Ein Spiel besteht aus 10 Fragen.
- Jede Frage hat 4 Antwortmöglichkeiten.
- Für jede Frage läuft ein 10-Sekunden-Timer.
- Die schnellste richtige Antwort innerhalb der 10 Sekunden bekommt 1 Punkt.
- Falsche Antworten geben 0 Punkte.
- Wer zu spät antwortet, bekommt 0 Punkte.
- Wenn beide falsch antworten, bekommt niemand einen Punkt.
- Wenn niemand innerhalb von 10 Sekunden richtig antwortet, bekommt niemand einen Punkt.
- Nach Ablauf der Zeit oder nach der ersten richtigen Antwort wird die Frage beendet.
- Danach erscheint kurz die Lösung.
- Anschließend startet die nächste Frage.
- Nach 10 Fragen wird der Endstand angezeigt.
- Die Person mit den meisten Punkten gewinnt.
- Bei Gleichstand kann optional eine Zusatzfrage gespielt werden.
- Spieler:in verbindet sich mit dem WLAN des ESP32.
- Spieler:in öffnet im Browser die Adresse http://192.168.4.1.
- Spieler:in wählt auf der Startseite:
- Spieler 1 oder Spieler 2
- optional einen Spielernamen
- Ein:e Spieler:in oder die Lehrkraft wählt:
- Fach
- Schwierigkeitsgrad
- konkretes Quiz
- Danach startet das Spiel.
- Beide Smartphones zeigen gleichzeitig Frage 1.
- Beide Smartphones zeigen vier Antwortbuttons.
- Der Countdown läuft von 10 Sekunden herunter.
- Nach der Antwort erscheint eine Rückmeldung.
- Nach Frage 10 erscheint der Endstand.
- Fach, zum Beispiel:
- Mathematik
- Geografie
- Medienbildung
- Ernährung
- Deutsch
- Englisch
- Schwierigkeitsgrad:
- leicht
- mittel
- schwer
- konkretes Quiz, zum Beispiel:
- Multiplikation bis 10
- Hauptstädte Europas
- Sicher im Internet
- Gesunde Ernährung
- Wortarten
- Englisch-Vokabeln
- 1x ESP32 oder besser ESP32-S3.
- 2x Smartphone mit WLAN und Browser.
- 1x Laptop oder PC zum Programmieren.
- 1x passendes USB-Datenkabel.
- Installierte Arduino IDE.
- Eingerichtete ESP32-Unterstützung in der Arduino IDE.
- Stromversorgung über Laptop, Netzteil oder Powerbank.
- Grundkenntnisse in Arduino oder Bereitschaft, mit KI schrittweise zu arbeiten.
- Ein funktionierender Beispielcode als Startpunkt.
- Vorbereitete Beispielquizze.
| Material | Menge | Empfehlung | Zweck |
|---|---|---|---|
| ESP32-S3 Dev Board | 1 pro Quizstation | ESP32-S3 oder ESP32 DevKit | WLAN, Webserver und Spielsteuerung |
| USB-Datenkabel | 1 bis 2 | Auf Datenfähigkeit achten | Programmierung und Stromversorgung |
| Powerbank | 1 | 5V USB-Ausgang | Mobiler Betrieb ohne Laptop |
| Smartphones | 2 | Android oder iPhone | Spielgeräte |
| Laptop oder PC | 1 | Mit Arduino IDE | Programmierung |
| Buzzer | optional | einfacher Piezo-Buzzer | Tonsignal bei Antwort oder Spielende |
| rote und grüne LED | optional | mit Widerständen | sichtbare Rückmeldung am Spielgerät |
| kleines Gehäuse | optional | Karton, Holz oder 3D-Druck | Schutz und Präsentation |
- Den ESP32 vor dem Projekttag mindestens einmal erfolgreich programmieren.
- Die Arduino IDE auf allen benötigten Geräten installieren.
- ESP32-Boardpaket in der Arduino IDE einrichten.
- Den richtigen USB-Treiber prüfen.
- Mehrere USB-Kabel testen, weil viele Kabel nur Ladekabel sind.
- WLAN-Verbindung mit zwei Smartphones vorher testen.
- Prüfen, ob die Smartphones ein WLAN ohne Internet akzeptieren.
- Den Hinweis Kein Internet erklären, da er bei dieser Lösung normal ist.
- Einen funktionierenden Grundcode bereithalten.
- Mindestens ein Beispielquiz vorbereiten.
- Ersatz-ESP32 oder Ersatzkabel bereithalten.
- Gruppenrollen festlegen.
- Zeit für technische Probleme einplanen.
- Datenschutz beachten: Es müssen keine echten Namen verwendet werden.
- Empfehlenswert sind neutrale Namen wie Team Rot und Team Blau.
- Vorher entscheiden, ob Schüler:innen eigene Quizfragen schreiben oder vorgegebene Quizsets bearbeiten.
- Vorher entscheiden, ob nur die Lehrkraft oder auch Spieler:innen das Quiz auswählen dürfen.
- Phase 1: ESP32 startet ein WLAN.
- Phase 2: Smartphone öffnet eine einfache Webseite.
- Phase 3: Eine Frage mit vier Antworten wird angezeigt.
- Phase 4: Zwei Spieler:innen werden unterschieden.
- Phase 5: Punktestand wird gespeichert.
- Phase 6: 10-Sekunden-Timer wird eingebaut.
- Phase 7: Schnellste richtige Antwort gewinnt.
- Phase 8: 10 Fragen werden nacheinander gespielt.
- Phase 9: Fach, Schwierigkeit und Quiz werden auswählbar.
- Phase 10: Neue Quizsets werden ergänzt.
- Der ESP32 lädt die aktuelle Frage.
- Der ESP32 speichert die Startzeit.
- Beide Smartphones holen denselben Spielstand vom ESP32.
- Beide Smartphones zeigen dieselbe Frage und dieselben vier Antworten.
- Der Countdown startet bei 10 Sekunden.
- Spieler:innen tippen auf eine Antwort.
- Das Smartphone sendet Antwort, Spieler-ID und Frage-ID an den ESP32.
- Der ESP32 prüft:
- Ist die Frage noch aktiv?
- Ist die Antwort innerhalb der 10 Sekunden eingegangen?
- Ist die Antwort richtig?
- Gab es bereits eine richtige Antwort?
- Wenn die Antwort richtig und am schnellsten ist, bekommt diese Person den Punkt.
- Danach wird die Frage geschlossen.
- Beide Smartphones zeigen das Ergebnis.
- Nach kurzer Anzeige startet die nächste Frage.
- Die Zeitmessung muss auf dem ESP32 stattfinden.
- Die Smartphones dürfen nicht selbst über Punkte entscheiden.
- Entscheidend ist, welche gültige Antwort zuerst beim ESP32 ankommt.
- Ganz exakt gleichzeitig ist bei WLAN technisch nie garantiert.
- Für ein Schulprojekt mit zwei Geräten ist diese Lösung aber fair genug.
- Wichtig ist, dass beide Smartphones dieselbe Frage-ID verwenden.
- Alte Antworten zu früheren Fragen müssen ignoriert werden.
<syntaxhighlight lang="cpp"> const int QUESTIONS_PER_GAME = 10; const int ANSWERS_PER_QUESTION = 4; const unsigned long QUESTION_TIME = 10000;
struct Question {
const char* question; const char* answers[ANSWERS_PER_QUESTION]; int correct;
};
struct Quiz {
const char* subject; const char* difficulty; const char* title; Question questions[QUESTIONS_PER_GAME];
}; </syntaxhighlight>
- QUESTIONS_PER_GAME legt fest, dass ein Spiel genau 10 Fragen hat.
- ANSWERS_PER_QUESTION legt fest, dass jede Frage genau 4 Antwortmöglichkeiten hat.
- QUESTION_TIME legt fest, dass jede Frage 10 Sekunden dauert.
- Question beschreibt eine einzelne Frage.
- Quiz beschreibt ein vollständiges Quiz.
- Die richtige Antwort wird als Zahl gespeichert:
- 0 = Antwort A
- 1 = Antwort B
- 2 = Antwort C
- 3 = Antwort D
<syntaxhighlight lang="cpp"> Quiz multiplicationEasy = {
"Mathematik",
"leicht",
"Multiplikation bis 10",
{
{"Was ist 2 x 3?", {"4", "5", "6", "8"}, 2},
{"Was ist 4 x 5?", {"15", "20", "25", "30"}, 1},
{"Was ist 6 x 6?", {"30", "32", "36", "42"}, 2},
{"Was ist 7 x 8?", {"48", "54", "56", "64"}, 2},
{"Was ist 9 x 3?", {"21", "24", "27", "30"}, 2},
{"Was ist 5 x 5?", {"20", "25", "30", "35"}, 1},
{"Was ist 8 x 2?", {"12", "14", "16", "18"}, 2},
{"Was ist 10 x 7?", {"60", "65", "70", "75"}, 2},
{"Was ist 3 x 9?", {"24", "27", "30", "33"}, 1},
{"Was ist 4 x 4?", {"12", "14", "16", "18"}, 2}
}
}; </syntaxhighlight>
<syntaxhighlight lang="cpp"> Quiz capitalsEasy = {
"Geografie",
"leicht",
"Hauptstaedte Europas",
{
{"Was ist die Hauptstadt von Deutschland?", {"Paris", "Berlin", "Madrid", "Rom"}, 1},
{"Was ist die Hauptstadt von Frankreich?", {"Berlin", "Paris", "Rom", "Wien"}, 1},
{"Was ist die Hauptstadt von Italien?", {"Mailand", "Rom", "Neapel", "Turin"}, 1},
{"Was ist die Hauptstadt von Spanien?", {"Barcelona", "Madrid", "Sevilla", "Valencia"}, 1},
{"Was ist die Hauptstadt von Oesterreich?", {"Graz", "Linz", "Salzburg", "Wien"}, 3},
{"Was ist die Hauptstadt der Schweiz?", {"Zuerich", "Genf", "Basel", "Bern"}, 3},
{"Was ist die Hauptstadt von Tschechien?", {"Brno", "Prag", "Wien", "Berlin"}, 1},
{"Was ist die Hauptstadt von Norwegen?", {"Stockholm", "Oslo", "Helsinki", "Kopenhagen"}, 1},
{"Was ist die Hauptstadt von Griechenland?", {"Athen", "Rom", "Sofia", "Tirana"}, 0},
{"Was ist die Hauptstadt von Portugal?", {"Madrid", "Porto", "Lissabon", "Rom"}, 2}
}
}; </syntaxhighlight>
- Ein neues Quiz wird als neuer Quiz-Block ergänzt.
- Jedes Quiz muss genau 10 Fragen haben.
- Jede Frage muss genau 4 Antworten haben.
- Die richtige Antwort muss als Zahl von 0 bis 3 eingetragen werden.
- Danach wird das neue Quiz in die Quizliste eingetragen.
<syntaxhighlight lang="cpp"> Quiz quizzes[] = {
multiplicationEasy, capitalsEasy
};
int quizCount = sizeof(quizzes) / sizeof(quizzes[0]); </syntaxhighlight>
- Die Schüler:innen können KI nutzen, um neue Quizsets vorzubereiten.
- Die KI sollte eine klare Struktur bekommen.
- Die Ergebnisse müssen fachlich geprüft werden.
- Besonders bei Hauptstädten, historischen Daten oder Fachwissen muss die Lehrkraft oder die Gruppe kontrollieren, ob die Antworten stimmen.
Erstelle ein Arduino-C++-Quizset für einen ESP32-Quizcode. Das Quiz soll genau 10 Fragen enthalten. Jede Frage soll genau 4 Antwortmöglichkeiten haben. Die richtige Antwort soll als Index von 0 bis 3 angegeben werden. Fach: Mathematik. Schwierigkeitsgrad: leicht. Titel: Multiplikation bis 10. Formatiere das Ergebnis exakt nach dieser Struktur:
Quiz quizName = {
"Fach",
"Schwierigkeitsgrad",
"Titel",
{
{"Frage?", {"Antwort A", "Antwort B", "Antwort C", "Antwort D"}, richtigeAntwort}
}
};
- Der ESP32 liefert eine HTML-Seite aus.
- Die Seite enthält HTML für Struktur.
- Die Seite enthält CSS für Gestaltung.
- Die Seite enthält JavaScript für automatische Aktualisierung.
- Die Seite fragt regelmäßig den Spielstatus beim ESP32 ab.
- Der ESP32 stellt dafür einfache Adressen bereit:
- / für die Startseite.
- /status für den aktuellen Spielstand.
- /answer für eingehende Antworten.
- /select für die Auswahl von Fach, Schwierigkeit und Quiz.
- /start zum Starten eines Spiels.
- /reset für ein neues Spiel.
- Die Smartphones brauchen keine Installation.
- Der Browser reicht.
- Die Technik ist für Schüler:innen verständlicher.
- Fehler lassen sich leichter finden.
- Der Code bleibt überschaubar.
- Für zwei Spieler:innen ist diese Lösung ausreichend schnell.
- Später kann man die Statusabfrage durch WebSockets ersetzen.
- Große Buttons.
- Klare Schrift.
- Wenige Elemente.
- Gut sichtbarer Countdown.
- Punktestand oben.
- Frage in der Mitte.
- Vier Antwortmöglichkeiten darunter.
- Farbrückmeldung nach Antwort:
- Grün = richtige schnellste Antwort.
- Rot = falsch.
- Gelb = Zeit abgelaufen oder zu langsam.
- Blau = nächste Frage startet.
- Arduino IDE installieren.
- ESP32-Boardpaket installieren.
- ESP32 per USB anschließen.
- Richtiges Board auswählen.
- Richtigen Port auswählen.
- Testprogramm hochladen.
- Seriellen Monitor öffnen.
- Prüfen, ob der ESP32 reagiert.
- ESP32 soll ein WLAN mit dem Namen Quiz-Spiel erstellen.
- Smartphone verbindet sich mit Quiz-Spiel.
- Browser öffnet http://192.168.4.1.
- Eine einfache Testseite erscheint.
- Erst wenn das funktioniert, wird das Quiz ergänzt.
- Eine Frage wird im Code gespeichert.
- Vier Antworten werden angezeigt.
- Ein Klick auf eine Antwort wird an den ESP32 gesendet.
- ESP32 meldet richtig oder falsch zurück.
- Spieler:in 1 meldet sich als Spieler 1 an.
- Spieler:in 2 meldet sich als Spieler 2 an.
- Der ESP32 speichert zwei Punktestände.
- Beide Smartphones sehen denselben Spielstand.
- Beim Start jeder Frage wird die Startzeit gespeichert.
- Antworten sind nur 10 Sekunden gültig.
- Nach 10 Sekunden wird die Frage geschlossen.
- Die nächste Frage startet automatisch oder nach kurzer Ergebnisanzeige.
- Der ESP32 prüft jede Antwort sofort.
- Die erste richtige Antwort gewinnt.
- Danach wird die Frage geschlossen.
- Spätere Antworten werden ignoriert.
- Beide Smartphones erhalten dieselbe Rückmeldung.
- Das Quiz erhält genau 10 Fragen.
- Nach jeder Frage wird die Fragenummer erhöht.
- Nach Frage 10 endet das Spiel.
- Endstand und Sieger:in werden angezeigt.
- Fachauswahl anzeigen.
- Schwierigkeitsauswahl anzeigen.
- Quiztitel anzeigen.
- Ausgewähltes Quiz speichern.
- Spiel mit diesem Quiz starten.
- Vorhandenes Quiz kopieren.
- Fach ändern.
- Schwierigkeitsgrad ändern.
- Titel ändern.
- 10 neue Fragen eintragen.
- Jeweils 4 Antworten eintragen.
- Richtige Antwort als 0, 1, 2 oder 3 eintragen.
- Quiz in die Quizliste aufnehmen.
- Spiel testen.
- Erklären, was ein ESP32 ist.
- Erklären, warum der ESP32 ein eigenes WLAN erstellt.
- Zeigen, wie die Smartphones verbunden werden.
- Quiz live spielen.
- Code-Struktur kurz erklären.
- Eigene Erweiterungen vorstellen.
- Schwierigkeiten und Lösungen benennen.
- Anfänger:innen ändern nur Fragen und Antworten.
- Fortgeschrittene ändern Farben, Titel und Layout.
- Stärkere Schüler:innen ergänzen neue Quizsets.
- Sehr starke Schüler:innen programmieren Auswahlmenüs.
- Expert:innen ergänzen Highscore, Admin-Seite oder QR-Code.
- Kreative Schüler:innen bauen Gehäuse, Logo oder Präsentationsmaterial.
- QR-Code zur Spielseite.
- Buzzer am ESP32.
- LEDs für richtige und falsche Antwort.
- Highscore-Liste.
- Zufällige Reihenfolge der Fragen.
- Zufällige Reihenfolge der Antworten.
- Joker-Funktion.
- Teammodus.
- Admin-Seite für die Lehrkraft.
- Speicherung eigener Quizsets im Flash-Speicher.
- SD-Karten-Erweiterung für viele Quizdateien.
- Bluetooth-Login.
- USB-C-Login über Smartphone.
- App-Entwicklung.
- Datenbank auf externem Server.
- Internetpflicht.
- Benutzerkonten mit echten Namen.
- Komplexes Live-Streaming.
- Zu viele Spieler:innen gleichzeitig.
- Zu viele Animationen auf der Webseite.
| Projekttag | Schwerpunkt | Ergebnis |
|---|---|---|
| Tag 1 | ESP32 einrichten, WLAN starten, Smartphone-Webseite öffnen | Technische Grundverbindung funktioniert |
| Tag 2 | Quizlogik, zwei Spieler:innen, Timer, Punkte | Spielbare Grundversion funktioniert |
| Tag 3 | Quizsets, Design, Tests, Präsentation | Präsentierbares fertiges Quizspiel |
- Das ESP32-WLAN funktioniert.
- Zwei Smartphones können sich verbinden.
- Die Webseite ist auf beiden Smartphones erreichbar.
- Beide Spieler:innen sehen dieselbe Frage.
- Jede Frage hat 4 Antwortmöglichkeiten.
- Der 10-Sekunden-Timer funktioniert.
- Die schnellste richtige Antwort bekommt den Punkt.
- Falsche oder verspätete Antworten geben keinen Punkt.
- Ein Spiel besteht aus genau 10 Fragen.
- Der Endstand wird korrekt angezeigt.
- Neue Quizsets können nachvollziehbar ergänzt werden.
- Die Gruppe kann ihr Projekt verständlich erklären.
- Die beste Variante ist eindeutig die WLAN-Lösung mit ESP32.
- Sie ist technisch realistisch.
- Sie ist kostengünstig.
- Sie braucht keine App.
- Sie funktioniert ohne Internet.
- Sie ist für Schüler:innen nachvollziehbar.
- Sie ist mit KI gut erweiterbar.
- Sie erlaubt Fachauswahl, Schwierigkeitsgrad und verschiedene Quizsets.
- Sie ermöglicht einen echten Schnelligkeitsmodus.
- Sie bleibt trotzdem einfach genug für ein schulisches Arduino-Projekt.