ESP32

UART und RS-232: Seriell ohne Takt

Jede Ausgabe im seriellen Monitor, jedes GPS-Modul und viele Funkmodule sprechen mit dem Mikrocontroller über UART – ohne Taktleitung, nur mit einer vereinbarten Baudrate. Du lernst den UART-Rahmen kennen, berechnest Übertragungsdauer und Baudratenfehler und unterscheidest TTL-UART, RS-232 und RS-485. Du schließt UART-Module an Arduino, ESP8266 und ESP32 an, ordnest die Anschlüsse von PC und Industrie-PC nach Signalart, lernst die Eigenschaften von USB kennen und verbindest zwei RS-232-Geräte per Nullmodemkabel.

Übungsaufgaben zu SPI: Sensoren mit eigener Auswahlleitung anbinden

Eine Übungsaufgabe zu SPI am Mikrocontroller: Du begründest, warum drei gleiche Sensoren nicht an einen I²C-Bus passen, verdrahtest sie mit eigenen Auswahlleitungen am SPI-Bus eines ESP32, deutest den SPI-Modus, bildest Steuerbytes aus dem Datenblatt, berechnest Zugriffsdauer und Busbelegung und planst den Anschluss eines weiteren Sensors über I²C. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

RS-485: Lange Leitungen, viele Teilnehmer

RS-485 bringt UART-Daten über verdrillte Aderpaare bis 1200 m weit und verbindet dabei bis zu 32 Teilnehmer an einer Leitung. Du lernst, warum die differenzielle Übertragung so störfest ist, wie ein RS-485-Bus mit Linientopologie, Abschluss- und Failsafe-Widerständen aufgebaut wird und wie Modbus RTU mit Adresse, Funktionscode und CRC darauf Daten austauscht. Du schließt einen Transceiver an Arduino, ESP8266 und ESP32 an, schaltest die Senderichtung um und prüfst mit einer Checkliste vorher Datenblatt und Bibliotheksdokumentation.

Zeichenketten auf dem Mikrocontroller: char-Arrays, String-Klasse, F()-Makro und serielle Befehle

Ein Mikrocontroller soll Messwerte als lesbare Zeile ausgeben und Befehle wie „LED AN“ oder „BLINK 500“ aus dem seriellen Monitor verstehen. Dafür braucht er Zeichenketten. Dieser Artikel zeigt die beiden Wege in C++: das char-Array mit Nullterminator und die Arduino-Klasse String, mit ihren wichtigsten Funktionen, Vor- und Nachteilen. Dazu kommen das F()-Makro gegen knappen RAM auf dem Uno, formatierte Messwertzeilen mit snprintf() und dtostrf() und das Zerlegen von Eingaben in Befehl, Zahl und CSV-Felder. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Sensoren für das Raumklima: BME280/BMP280 per I²C und SPI, CO₂-Sensoren MH-Z19 und MH-Z14A per UART, PWM und Analogausgang

Zwei Sensorfamilien tauchen in fast jedem Raumklima-Projekt auf: die Bosch-Sensoren BME280 und BMP280 für Temperatur, Luftdruck und (nur BME280) Luftfeuchte und die NDIR-CO₂-Sensoren MH-Z19 und MH-Z14A von Winsen. Der Artikel zeigt, wie Du den Sensor auf dem Breakout erkennst, die passende Bibliothek installierst, den BME280 per I²C und per SPI anschließt und den CO₂-Gehalt per UART, PWM und Analogausgang ausliest – mit vollständigen Programmen für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno und den typischen Fehlerquellen.

Analoge Ausgabe mit PWM: LED dimmen, Tastgrad und Frequenz, Lüfter und Lauflicht mit Überblendung

Ein digitaler Pin kennt nur an und aus – trotzdem kann er eine LED dimmen und einen Lüfter langsamer drehen lassen. Dieser Artikel erklärt die Pulsweitenmodulation mit Tastgrad, Periodendauer und Frequenz, zeigt, wie Du diese Größen aus einem Oszillogramm abliest, und dimmt eine LED mit analogWrite() und einem Poti. Danach passt Du die Helligkeit mit einer Gammakorrektur an das Auge an, wählst auf den ESP32-Boards mit ledcAttach() Frequenz und Auflösung, steuerst einen Lüfter über einen MOSFET, baust ein Lauflicht mit Überblendung und grenzt PWM von einem echten Analogausgang ab.

