Klasse Pin – Steuerung von I/O-Pins

Ein Pin-Objekt dient zur Steuerung von I/O-Pins (auch bekannt als GPIO - general-purpose input/output). Pin-Objekte sind üblicherweise einem physischen Pin zugeordnet, der eine Ausgangsspannung treiben und Eingangsspannungen lesen kann. Die Pin-Klasse besitzt Methoden, um den Modus des Pins festzulegen (IN, OUT usw.), sowie Methoden, um den digitalen Logikpegel abzufragen und zu setzen. Für die analoge Steuerung eines Pins siehe die Klasse ADC.

Ein Pin-Objekt wird mithilfe eines Bezeichners konstruiert, der einen bestimmten I/O-Pin eindeutig angibt. Die erlaubten Formen des Bezeichners und der physische Pin, auf den der Bezeichner abgebildet wird, sind portspezifisch. Mögliche Werte für den Bezeichner sind ein Integer, ein String oder ein Tupel mit Port- und Pin-Nummer.

Verwendungsmodell:

from machine import Pin

# create an output pin on header pin P0
p0 = Pin("P0", Pin.OUT)

# set the value low then high
p0.value(0)
p0.value(1)

# create an input pin on header pin P2, with a pull-up resistor
p2 = Pin("P2", Pin.IN, Pin.PULL_UP)

# read and print the pin value
print(p2.value())

# reconfigure P0 in input mode with a pull-down resistor
p0.init(p0.IN, p0.PULL_DOWN)

# install an IRQ callback
p0.irq(lambda p: print(p))

Konstruktoren

class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)

Greift auf das Pin-Peripheriegerät (GPIO-Pin) zu, das der angegebenen id zugeordnet ist. Werden im Konstruktor zusätzliche Argumente angegeben, so werden sie zur Initialisierung des Pins verwendet. Alle nicht angegebenen Einstellungen bleiben in ihrem vorherigen Zustand.

Die Argumente sind:

  • id ist erforderlich und kann ein beliebiges Objekt sein. Zu den möglichen Werttypen gehören: int (ein interner Pin-Bezeichner), str (ein Pin-Name) und tuple (Paar aus [port, pin]).

  • mode gibt den Pin-Modus an, der einer der folgenden sein kann:

    • Pin.IN - Der Pin ist als Eingang konfiguriert. Als Ausgang betrachtet befindet sich der Pin im hochohmigen Zustand.

    • Pin.OUT - Der Pin ist als (normaler) Ausgang konfiguriert.

    • Pin.OPEN_DRAIN - Der Pin ist als Open-Drain-Ausgang konfiguriert. Der Open-Drain-Ausgang funktioniert folgendermaßen: Wird der Ausgangswert auf 0 gesetzt, ist der Pin auf niedrigem Pegel aktiv; ist der Ausgangswert 1, befindet sich der Pin im hochohmigen Zustand. Nicht alle Ports implementieren diesen Modus, manche eventuell nur an bestimmten Pins.

    • Pin.ALT - Der Pin ist so konfiguriert, dass er eine alternative Funktion ausführt, die portspezifisch ist. Für einen so konfigurierten Pin sind alle anderen Pin-Methoden (außer Pin.init()) nicht anwendbar (ihr Aufruf führt zu einem undefinierten oder hardwarespezifischen Ergebnis). Nicht alle Ports implementieren diesen Modus.

    • Pin.ALT_OPEN_DRAIN - Dasselbe wie Pin.ALT, aber der Pin ist als Open-Drain konfiguriert. Nicht alle Ports implementieren diesen Modus.

    • Pin.ANALOG - Der Pin ist als analoger Eingang konfiguriert, siehe die Klasse ADC.

  • pull gibt an, ob der Pin einen (schwachen) Pull-Widerstand angeschlossen hat, und kann einer der folgenden sein:

    • None - Kein Pull-up- oder Pull-down-Widerstand.

    • Pin.PULL_UP - Pull-up-Widerstand aktiviert.

    • Pin.PULL_DOWN - Pull-down-Widerstand aktiviert.

  • value ist nur für die Modi Pin.OUT und Pin.OPEN_DRAIN gültig und gibt, falls angegeben, den anfänglichen Ausgangswert des Pins an; andernfalls bleibt der Zustand des Pin-Peripheriegeräts unverändert.

  • drive gibt die Ausgangsleistung des Pins an und kann einer der folgenden Werte sein: Pin.DRIVE_0, Pin.DRIVE_1 usw., mit zunehmender Treiberstärke. Die tatsächlichen Stromtreiberfähigkeiten sind portabhängig. Nicht alle Ports implementieren dieses Argument.

  • alt gibt eine alternative Funktion für den Pin an, und die Werte, die es annehmen kann, sind portabhängig. Dieses Argument ist nur für die Modi Pin.ALT und Pin.ALT_OPEN_DRAIN gültig. Es kann verwendet werden, wenn ein Pin mehr als eine alternative Funktion unterstützt. Wird nur eine alternative Pin-Funktion unterstützt, ist dieses Argument nicht erforderlich. Nicht alle Ports implementieren dieses Argument.

