Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Mikrocontroller
    • Arduino
    • ESP32 & Co.
    • Calliope Mini
    • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

ESP32 Touch mit MicroPython: Schalten & Steuern ohne Taster

Veröffentlicht am 6. Februar 20264. Februar 2026 von Stefan Draeger

Der ESP32 lässt sich nicht nur sehr komfortabel in der Arduino IDE mit C/C++ programmieren, sondern unterstützt ebenso MicroPython – eine moderne und leicht verständliche Programmiersprache, mit der sich sowohl kleine Experimente als auch größere Projekte schnell und übersichtlich umsetzen lassen.

Gerade die Hardware-Funktionen des ESP32 werden in MicroPython sehr gut unterstützt. Dazu zählen unter anderem GPIOs, ADCs, PWM-Ausgänge – und auch die kapazitiven Touch-Pins. Viele Abläufe, die in C/C++ etwas mehr Boilerplate erfordern, lassen sich in MicroPython mit deutlich weniger Code realisieren.

ESP32 Touch mit MicroPython: Schalten & Steuern ohne Taster
Dieses Video auf YouTube ansehen.

In diesem Beitrag knüpfen wir an die vorherigen Touch-Beispiele an und setzen diese konsequent in MicroPython um. Als Einstieg zeige ich dir zunächst, wie sich zwei LEDs per Touch umschalten lassen – ganz ohne mechanischen Taster. Dabei nutzen wir dieselbe Logik wie zuvor: Touch als Ereignis, Statusverwaltung im Code und ein Zeitfenster, um Mehrfachauslösungen zu vermeiden.

Das Beispiel ist bewusst einfach gehalten und eignet sich ideal, um ein Gefühl für Touch-Eingaben in MicroPython zu bekommen und diese anschließend auf eigene Projekte zu übertragen.

Inhaltsverzeichnis

  • MicroPython auf den ESP32 flashen
  • Aufbau der Schaltung
    • Benötigte Komponenten
    • Pinbelegung der Schaltung
  • MicroPython: LEDs per Touch umschalten
    • Erstes Beispiel: Touch-Pin in MicroPython auslesen
      • MicroPython: Touch-Wert auslesen
    • Quellcode – Touch als Schalter (Toggle) für zwei LEDs
  • Fazit
  • FAQ – Häufige Fragen zur ESP32 Touch-Steuerung mit MicroPython

MicroPython auf den ESP32 flashen

Bevor wir den ESP32 mit MicroPython programmieren können, muss zunächst die passende MicroPython-Firmware auf den Mikrocontroller geflasht werden. Wie dieser Schritt beim ESP32 im Detail durchgeführt wird, habe ich bereits in einem separaten Beitrag ausführlich beschrieben: MicroPython mit dem ESP32 – Einführung in den ESP32 D1 R32

Dort zeige ich Schritt für Schritt, wie die Firmware installiert wird und wie du den ESP32 anschließend per USB ansprechen kannst.

Solltest du später wieder zurück zur Arduino IDE wechseln wollen, ist das erfreulich unkompliziert. In folgendem Beitrag erkläre ich, wie du MicroPython mit nur einem Schritt entfernst und den ESP32 wieder ganz normal mit Arduino programmierst: ESP32: Zurück von MicroPython zur Arduino IDE – in nur einem Schritt

Damit kannst du jederzeit flexibel zwischen beiden Entwicklungsumgebungen wechseln.

Aufbau der Schaltung

Für dieses Beispiel bleibt der Hardware-Aufbau vollständig unverändert. Wir wechseln lediglich die Programmiersprache von C/C++ (Arduino IDE) zu MicroPython – die elektrischen Eigenschaften und Funktionen der GPIOs des ESP32 ändern sich dadurch nicht.

Touch-Pins, digitale Ausgänge für LEDs sowie analoge Eingänge verhalten sich hardwareseitig identisch, unabhängig davon, ob der ESP32 mit Arduino-Code oder mit MicroPython programmiert wird. Das bedeutet:
Wenn du die Schaltung bereits aus dem vorherigen Arduino-Beispiel aufgebaut hast, kannst du sie ohne Anpassungen weiterverwenden.

Touchpins am Wemos D1 R32
Touchpins am Wemos D1 R32
Touchpins am ESP32-WROOM-32D Mikrocontroller
Touchpins am ESP32-WROOM-32D Mikrocontroller

