GPIOs
Vorkenntnisse
Ziel:
- Ein- und Ausgänge benutzen.
Jeder Microcontroller hat mehrere GPIO1 Pins. Über diese Pins können exteren Komponenten angeschlossen werden. Je nach Bedarf können diese als Eingang oder Ausgang festgelegt werden.
Pinout
Damit man weiß welcher Pin für was verantwortlich ist, benötigt man das sogenannte Pinout. Hier sehen Sie das Pinout des ESP32 DevKitC V4.2
Achtung! Manche Pins sollten Sie nicht verwenden!
Achtung! Manche Pins sollten Sie nicht verwenden!
Die folgende Tabelle zeigt, welche Pins sicher verwendet werden können und welche mit Vorsicht zu verwenden sind.
GPIO (Label) | Safe? | Reason |
---|---|---|
0 | must be HIGH during boot and LOW for programming (BOOT) | |
1 (TX) | Tx pin, used for flashing and debugging | |
2 | must be LOW during boot and also connected to the on-board LED | |
3 (RX) | Rx pin, used for flashing and debugging | |
4 | ||
5 | must be HIGH during boot (SDIO) | |
6 (CLK) | Connected to Flash memory | |
7 (D0) | Connected to Flash memory | |
8 (D1) | Connected to Flash memory | |
9 (D2) | Connected to Flash memory | |
10 (D3) | Connected to Flash memory | |
11 (CMD) | Connected to Flash memory | |
12 | must be LOW during boot (VDD_FLASH) | |
13 | ||
14 | ||
15 | must be HIGH during boot, prevents startup log if pulled LOW (LOG) | |
16 | ||
17 | ||
18 | ||
19 | ||
21 | ||
22 | ||
23 | ||
25 | ||
26 | ||
27 | ||
32 | ||
33 | ||
34 | Input only GPIO, cannot be configured as output | |
35 | Input only GPIO, cannot be configured as output | |
36 (VP) | Input only GPIO, cannot be configured as output | |
39 (VN) | Input only GPIO, cannot be configured as output |
Quelle: lastminuteengineers
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 Pin
Der Konstruktor der Klasse Pin
, muss die Nummer des GPIO Pins aus dem Pinout übergeben werden.
from machine import Pin
pin = Pin(19)
In diesem Beispiel wird ein Object für den Pin mit der Nummer 19
angelegt.
Ausgang / Output
Um einen Pin als Ausgang festzulegen können wir dem Konstruktor Pin.OUT
als zweites Argument übergeben.
from machine import Pin
output_pin = Pin(19, Pin.OUT)
Zustand des Pins ändern
Um den gewünschten Pegel am Ausgang zu setzen bietet Micropython zwei Möglichkeiten.
Möglichkeit 1:
from machine import Pin
output_pin = Pin(19, Pin.OUT)
# Setzen des Pegels auf HIGH.
output_pin.on()
# Setzen des Pegels auf LOW
output_pin.off()
- Die Methode
on()
setzt den Zustand des Pins aufHIGH
. - Die Methode
off()
setzt den Zustand des Pins aufLOW
.
Möglichkeit 2:
from machine import Pin
output_pin = Pin(19, Pin.OUT)
# Setzen des Pegels auf HIGH.
output_pin.value(1)
# Setzen des Pegels auf LOW
output_pin.value(0)
Sie können auch die Methode value(x)
verwenden um den Zustand zu setzen.
Eingang / Input
Um einen Pin als Eingang festzulegen können wir dem Konstruktor Pin.IN
als zweites Argument übergeben.
from machine import Pin
input_pin = Pin(18, Pin.IN)
Zustand des Pins abfragen
Ist ein Pin als Eingang definiert, können wir die Methode value()
nutzen um den aktuellen Zustand am Pin abzufragen.
from machine import Pin
input_pin = Pin(18, Pin.IN)
current_value = input_pin.value()
Im gegebenen Beispiel wird der Zustand in der Variable current_value
gespeichert.
Führen Sie folgendes Program aus.
from machine import Pin
from time import sleep
input_pin = Pin(17, Pin.IN)
while True:
current_value = input_pin.value()
print(current_value)
sleep(0.5)
Verbinden Sie GPIO17 mit einer Drahtbrücke zu
- GND (0V) und anschließend
- VCC (3.3V).
Welche Werte lesen Sie jeweils?
WARNUNG: Verbinden Sie den Pin niemals mit einer Eingangsspannung von 5V. Dies könnte den Pin oder den ganzen Chip zerstören.
Besondere Pins
Achtung manche Pins auf dem ESP32 DevKit werden auch für andere Funktionalitäten genutzt.
- Pins 1 and 3 are REPL UART TX and RX respectively
- Pins 6, 7, 8, 9, 10 and 11 are used for connecting the embedded flash, and are not recommended for other uses.
- Pins 34-39 are input only, and also do not have internal pull-up resistors
- See Deep-sleep mode for a discussion of pin behaviour during sleep
Übungen
Schreiben Sie eine Funktion welche den Zustand eines Pins toggelt3.
Kontrollfragen
- Wofür steht der Begriff GPIO?
- Welche Informationen sind im Pinout zu finden?
- Wie legen Sie einen Pin als Ausgang fest?
- Wie können Sie den Zustand eines Pins ändern(HIGH | LOW)?
- Wie legen Sie einen Pin als Eingang fest?
- Wie können Sie den Zustand eines Pins abfragen?
- Ist es möglich den Zustand eines als Ausgang festgelegten Pins zu lesen?
- Ist es möglich den Zustand eines als Eingang festgelegten Pins auf HIGH | LOW zu setzten?
Ressources
GPIO steht für General Purpose Input Output.
Quelle: Espressif
Toggeln bedeutet umschalten, dh. wenn vorher HIGH setzte auf LOW und wenn vorher LOW setze auf HIGH.