Wie oben angegeben, ermöglicht die Pin-Klasse, eine alternative Funktion für einen bestimmten Pin festzulegen, sie spezifiziert jedoch keine weiteren Operationen auf einem solchen Pin. Pins, die im Alternate-Function-Modus konfiguriert sind, werden üblicherweise nicht als GPIO verwendet, sondern stattdessen von anderen Hardware-Peripheriegeräten getrieben. Die einzige auf einem solchen Pin unterstützte Operation ist die Neuinitialisierung durch Aufruf des Konstruktors oder der Methode Pin.init(). Wird ein im Alternate-Function-Modus konfigurierter Pin mit Pin.IN, Pin.OUT oder Pin.OPEN_DRAIN neu initialisiert, so wird die alternative Funktion vom Pin entfernt.

Methoden

init(mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1) None

Initialisiert den Pin mit den angegebenen Parametern neu. Nur die angegebenen Argumente werden gesetzt. Der übrige Zustand des Pin-Peripheriegeräts bleibt unverändert. Einzelheiten zu den Argumenten finden Sie in der Dokumentation des Konstruktors.

Gibt None zurück.

value(x: Any = None, /) int | None

Diese Methode ermöglicht es, den Wert des Pins zu setzen und abzufragen, je nachdem, ob das Argument x angegeben wird oder nicht.

Wird das Argument weggelassen, so liefert diese Methode den digitalen Logikpegel des Pins und gibt 0 oder 1 zurück, was niedrigen bzw. hohen Spannungssignalen entspricht. Das Verhalten dieser Methode hängt vom Modus des Pins ab:

  • Pin.IN - Die Methode gibt den tatsächlichen Eingangswert zurück, der aktuell am Pin anliegt.

  • Pin.OUT - Das Verhalten und der Rückgabewert der Methode sind undefiniert.

  • Pin.OPEN_DRAIN - Befindet sich der Pin im Zustand ‚0‘, so sind das Verhalten und der Rückgabewert der Methode undefiniert. Andernfalls, wenn sich der Pin im Zustand ‚1‘ befindet, gibt die Methode den tatsächlichen Eingangswert zurück, der aktuell am Pin anliegt.