Eigene Funktionen auf dem Mikrocontroller: Parameter, Rückgabewert, Gültigkeitsbereich und Aufteilen in .h/.cpp

Wenn derselbe Code an drei Stellen steht, muss jede Änderung dreimal gemacht werden. Eigene Funktionen geben einer Teilaufgabe einen Namen, bekommen Werte über Parameter und liefern ein Ergebnis zurück. Dieser Artikel zeigt, wie Du Funktionen mit Parametern und Rückgabewert schreibst, Wert- und Referenzparameter unterscheidest, die Gültigkeit lokaler, globaler und static-Variablen einordnest, eine Ampel aus einem Programmentwurf in Funktionen gliederst, Prototypen verstehst und ein Programm auf .h- und .cpp-Dateien aufteilst. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Bibliotheken auf dem Mikrocontroller einbinden: Bibliotheksverwalter, ZIP, Beispiele, Plattformunterschiede und eigene Bibliothek

Für fast jeden Sensor, jede Anzeige und jedes Protokoll hat schon jemand Code geschrieben und als Bibliothek veröffentlicht. Dieser Artikel zeigt, wie Du Bibliotheken über den Bibliotheksverwalter, als ZIP-Datei und aus einem Git-Repository installierst, #include <…> und #include „…“ unterscheidest, Fehlermeldungen wie „No such file or directory“ deutest, Beispielprogramme an Dein Board anpasst, Plattformunterschiede, Versionen, Lizenz und Pflegezustand beurteilst und aus einem eigenen Modul eine Bibliothek machst. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Arrays auf dem Mikrocontroller: Pinlisten, Lauflicht, Muster und Messwertpuffer

Sobald ein Programm vier LEDs, zehn Messwerte oder eine Folge von Tönen verwalten soll, werden einzelne Variablen unhandlich. Arrays fassen gleichartige Werte unter einem Namen zusammen, und eine Schleife erledigt mit dem Index, was sonst viele fast gleiche Zeilen bräuchten. Dieser Artikel zeigt, wie Du Arrays deklarierst, mit sizeof die Anzahl der Elemente bestimmst, Indexfehler erkennst, ein Lauflicht über eine Pinliste steuerst, Muster in zweidimensionalen Arrays ablegst und Messwerte in einem Ringpuffer glättest. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Anzeigen am Mikrocontroller: OLED-Display SSD1306 per I²C und LED-Matrix MAX7219 mit eigenem Treiber

Zwei Anzeigen tauchen in vielen Mikrocontroller-Projekten auf: kleine OLED-Displays mit dem Controller SSD1306 und 8×8-LED-Matrizen mit dem Treiber-IC MAX7219. Das OLED schließt Du per I²C an und steuerst es mit einer Bibliothek; Texte, Zahlen, Umlaute und ein Balken für einen Messwert sind schnell gemacht. Die LED-Matrix steuerst Du ohne Bibliothek: Aus dem Datenblatt entsteht Schritt für Schritt ein eigener Treiber, erst mit selbst erzeugten Taktsignalen (Bitbanging), dann mit der SPI-Hardware. Alle Programme gibt es für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Analoge Eingänge am Mikrocontroller: Potentiometer, analogRead, Auflösung und Referenz, Spannungsteiler, Analogtastatur

Viele Sensoren liefern keine Einsen und Nullen, sondern eine Spannung. Dieser Artikel zeigt, wie Du ein Potentiometer an einen Analogeingang anschließt, mit analogRead() Rohwerte liest und in Volt umrechnest, warum die Boards unterschiedliche Auflösungen und Messbereiche haben, wie Du Messwerte mit map() skalierst und glättest, wie ein Spannungsteiler eine 36-V-Akkuspannung messbar macht und wie drei Taster an einem einzigen Analogeingang hängen. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

ESP vernetzt: MQTT-Client und Logging über WLAN für ESP32-C6, ESP32 und ESP8266