Gerade dieser Punkt macht MicroPython besonders attraktiv für Experimente: Die Hardware bleibt gleich, während sich Logik und Code sehr schnell anpassen oder erweitern lassen.

Benötigte Komponenten

Für den Aufbau der Schaltung verwende ich folgende Komponenten:

  • Wemos D1 R32*
  • Micro-USB Datenkabel*
  • zwei 5 mm LEDs* inkl. Vorwiderstand*
  • diverse Breadboardkabel*
  • ein 400-Pin Breadboard*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Es gibt ESP32-Module (z. B. ESP-WROOM-32D), die breiter als ein einzelnes 400-Pin Breadboard sind. Je nach Ausführung passen sie entweder gar nicht oder blockieren eine komplette Pinreihe.
In diesem Fall ist es sinnvoll, zwei Breadboards nebeneinander zu verwenden, um alle Pins weiterhin bequem erreichen zu können (siehe Grafik).

ESP-WROOM-32D auf 400 Pin Breadboard
ESP-WROOM-32D auf 400 Pin Breadboard

Pinbelegung der Schaltung

FunktionESP32 PinHinweis
Touch-EingangGPIO 4Touch-Pin T0
LED (blau)GPIO 18Digitaler Ausgang
LED (grün)GPIO 19Digitaler Ausgang
50 kOhm DrehpotentiometerGPIO35Analoger Eingang
GNDGNDGemeinsame Masse
Versorgung5 V / USBÜber Micro-USB
Schaltung - ESP32 mit Touchfunktion - wechselschalten von zwei LEDs
Schaltung – ESP32 mit Touchfunktion – wechselschalten von zwei LEDs

MicroPython: LEDs per Touch umschalten

In MicroPython wird der Touch-Pin über TouchPad(Pin(...)) angesprochen. Anders als bei einem Taster liefert der Pin keinen festen Zustand, sondern einen Messwert. Sobald dieser Wert unter einen Schwellwert fällt, interpretieren wir das als Touchevent.

Damit eine Berührung nicht mehrfach hintereinander erkannt wird, setzen wir – wie im Arduino-Beispiel – ein Zeitfenster (Pause). Erst wenn dieses abgelaufen ist, wird ein neuer Touch akzeptiert.

Erstes Beispiel: Touch-Pin in MicroPython auslesen

Bevor wir mit Schwellwerten, LEDs oder Zustandslogik arbeiten, schauen wir uns zuerst an, welche Werte ein Touch-Pin überhaupt liefert.
Denn – genau wie in der Arduino-IDE – gibt der ESP32 auch in MicroPython keinen festen „Touch = true/false“-Zustand zurück, sondern einen Messwert, der von der kapazitiven Veränderung abhängt.

Dieses Minimalbeispiel liest einen Touch-Pin zyklisch aus und gibt den aktuellen Wert über die serielle Schnittstelle aus. So bekommst du ein Gefühl dafür, wie sich Berührungen, Annäherungen oder unterschiedliche Touchflächen auf den Messwert auswirken.

MicroPython: Touch-Wert auslesen

from machine import TouchPad, Pin
import time

# Touch-Pin initialisieren (T0 = GPIO4)
touch = TouchPad(Pin(4))

while True:
    value = touch.read()
    print("Touch-Wert:", value)
    time.sleep(0.2)

Der Code erzeugt die Ausgabe in der Shell welche den gelesenen kapazitiven Wert vom Touchpin wiederspiegelt. Dieser ändert sich je nachdem wo wir am verbundenen Draht anfassen und wie der eigene Körper geerdet ist.

Thonny - Micropython mit ESP32 - Ausgabe der Touch-Werte
Thonny – Micropython mit ESP32 – Ausgabe der Touch-Werte

Quellcode – Touch als Schalter (Toggle) für zwei LEDs

Der Touch-Pin des ESP32 liefert keinen festen Ein/Aus-Zustand, sondern einen Messwert, der sich je nach Berührung und Aufbau verändert. Um flexibel festzulegen, ab welchem Wert ein Touchevent erkannt wird, verwende ich ein Drehpotentiometer.

verschiedene Drehpotentiometer
verschiedene Drehpotentiometer

Das Potentiometer liefert einen ADC-Wert zwischen 0 und 4095, der im Code auf den typischen Touch-Wertebereich umgerechnet wird. So lässt sich der Schwellwert jederzeit per Dreh einstellen – ohne den Code neu flashen zu müssen.

from machine import Pin, TouchPad, ADC
import time

