- C++ 56.5%
- Python 43.5%
| SchalterPuzzleMQTT | ||
| SchalterPuzzleSeriell | ||
| SeriellTest | ||
| .gitignore | ||
| ESP32 Kommunikation.docx | ||
| ESP32 Kommunikation.pdf | ||
| MQTT.pdf | ||
| MQTT.pptx | ||
| README.md | ||
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
- 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.