Wird das Argument angegeben, so setzt diese Methode den digitalen Logikpegel des Pins. Das Argument x kann alles sein, was sich in einen booleschen Wert umwandeln lässt. Wandelt es sich in True um, wird der Pin auf den Zustand ‚1‘ gesetzt, andernfalls auf den Zustand ‚0‘. Das Verhalten dieser Methode hängt vom Modus des Pins ab:

  • Pin.IN - Der Wert wird im Ausgangspuffer des Pins gespeichert. Der Pin-Zustand ändert sich nicht, er bleibt im hochohmigen Zustand. Der gespeicherte Wert wird am Pin wirksam, sobald in den Modus Pin.OUT oder Pin.OPEN_DRAIN gewechselt wird.

  • Pin.OUT - Der Ausgangspuffer wird sofort auf den angegebenen Wert gesetzt.

  • Pin.OPEN_DRAIN - Ist der Wert ‚0‘, wird der Pin in einen niedrigen Spannungszustand gesetzt. Andernfalls wird der Pin in den hochohmigen Zustand gesetzt.

Beim Setzen des Wertes gibt diese Methode None zurück.

__call__(x: Any = None, /) int | None

Pin-Objekte sind aufrufbar. Die Aufrufmethode bietet eine (schnelle) Abkürzung, um den Wert des Pins zu setzen und abzufragen. Sie ist äquivalent zu Pin.value([x]). Weitere Einzelheiten finden Sie unter Pin.value().

on() None

Setzt den Pin auf den Ausgangspegel „1“.

off() None

Setzt den Pin auf den Ausgangspegel „0“.

irq(handler: Callable[[Pin], None] | None = None, trigger: int = Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority: int = 1, wake: int | None = None, hard: bool = False) None

Konfiguriert einen Interrupt-Handler, der aufgerufen wird, wenn die Auslösequelle des Pins aktiv ist. Ist der Pin-Modus Pin.IN, so ist die Auslösequelle der externe Wert am Pin. Ist der Pin-Modus Pin.OUT, so ist die Auslösequelle der Ausgangspuffer des Pins. Andernfalls, wenn der Pin-Modus Pin.OPEN_DRAIN ist, ist die Auslösequelle der Ausgangspuffer für den Zustand ‚0‘ und der externe Pin-Wert für den Zustand ‚1‘.

Die Argumente sind:

  • handler ist eine optionale Funktion, die aufgerufen wird, wenn der Interrupt auslöst. Der Handler muss genau ein Argument entgegennehmen, nämlich die Pin-Instanz.

  • trigger konfiguriert das Ereignis, das einen Interrupt erzeugen kann. Mögliche Werte sind:

    • Pin.IRQ_FALLING Interrupt bei fallender Kante.

    • Pin.IRQ_RISING Interrupt bei steigender Kante.

    Diese Werte können mit OR verknüpft werden, um bei mehreren Ereignissen auszulösen.

  • priority legt die Prioritätsstufe des Interrupts fest. Die möglichen Werte sind portspezifisch, aber höhere Werte stellen stets höhere Prioritäten dar.

  • wake wählt den Energiemodus aus, in dem dieser Interrupt das System aufwecken kann. Auf keinem OpenMV-Port unterstützt; beim Standardwert belassen.

  • hard falls true, wird ein Hardware-Interrupt verwendet. Dies verringert die Verzögerung zwischen der Pin-Änderung und dem Aufruf des Handlers. Hard-Interrupt-Handler dürfen keinen Speicher allozieren; siehe Interrupt-Handler schreiben. Nicht alle Ports unterstützen dieses Argument.

Diese Methode gibt ein Callback-Objekt zurück.

Die folgenden Methoden sind Erweiterungen der Kern-Pin-API. Sie sind nach Portverfügbarkeit gruppiert.

Auf allen OpenMV-Ports verfügbare Methoden

low() None

Setzt den Pin auf den Ausgangspegel „0“. Alias von off().

high() None

Setzt den Pin auf den Ausgangspegel „1“. Alias von on().

nur mimxrt + alif

toggle() None

Schaltet den Ausgangspin um – wechselt von „0“ zu „1“ oder umgekehrt. Auf STM32 nicht verfügbar (verwenden Sie value(not value()), falls Sie dies auf STM32 benötigen).

nur STM32