# -----------------------------
# Pinbelegung
# -----------------------------
LED_BLAU_PIN = 18
LED_GRUEN_PIN = 19
TOUCH_PIN = 4          # T0 (GPIO4) beim ESP-WROOM-32
POTI_PIN = 35          # ADC (GPIO35)

# -----------------------------
# Wertebereiche (ggf. anpassen)
# -----------------------------
TOUCH_MIN = 0
TOUCH_MAX = 1600

ADC_MIN = 0
ADC_MAX = 4095  # MicroPython ADC liefert meist 0..4095

# -----------------------------
# Hardware-Setup
# -----------------------------
led_blau = Pin(LED_BLAU_PIN, Pin.OUT)
led_gruen = Pin(LED_GRUEN_PIN, Pin.OUT)

touch = TouchPad(Pin(TOUCH_PIN))

adc = ADC(Pin(POTI_PIN))
# Optional (je nach Firmware/Port verfügbar):
# adc.atten(ADC.ATTN_11DB)   # Messbereich bis ca. 3.3V
# adc.width(ADC.WIDTH_12BIT) # 0..4095

# -----------------------------
# Timing / Entprellung
# -----------------------------
PAUSE_MS = 500
last_action = time.ticks_ms()

# Status: False -> grün aktiv, True -> blau aktiv
active = False
led_gruen.value(1)
led_blau.value(0)

def map_value(x, in_min, in_max, out_min, out_max):
    """Einfaches Mapping wie Arduino map()."""
    if x < in_min:
        x = in_min
    if x > in_max:
        x = in_max
    return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

# -----------------------------
# Loop
# -----------------------------
while True:
    touch_value = touch.read()          # Touch-Messwert
    poti_raw = adc.read()               # ADC-Rohwert (0..4095)
    threshold = map_value(poti_raw, ADC_MIN, ADC_MAX, TOUCH_MIN, TOUCH_MAX)

    now = time.ticks_ms()

    # Debug-Ausgaben (hilft beim Einstellen)
    print("Touch:", touch_value, "| Poti:", poti_raw, "| Threshold:", threshold)

    # Touch erkannt + Pause eingehalten?
    if (touch_value is not None) and (touch_value < threshold) and (time.ticks_diff(now, last_action) > PAUSE_MS):
        last_action = now
        active = not active  # Toggle

        led_blau.value(1 if active else 0)
        led_gruen.value(0 if active else 1)

    time.sleep_ms(50)

Fazit

Mit MicroPython lassen sich die kapazitiven Touch-Pins des ESP32 schnell, übersichtlich und praxisnah einsetzen. Die Beispiele in diesem Beitrag zeigen, dass Touch weit mehr ist als ein netter Zusatz: Mit etwas Logik im Code wird daraus ein vollwertiges Eingabekonzept – ganz ohne mechanische Taster.

Besonders hilfreich ist dabei die Kombination aus Messwert + einstellbarem Schwellwert. Da Touch-Werte stark vom Aufbau, der Touchfläche und sogar von der eigenen Erdung abhängen, ist ein per Drehpotentiometer anpassbarer Schwellwert deutlich robuster als eine fest im Code hinterlegte Zahl. Genau hier spielt MicroPython seine Stärke aus: Änderungen lassen sich schnell testen, anpassen und erweitern.

Das Umschalten von LEDs per Touch zeigt anschaulich, wie sich Zustände verwalten lassen, während das einfache Auslesen des Touch-Pins ein gutes Gefühl für die gelieferten Messwerte vermittelt. Diese Grundlagen sind essenziell, um Touch später zuverlässig in größeren Projekten einzusetzen.

In den nächsten Schritten lassen sich die gezeigten Konzepte problemlos erweitern – etwa um:

  • mehrere Touchflächen mit unterschiedlichen Funktionen
  • Touch-Menüs oder Gesten
  • die Kombination mit Displays, Motoren oder Sensoren

Touch-Eingaben am ESP32 sind damit keine Spielerei, sondern eine ernstzunehmende Alternative zu klassischen Tastern – besonders für kompakte, robuste oder minimalistische Projekte. MicroPython macht den Einstieg dabei angenehm einfach und lädt zum Experimentieren ein.

FAQ – Häufige Fragen zur ESP32 Touch-Steuerung mit MicroPython

Welche ESP32-Modelle unterstützen kapazitive Touch-Pins?

