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

ESP32 DevKit Pinout

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 auf HIGH.
  • Die Methode off() setzt den Zustand des Pins auf LOW.

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.

Task

Messen Sie mit einem Multimeter nach, welche Spannung an dem Pegel jeweils anliegt.

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.

Task

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.

Info

  • 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

Übung 1

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

1

GPIO steht für General Purpose Input Output.

2

Quelle: Espressif

3

Toggeln bedeutet umschalten, dh. wenn vorher HIGH setzte auf LOW und wenn vorher LOW setze auf HIGH.