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
idzugeordnet 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:
idist 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]).modegibt 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ßerPin.init()) nicht anwendbar (ihr Aufruf führt zu einem undefinierten oder hardwarespezifischen Ergebnis). Nicht alle Ports implementieren diesen Modus.Pin.ALT_OPEN_DRAIN- Dasselbe wiePin.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 KlasseADC.
pullgibt 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.
valueist 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.drivegibt die Ausgangsleistung des Pins an und kann einer der folgenden Werte sein:Pin.DRIVE_0,Pin.DRIVE_1usw., mit zunehmender Treiberstärke. Die tatsächlichen Stromtreiberfähigkeiten sind portabhängig. Nicht alle Ports implementieren dieses Argument.altgibt 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 ModiPin.ALTundPin.ALT_OPEN_DRAINgü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 mitPin.IN,Pin.OUToderPin.OPEN_DRAINneu 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
Nonezurü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
xangegeben 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
xkann alles sein, was sich in einen booleschen Wert umwandeln lässt. Wandelt es sich inTrueum, 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 ModusPin.OUToderPin.OPEN_DRAINgewechselt 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
Nonezurü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().
- 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-ModusPin.OUT, so ist die Auslösequelle der Ausgangspuffer des Pins. Andernfalls, wenn der Pin-ModusPin.OPEN_DRAINist, ist die Auslösequelle der Ausgangspuffer für den Zustand ‚0‘ und der externe Pin-Wert für den Zustand ‚1‘.Die Argumente sind:
handlerist eine optionale Funktion, die aufgerufen wird, wenn der Interrupt auslöst. Der Handler muss genau ein Argument entgegennehmen, nämlich diePin-Instanz.triggerkonfiguriert das Ereignis, das einen Interrupt erzeugen kann. Mögliche Werte sind:Pin.IRQ_FALLINGInterrupt bei fallender Kante.Pin.IRQ_RISINGInterrupt bei steigender Kante.
Diese Werte können mit OR verknüpft werden, um bei mehreren Ereignissen auszulösen.
prioritylegt die Prioritätsstufe des Interrupts fest. Die möglichen Werte sind portspezifisch, aber höhere Werte stellen stets höhere Prioritäten dar.wakewählt den Energiemodus aus, in dem dieser Interrupt das System aufwecken kann. Auf keinem OpenMV-Port unterstützt; beim Standardwert belassen.hardfalls 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¶
nur mimxrt + alif¶
nur STM32¶
Konstanten¶
Die folgenden Konstanten werden verwendet, um
Pin-Objekte über den Konstruktor,init()undirq()zu konfigurieren. Sie sind nach Portverfügbarkeit gruppiert.Auf allen OpenMV-Ports verfügbare Konstanten¶
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 vonAF_PP.
- ANALOG: int¶
Pin-Modus: analoger Eingang – der digitale Ein-/Ausgangspuffer wird getrennt, sodass der Pin von einem
ADC-Kanal getrieben werden kann.
- AF_OD: int¶
Alternate-Function-Open-Drain-Modus (gleicher Wert wie
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Open-Drain-Ausgangsmodus (gleicher Wert wie
OPEN_DRAIN).
nur mimxrt¶
- PULL_HOLD: int¶
Aktiviert die Bus-Keeper-/Hold-Funktion des Pads – der Pin hält seinen aktuellen Logikpegel, anstatt zu floaten.