No description
  • C++ 56.5%
  • Python 43.5%
Find a file
2026-10-01 14:49:46 +02:00
SchalterPuzzleMQTT Variable globalisiert 2026-10-01 14:49:46 +02:00
SchalterPuzzleSeriell Add header comments for clarity in multiple files 2025-09-16 10:06:45 +02:00
SeriellTest umbenennung 2026-09-29 17:40:01 +02:00
.gitignore Update .gitignore to include temporary Office files 2025-09-16 10:16:38 +02:00
ESP32 Kommunikation.docx Aufgaben anpassung 2026-09-29 17:39:44 +02:00
ESP32 Kommunikation.pdf PDF erstellt 2026-09-29 17:53:41 +02:00
MQTT.pdf PDF erstellt 2026-09-29 17:53:41 +02:00
MQTT.pptx Farben angepasst für bessere lesbarkeit 2026-09-29 17:53:56 +02:00
README.md aktualisiert zu neuer Aufgabenstellung 2026-10-01 07:34:46 +02:00

Grundlagen ESP32

Der ESP32 ist ein leistungsstarker Mikrocontroller, der besonders in der Ausbildung, im Hobbybereich und für Prototypen eingesetzt wird.

Er bietet zahlreiche Funktionen:

  • Bluetooth und WLAN integriert
  • Digitale und analoge Ein- und Ausgänge
  • Unterstützung für verschiedene Kommunikationsprotokolle: UART, SPI, I²C, PWM, ADC
  • Hohe Rechenleistung durch Dual-Core-Prozessor
  1. Programmierung des ESP32

Hardware: Schalter und Taster

Der ESP32 der Schule verfügt über fünf Schalter und drei Taster, die an die GPIOs 25 bis 36 angeschlossen sind. Die entsprechenden Pins sind auf der Platine aufgedruckt. GPIOs (General Purpose Input/Output) können individuell als Eingang (z. B. für Taster oder Sensoren) oder Ausgang (z. B. für LEDs) verwendet werden. Die Konfiguration erfolgt im setup()-Bereich des Programms.

Installieren Sie folgende Bibliotheken/Boards:

„FVS“

„PubSubClient“

Boardverwalter:
„esp32“ von espressif

Wichtige Befehle:

#define PIN NAME // definiert einen Stellvertreter für einen Wert (Pin)

pinMode(PIN, FUNCTION); // Festlegen der Funktion eines GPIOs (INPUT oder OUTPUT)

digitalRead(PIN); // Einlesen eines digitalen Eingangs

digitalWrite(PIN, VALUE); // Schreiben eines digitalen Ausgangs (HIGH oder LOW)

portMode(PORT, FUNCTION); // Festleger der Funktion auf alle GPIOs des Ports

portWrite(PORT,VALUE); // Schreiben aller GPIOs eines Ports (0..255)

TFT-Display

Das TFT-Display dient zur grafischen Ausgabe von Informationen.

Es wird über SPI angeschlossen und kann Text, Zahlen und Statusmeldungen anzeigen.

Tft.begin(); // Initialisierung des Displays (im Setup)

Tft.print("Text"); // Ausgabe von Text

Tft.println("Text"); // Ausgabe mit Zeilenumbruch

Tft.setCursor(x, y); // Setzen des Cursors an Position x/y

Tft.clearDisplay(); // Löschen des Displays

Tft.setTextSize(4); // Schriftgröße einstellen

Übungen

Schalter zu LEDs

Aufgabe: Schreiben Sie ein Programm für den ESP32, das die Zustände mehrerer Schalter einliest und diese direkt auf entsprechende LEDs ausgibt.

Hinweis: Jeder Schalter steuert eine LED. Achten Sie auf korrekte Pin-Konfiguration.

Textausgabe auf TFT-Display

Aufgabe: Geben Sie Ihren Namen zentriert auf dem angeschlossenen TFT-Display aus.

Hinweis: Nutzen Sie die Funktionen der verwendeten Display-Bibliothek zur Textpositionierung.

Bitmuster-Anzeige

Aufgabe: Zeigen Sie die aktuellen Schalterzustände als Bitmuster (z. B. 1110 1101) auf dem TFT-Display an.

Hinweis: Achten Sie auf die Reihenfolge der Schalter zu dem Bitmuster.

Serielle Schnittstelle

Die serielle Schnittstelle ist eine Methode zur Datenübertragung, bei der Informationen Bit für Bit nacheinander über eine Leitung gesendet werden. Sie ist besonders platzsparend, einfach zu implementieren und wird häufig bei Mikrocontrollern verwendet.

Vergleich zu Parallel

Merkmal Serielle Schnittstelle Parallele Schnittstelle
Datenübertragung Bit für Bit über eine Leitung min. zwei Drähte Mehrere Bits gleichzeitig über mehrere Drähte
Geschwindigkeit Langsamer Sehr schnell
Störanfälligkeit Wenig Störanfällig Je länger die Leitung desto anfälliger
Kosten Günstig Teuer

Serielle Kommunikation ist ideal für einfache, robuste und kostengünstige Datenübertragung – besonders bei Mikrocontrollern. Parallele Kommunikation wird eher in Hochgeschwindigkeits- oder Kurzstreckenanwendungen eingesetzt.

Baudrate

Die Baudrate gibt an, wie viele Bits pro Sekunde übertragen werden.

Beispiel: 9600 Baud bedeutet, dass 9600 Bits pro Sekunde gesendet werden.

Hinweis: Sender und Empfänger müssen immer dieselbe Baudrate verwenden, sonst kommt es zu Fehlinterpretationen der Daten.

