GPIO Pins nutzen
Jeder Microcontroller hat mehrere GPIO1 Pins. Über diese Pins können exteren Komponenten angeschlossen werden. Je nach Bedarf können diese als Eingang (Input) oder Ausgang (Outpout) festgelegt werden.
Damit man weiß welcher Pin für was verantwortlich ist, benötigt man das sogenannte Pinout.
Hier sehen Sie die Pinouts verschiedener Boards.

Pins nutzen
Abschnitt betitelt „Pins nutzen“Damit wir in Micropython Pins als Eingang oder Ausgang definieren können müssen wir zunächst die Klasse Pin aus dem Module machine einbinden.
from machine import PinDer Konstruktor der Klasse Pin, muss die Nummer des GPIO Pins aus dem Pinout übergeben werden. Außerdem muss festgelegt werden ob der Pin als Eingang oder Ausgang genutzt werden soll.
from machine import Pinpin = Pin(19)In diesem Beispiel wird ein Object für den Pin mit der Nummer 19 angelegt.
Ausgang / Output
Abschnitt betitelt „Ausgang / Output“Um einen Pin als Ausgang festzulegen können wir dem Konstruktor Pin.OUT als zweites Argument übergeben.
from machine import Pinoutput_pin = Pin(19, Pin.OUT)Zustand des Pins ändern
Abschnitt betitelt „Zustand des Pins ändern“Um den gewünschten Pegel am Ausgang zu setzen bietet Micropython zwei Möglichkeiten.
from machine import Pinoutput_pin = Pin(19, Pin.OUT)# Setzen des Pegels auf HIGH.output_pin.on()# Setzen des Pegels auf LOWoutput_pin.off()- Die Methode
on()setzt den Zustand des Pins aufHIGH. - Die Methode
off()setzt den Zustand des Pins aufLOW.
from machine import Pinoutput_pin = Pin(19, Pin.OUT)# Setzen des Pegels auf HIGH.output_pin.value(1)# Setzen des Pegels auf LOWoutput_pin.value(0)Sie können auch die Methode value(x) verwenden um den Zustand zu setzen.
Wobei x entweder 0 für LOW oder 1 für HIGH sein kann.
Aufgabe: Led blinken lassen
Abschnitt betitelt „Aufgabe: Led blinken lassen“-
Bauen Sie folgende Schaltung auf. (
R=220Ω)
Hinweis: Aufbau in Wokwi oder Hardware möglich.Start Lab in Wokwi
-
Schreiben Sie ein Programm welches die LED mit Hilfe der Sleep Funktion im Takt von 500ms blinken lässt. Das heißt die LED ist 500ms an und danach 500ms aus.
Mögliche Lösung
import timefrom machine import Pin
led_pin = Pin(16, Pin.OUT)
while True: led_pin.on() time.sleep(0.5) led_pin.off() time.sleep(0.5)import timefrom machine import Pin
led_pin = Pin(16, Pin.OUT)
while True: led_pin.value(not led_pin.value()) time.sleep(0.5)Eingang / Input
Abschnitt betitelt „Eingang / Input“Um einen Pin als Eingang festzulegen können wir dem Konstruktor Pin.IN als zweites Argument übergeben.
from machine import Pininput_pin = Pin(18, Pin.IN)Zustand des Pins abfragen
Abschnitt betitelt „Zustand des Pins abfragen“Die Methode value() liefert uns den aktuellen Zustand am Pin zurück.
from machine import Pininput_pin = Pin(18, Pin.IN)current_value = input_pin.value()Im folgenden Beispiel wird der Zustand in der Variable current_value gespeichert.
from machine import Pinfrom time import sleepinput_pin = Pin(17, Pin.IN)while True: current_value = input_pin.value() print(current_value) sleep(0.5)-
Führen Sie folgenden Code aus.
-
Verbinden Sie GPIO17 mit einer Drahtbrücke zu GND (0V) und anschließend VCC (3.3V).
- Welche Ausgabe erhalten Sie?
- Welche Ausgabe erhalten Sie wenn keine Verbindung besteht?
Der Pullup Widerstand
Abschnitt betitelt „Der Pullup Widerstand“Wenn keine Verbindung zum Pin besteht haben wir einen undefinierten Zustand. Demnach wird “zufällig” HIGH oder LOW eingelesen. Dies ist auch der Fall, wenn man einen Taster an den Pin anschließt und dieser nicht gedrückt ist.
Folgender Code zeigt wie man dies in Software umsetzt.
from machine import Pinbtn = Pin(27, Pin.IN, Pin.PULL_UP)
while True: current_btn_state = btn.value() print(current_btn_state)Der Ausdruck Pin.PULL_UP aktiviert den internen Pullup-Widerstand des ESP32.
Dadurch liegt ein HIGH-Pegel am Pin an, wenn der Taster nicht gedrückt ist und ein LOW-Pegel wenn der Taster gedrückt wird. Dieses Prinzip nennt man auch LOW active.
Aufgabe: Taster verwenden.
Abschnitt betitelt „Aufgabe: Taster verwenden.“Ein Taster, nicht zu verwechseln mit einem Schalter ist ein mechanisches Bauteil, welches als Eingang für einen Microcontroller genutzt werden kann.
-
Bauen Sie folgende Schaltung auf. (
R=220Ω)
Hinweis: Aufbau in Wokwi oder Hardware möglich.Start Lab in Wokwi
-
Schreiben Sie ein Programm welches eine LED einschaltet solange der Taster gedrückt ist. Und die LED wieder ausschaltet falls der Taster nicht mehr gedrückt ist.
Mögliche Lösung
main.py from machine import Pinled = Pin(14, Pin.OUT)btn = Pin(27, Pin.IN, Pin.PULL_UP)while True:if 0 == btn.value():led.on()else:led.off() -
Betrachten Sie folgendes Diagram welches den Ablauf darstellt. Versuchen Sie dies in Code umzusetzen.
flowchart TB setup["`**Setup** Pins and init *last* state to HIGH `"] check["`Check *current* button state`"] if_edge{" "} do["`set *last* state = *current* state`"] if_falling{"is current state LOW"} toggle["`*toggle LED*`"] setup --> check check --> if_edge if_edge -- last != current --> check if_edge -- last == current --> do do --> if_falling if_falling -- true --> toggle if_falling -- false --> checkMögliche Lösung
main.py from machine import Pinled = Pin(14, Pin.OUT)btn = Pin(27, Pin.IN, Pin.PULL_UP)# Set btn state to HIGH as btn is low active.last_btn_state = 1while True:current_btn_state = btn.value()if current_btn_state != last_btn_state:last_btn_state = current_btn_stateif current_btn_state == 0:led.value(not led.value())
Besondere Pins
Abschnitt betitelt „Besondere Pins“Achtung manche Pins auf dem ESP32 DevKit werden auch für andere Funktionalitäten genutzt und können daher nicht frei verwendet werden.
Kontrollfragen
Abschnitt betitelt „Kontrollfragen“Teste dein Wissen
Abschnitt betitelt „Teste dein Wissen“-
Wofür steht der Begriff GPIO?
-
Wie legen Sie GPIO 12 als Ausgang fest?
-
Wie können Sie den Zustand eines Pins abfragen?
-
Wie können Sie den Zustand eines Ausgangs von HIGH auf LOW ändern?
-
Welche Informationen sind typischerweise nicht im Pinout zu finden.
- Welcher Pol der LED muss an GND angeschlossen werden?
- Wie groß sollte der Vorwiderstand für eine LED sein?
- Was passiert, wenn ein Taster direkt (also ohne Pullup-Widerstand) mit dem Microkontroller verbunden wird.
- Ein Taster ist mit einem Pullup-Widerstand verbunden. Welches logische Level liegt am Pin an, wenn der Taster offen ist?
Ressources
Abschnitt betitelt „Ressources“machine.Pin Footnotes
Abschnitt betitelt „Footnotes“-
GPIO steht für General Purpose Input Output. ↩