mode(mode: int | None = None, /) int
mode(mode: int, /) None

Fragt den Pin-Modus ab oder setzt ihn. Einzelheiten zum Argument mode finden Sie in der Dokumentation des Konstruktors.

pull(pull: int | None = None, /) int
pull(pull: int, /) None

Fragt den Pull-Zustand des Pins ab oder setzt ihn. Einzelheiten zum Argument pull finden Sie in der Dokumentation des Konstruktors.

Konstanten

Die folgenden Konstanten werden verwendet, um Pin-Objekte über den Konstruktor, init() und irq() zu konfigurieren. Sie sind nach Portverfügbarkeit gruppiert.

Auf allen OpenMV-Ports verfügbare Konstanten

IN: int

Pin-Modus: hochohmiger digitaler Eingang.

OUT: int

Pin-Modus: Push-Pull-Digitalausgang. Alias von OUT_PP auf STM32.

OPEN_DRAIN: int

Pin-Modus: Open-Drain-Ausgang. Das Treiben von 0 zieht die Leitung auf niedrigen Pegel; das Treiben von 1 gibt sie in den hochohmigen Zustand frei.

PULL_UP: int

Aktiviert den internen Pull-up-Widerstand am Pin.

PULL_DOWN: int

Aktiviert den internen Pull-down-Widerstand am Pin.

IRQ_FALLING: int

An irq() übergeben, um bei einer fallenden Kante auszulösen.

IRQ_RISING: int

An irq() übergeben, um bei einer steigenden Kante auszulösen.

nur STM32

ALT: int

Pin-Modus: alternative Funktion (Push-Pull). Mit alt= verwenden, um auszuwählen, auf welche Peripheriefunktion der Pin geführt wird. Alias von AF_PP.

ALT_OPEN_DRAIN: int

Pin-Modus: alternative Funktion (Open-Drain). Alias von AF_OD.

ANALOG: int

Pin-Modus: analoger Eingang – der digitale Ein-/Ausgangspuffer wird getrennt, sodass der Pin von einem ADC-Kanal getrieben werden kann.

AF_PP: int

Alternate-Function-Push-Pull-Modus (gleicher Wert wie ALT).

AF_OD: int

Alternate-Function-Open-Drain-Modus (gleicher Wert wie ALT_OPEN_DRAIN).

OUT_PP: int

Push-Pull-Ausgangsmodus (gleicher Wert wie OUT).

OUT_OD: int

Open-Drain-Ausgangsmodus (gleicher Wert wie OPEN_DRAIN).

PULL_NONE: int

Deaktiviert den internen Pull-up- / Pull-down-Widerstand am Pin.

nur mimxrt

PULL_UP_47K: int

Aktiviert einen internen Pull-up-Widerstand von ~47 kΩ.

PULL_UP_22K: int

Aktiviert einen internen Pull-up-Widerstand von ~22 kΩ.

PULL_HOLD: int

Aktiviert die Bus-Keeper-/Hold-Funktion des Pads – der Pin hält seinen aktuellen Logikpegel, anstatt zu floaten.

DRIVE_OFF: int

Deaktiviert den Ausgangstreiber des Pins.

DRIVE_0: int

Niedrigste Treiberstärke-Einstellung (höchste Serienimpedanz) – die R0-Referenz (~150 Ω bei 3,3 V / 260 Ω bei 1,8 V).

DRIVE_1: int

Treiberstärke eine Stufe über DRIVE_0.

DRIVE_2: int

Treiberstärke zwei Stufen über DRIVE_0.

DRIVE_3: int

Treiberstärke drei Stufen über DRIVE_0 (Standard für Ausgangspins).

DRIVE_4: int

Treiberstärke vier Stufen über DRIVE_0.

DRIVE_5: int

Treiberstärke fünf Stufen über DRIVE_0.

DRIVE_6: int

Stärkste Treiberstärke-Einstellung.