Typische Baudraten:

    • 9600 (Standard für viele Mikrocontroller)
    • 115200 (schnellere Kommunikation)
    • 250000 (für anspruchsvollere Anwendungen)

Beispiele Serielle/Parallele Schnittstellen

Serielle Schnittstellen:

    • UART (Universal Asynchronous Receiver Transmitter) – z. B. Arduino ↔ PC
    • USB (Universal Serial Bus)
    • SPI (Serial Peripheral Interface)
    • I²C (Inter-Integrated Circuit)

Parallele Schnittstellen:

    • GPIO-Bus (z. B. 8 Datenleitungen gleichzeitig)
    • Speicherbusse in CPUs (z. B. DDR-RAM 64 Parallele Leitungen)
    • PCIe in Multi-Lane (z. B. x4, x8, x16)

Achtung: Bei Anwendungen muss meist die Adresse der USB Schnittstelle angegeben werden. Diese kann bei ArduinoIDE unter Boardauswahl und Schnittstelle entnommen werden. Es kann immer nur eine Anwendung auf einen Port zugreifen.

Unter Linux z.B.: /dev/ttyUSB0

Unter MacOS z.B.: /dev/cu.usbserial-0001

Seriell ESP32 -> ArduinoIDE

Hinweis:

Wenn die serielle Schnittstelle verwendet wird, können die GPIOs 1 (TX) und 3 (RX) nicht für andere Zwecke genutzt werden, da sie für die Kommunikation reserviert sind.

Zusätzliche Funktionen/Methoden:

Serial.begin(BAUDRATE); // Initialisierung der seriellen Schnittstelle

Serial.print("Text"); // Senden von Daten

Serial.println("Text"); // Senden mit Zeilenumbruch

Serial.readStringUntil('\n'); // Empfangen von Daten bis zum Zeilenumbruch

Aufgabe Serielle Ausgabe

Erweitern Sie Ihr Programm so, dass die Schalterzustände zusätzlich über die serielle Schnittstelle ausgegeben werden.

Hinweis: Verwenden Sie den seriellen Monitor der ArduinoIDE zur Anzeige. Formatieren Sie die Ausgabe leserlich (z.B. Schalter: 1010).

Seriell Python <-> uController

Laden Sie das Programm „SerialTestESP“ auf Ihren ESP32. Starten Sie das Python Programm SerialTest.py.

Ändern Sie den Port und stimmen Sie die Baudrate mit dem Arduino Programm ab.

Achten Sie darauf den seriellen Monitor der ArduinoIDE zu deaktivieren.

Dokumentieren Sie den Vorgang des Programms und beantworten Sie folgende Frage:

ESP32

In welchem Dateiformat werden die Daten gesendet?

Wie wird das Ende der Nachricht erkannt?

Python

Welche Funktion erfüllt folgende Zeile:
antwort = esp.readline().decode().strip()

🕹️ Schalter-Rätselspiel

Der ESP32 sendet den Status von fünf Schaltern über die serielle Schnittstelle an den PC. Der PC generiert ein zufälliges 5-Bit-Muster, das der Azubi mit den echten Schaltern nachbilden muss. Nach jedem Versuch wird die Anzahl der korrekt gesetzten Schalter zurückgemeldet. Das Bitmuster wird per Tastendruck vom ESP32 an den PC gesendet. Bei vollständiger Übereinstimmung erscheint eine Erfolgsmeldung auf dem Display.

Seriell

Analyse ESP32

Analysieren Sie das Programm vom ESP32 „SchalterPuzzleSeriell“.

    • Mit welchem Taster werden die Daten vom ESP32 gesendet?

Analyse Python

Analysieren Sie das Python Programm „SchalterPuzzleSeriell.py“.

Anwendung

Laden Sie das entsprechend Programm auf Ihren ESP32 und öffnen Sie das Python Programm. Achten Sie auf die richtigen Einstellungen. Finden Sie anhand des Quellcodes heraus, wie das Spiel funktioniert.

MQTT

Analyse ESP32

Aufgabe:

Analysieren Sie das Programm vom ESP32 „SchalterPuzzleSeriell“.

    • In welchem Variablentyp werden die Daten empfangen und in welchem verarbeitet?
    • Welche Adresse hat der MQTT-Server und welcher Port wird verwendet? Mit der rechten Maustaste kann die Quelle der Funktion/Methode angezeigt werden.
    • Was versteht man unter dem Begriff „Payload“?
    • In welchem Variablentyp werden die Daten empfangen und in welchem verarbeitet?
    • Wie funktioniert die Umwandlung der Schalterzustände, bis diese gesendet werden können?

Analyse Python

Aufgabe:

Analysieren Sie das Python Programm „SchalterPuzzleSeriell.py“.

    • Welche Adresse hat hier der MQTT-Server?
    • Welche Funktion hat die Variable „matches“
    • Welches topic müsste wie geändert werden, um die Daten von allen ESP32 der Klasse zu empfangen?
    • Untersuchen Sie die gesendeten Daten mit dem MQTT-Explorer und geben Sie an welche QoS-Stufe verwendet wird.

Anwendung

Laden Sie das entsprechend Programm auf Ihren ESP32 und öffnen Sie das Python Programm. Passen Sie die topics entsprechend Ihrem Namen an.

Spielen Sie Ihren Mitschülern einen Streich, indem Sie Daten an deren Python Programm senden.

Eventuell müssen Sie die Python-Bibliothek mit „python3 -m pip install paho-mqtt“ installieren.