Nicht alle ESP32-Varianten verfügen über Touch-Hardware. Kapazitive Touch-Pins sind nur bei bestimmten Modellen vorhanden, z. B. beim ESP-WROOM-32 oder ESP32-S2.
Varianten wie ESP32-C3, ESP32-S3 oder ESP32-H2 besitzen keine integrierten Touch-Pins. In diesen Fällen lassen sich Touch-Funktionen nur über externe Touch-Controller oder alternative Eingabekonzepte umsetzen.

Liefert ein Touch-Pin ein echtes Ein/Aus-Signal?

Nein.
Der ESP32 liefert keinen digitalen Touch-Zustand, sondern einen Messwert, der sich durch kapazitive Veränderungen ändert. Erst durch den Vergleich mit einem Schwellwert entscheidest du im Code, ob ein Touchevent vorliegt oder nicht.

Warum schwanken die Touch-Werte so stark?

Touch-Werte hängen von mehreren Faktoren ab, unter anderem:

  • Größe und Form der Touchfläche
  • Länge und Material des angeschlossenen Drahts
  • Erdung des Körpers (z. B. Schuhe, Untergrund)
  • Umgebungseinflüsse

Diese Schwankungen sind normal und kein Fehler. Genau deshalb ist ein einstellbarer Schwellwert so wichtig.

Warum verwende ich ein Drehpotentiometer für den Schwellwert?

Ein fest im Code definierter Schwellwert funktioniert oft nur unter idealen Bedingungen.
Mit einem Drehpotentiometer kannst du den Schwellwert zur Laufzeit anpassen, ohne den Code neu flashen zu müssen. Das macht die Touch-Erkennung deutlich robuster – besonders bei wechselnden Nutzern oder Umgebungen.

Kann ich mehrere Touch-Pins gleichzeitig verwenden?

Ja, das ist problemlos möglich – sofern dein ESP32-Modell genügend Touch-Pins bereitstellt.
Jeder Touch-Pin liefert einen eigenen Messwert und kann unabhängig ausgewertet werden, z. B. für:

  • Mehrstufige Eingaben
  • Vor / Zurück
  • Menü-Navigation
Ist Touch in MicroPython langsamer oder ungenauer als in der Arduino IDE?

Nein.
Die Touch-Messung erfolgt hardwareseitig im ESP32. Ob du Arduino (C/C++) oder MicroPython verwendest, hat keinen Einfluss auf die Messgenauigkeit. MicroPython macht den Code lediglich kompakter und leichter verständlich.

Kann ich Touch-Pins mit anderen Funktionen kombinieren?

Teilweise.
Einige Touch-Pins sind gleichzeitig GPIOs, können aber durch Touch-Funktionen oder Boot-Strapping eingeschränkt sein. Vor allem bei fertigen Development-Boards solltest du prüfen, ob ein Touch-Pin bereits anderweitig belegt ist.

Eignet sich Touch für produktive Projekte oder nur für Experimente?

Touch eignet sich sehr gut für produktive Projekte, wenn:

  • Schwellwerte sauber gewählt sind
  • Entprellung bzw. Zeitfenster genutzt werden
  • ausreichend große Touchflächen vorhanden sind

Gerade für kompakte Gehäuse, einfache Bedienkonzepte oder Projekte ohne mechanische Teile ist Touch eine sehr robuste Lösung.

Wie kann ich die Touch-Erkennung weiter verbessern?

Bewährte Maßnahmen sind:

  • größere Touchflächen (z. B. Kupfer, Alufolie, Leiterflächen)
  • feste Bezugserde (GND-Nähe)
  • Glättung der Messwerte im Code
  • saubere Kabelführung

Diese Punkte erhöhen die Stabilität deutlich.

Letzte Aktualisierung am: 04. Februar 2026

Foto von Stefan Draeger
Über den Autor

Stefan Draeger — Entwickler & Tech-Blogger

Ich zeige praxisnah, wie du Projekte mit Arduino, ESP32 und Smarthome-Komponenten umsetzt – Schritt für Schritt, mit Code und Schaltplänen.

Mehr Artikel von Stefan →

Schreibe einen Kommentar Antwort abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • QR-Code Generator
  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 015565432686
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2026 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
  • Optionen verwalten
  • Dienste verwalten
  • Verwalten von {vendor_count}-Lieferanten
  • Lese mehr über diese Zwecke
Einstellungen anzeigen
  • {title}
  • {title}
  • {title}