Mit der Bibliothek PubSubClient schickt ein ESP Messwerte als JSON an einen MQTT-Broker und nimmt Befehle entgegen, die eine LED schalten. Die Verbindung baut sich nach einem Abbruch selbst wieder auf, ohne die loop() zu blockieren, und ein Last Will meldet, wenn das Gerät ausfällt. Im zweiten Teil holt sich der ESP die Uhrzeit von einem Zeitserver, versieht seine Logmeldungen mit Datum und Uhrzeit und zeigt die letzten Meldungen auf einer eigenen Webseite an – jeweils mit vollständigen Programmen für ESP32-C6, ESP32 und ESP8266.

ESP vernetzt: WLAN-Verbindung, Over-the-Air-Update und Webserver für ESP32-C6, ESP32 und ESP8266

Ein ESP-Board ist mit wenigen Zeilen im WLAN. Der Artikel zeigt, wie Du die Zugangsdaten in einer eigenen Datei secrets.h aus dem Code heraushältst, mit WiFiMulti eine stabile Verbindung aufbaust, die sich nach einem Abbruch selbst wiederherstellt, neue Firmware per WLAN aufspielst (OTA-Update, nur nach Tastendruck) und einen kleinen Webserver programmierst, der eine LED schaltet und einen Taster anzeigt – jeweils mit vollständigen Programmen für ESP32-C6, ESP32 und ESP8266.

Schaltungen zeichnen mit Fritzing: Steckbrettbilder, Bauteile und die Bibliothek der Reihe

Zum Entwerfen und Dokumentieren von Steckbrettaufbauten, Verdrahtungsplänen und Schaltplänen für Mikrocontroller-Projekte eignet sich das Open-Source-Programm Fritzing. Hier steht, wie man fehlende Bauteile findet und importiert, welche Bauteile die Steckbrettbilder dieser Reihe nutzen (Boards, Displays, Sensoren, eigene Bauteile) und wie man die Fritzing-Dateien der Artikel öffnet und weiterbearbeitet.

Pinbelegung der Mikrocontroller-Boards: ESP32-C6, ESP32, NodeMCU und Arduino Uno

Nicht alle Pins eines Mikrocontroller-Boards kann man frei nutzen: Einige steuern den Startvorgang (Strapping-Pins), andere sind mit Speicher, USB, LED oder Tastern verbunden. Hier stehen die Pinouts der Boards ESP32-C6 DevKit N8-M, ESP32 Dev Kit V1, V2 und C V4, WeMos-Board mit OLED, NodeMCU (ESP8266) und Arduino Uno mit den empfohlenen Pins, dazu für jedes Board die Liste der Ein- und Ausgabeelemente, mit der alle Beispiele der Reihe arbeiten, und ein Testprogramm für die Standardbelegung.

Erste Schritte mit dem Mikrocontroller: Entwicklungsumgebung, Board, Blink und Taster

Kein Mikrocontroller-Projekt ohne blinkende LED. Hier richtest Du die Arduino-IDE mit Board-Paket, Treiber und Port ein, lernst den Aufbau eines Programms mit setup() und loop() kennen, lässt eine LED blinken und liest einen Taster ein – für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno. Zum Schluss geht es um die typischen Fehler beim Hochladen.

Mikrocontroller-Grundlagen: Lernpfad durch die Artikelreihe mit ESP32-C6, ESP32, NodeMCU und Arduino Uno

Dieser Überblick zeigt den Weg durch die Artikelreihe über Mikrocontroller-Grundlagen: zuerst die Grundlagenartikel mit der Arduino-API und Board-Tabs für ESP32-C6, ESP32, NodeMCU und Arduino Uno, danach die Vertiefung mit Registern und Datenblatt und zuletzt die Peripherie- und Vernetzungsartikel. Tabellen nennen zu jedem Artikel Lesezeit und Übungsaufgaben.

SPI: Schnell, einfach, mit eigener Leitung für jedes Gerät

SPI überträgt Daten zwischen Mikrocontroller und Peripheriegeräten mit Takten im Megahertz-Bereich und gleichzeitig in beide Richtungen. Du lernst die Kennzeichen der Schnittstelle kennen: vier Leitungen mit Gegentaktausgängen, eine eigene Auswahlleitung je Gerät, kein festes Protokoll und vier SPI-Modi. Du liest ein SPI-Impulsdiagramm, unterscheidest sternförmige Auswahlleitungen und Ketten und schließt Bausteine an Arduino, ESP8266 und ESP32 an – mit Checkliste für Datenblatt und Bibliothek sowie einer Entscheidungshilfe zwischen SPI und I²C.

I²C: Ein Bus, zwei Leitungen, viele Sensoren

I²C verbindet einen Mikrocontroller über nur zwei Leitungen mit vielen Sensoren, Displays und Speicherbausteinen. Du lernst die Kennzeichen des Busses kennen: Open-Drain-Leitungen mit Pull-up-Widerständen, Adressen statt Auswahlleitungen, Bestätigung jedes Bytes und Taktraten von 100 kHz bis 1 MHz. Du liest ein I²C-Telegramm, bemisst Pull-up-Widerstände und schließt Bausteine an Arduino, ESP8266 und ESP32 an – mit einer Checkliste, was Du vorher im Datenblatt und in der Bibliotheksdokumentation prüfen solltest.

Planungsphase für ein Microcontroller-Projekt

Sind Lastenheft und Pflichtenheft freigegeben, wird die Umsetzung eines Microcontroller-Projekts in den drei Dimensionen des magischen Dreiecks geplant: Qualität (Hardware und Software), Kosten und Zeit. Am durchgehenden Beispiel einer CO2-Lüftungsampel mit ESP32 zeigt der Artikel, wie Messprinzip und Bauteile ausgewählt, Stückliste und Pinbelegung erstellt, der Programmablauf und erste Testfälle entworfen sowie Kostenaufstellung und Zeitplan mit Meilensteinen aufgestellt werden.

Pinbelegung der Mikrocontroller-Boards: ESP32-C6, ESP32, NodeMCU und Arduino Uno

Nicht alle Pins eines Mikrocontroller-Boards kann man frei nutzen: Einige steuern den Startvorgang (Strapping-Pins), andere sind mit Speicher, USB, LED oder Tastern verbunden. Hier stehen die Pinouts der Boards ESP32-C6 DevKit N8-M, ESP32 Dev Kit V1, V2 und C V4, WeMos-Board mit OLED, NodeMCU (ESP8266) und Arduino Uno mit den empfohlenen Pins, dazu für jedes Board die Liste der Ein- und Ausgabeelemente, mit der alle Beispiele der Reihe arbeiten, und ein Testprogramm für die Standardbelegung.

Debugging per Logging und für ESPs mit WLAN

Bei einfachen Projekten ist das Logging über die serielle Verbindung ein Segen beim Debugging: über die USB-Verbindung können am seriellen Monitor der Arduino-IDE Werte ausgegeben werden. Was aber tun, wenn die serielle Verbindung nicht besteht? Wie kann ich Logging am ESP komfortabel und einfach umsetzen? Ein Vorschlag.

Digitale Eingänge am Mikrocontroller: Taster, Logikpegel, Pull-up/Pull-down und Entprellen

Ein Taster am Eingang braucht mehr als zwei Drähte: Hier erfährst Du, ab welcher Spannung ein Eingang HIGH liest, warum ein offener Eingang einen Pull-up- oder Pull-down-Widerstand braucht, wie Du Pegel und Ströme an Taster-Widerstands-Netzwerken berechnest, wann ein Öffner sicherer ist als ein Schließer, wie Du viele Taster an wenige Pins bringst und wie Du prellende Kontakte in Hardware und Software entprellst. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

ESP in mehrere WLAN integrieren und Zugangsdaten sichern

Ein ESP (32/8266) ist mit wenigen Zeilen Code ins heimische WLAN integriert. Der hier verwendete Weg stellt sicher, dass aus vielen unterschiedlichen WLANs das geeignetste ausgesucht wird. Außerdem wird wiederkehrend überprüft, ob die WLAN-Verbindung noch besteht, diese ggf. neu aufgebaut und – wenn der Aufbau zu häufig scheitert – der ESP neu gestartet. Ausserdem wird ein Weg vorgestellt, die WLAN-Zugangsdaten vor der unbeabsichtigten Veröffentlichung in Versionsverwaltungen und Codesharing zu schützen.