klasa Pin – sterowanie pinami I/O¶
Obiekt pinu służy do sterowania pinami I/O (znanymi również jako GPIO - general-purpose input/output). Obiekty Pin są zwykle powiązane z fizycznym pinem, który może wysterować napięcie wyjściowe oraz odczytać napięcia wejściowe. Klasa pinu posiada metody ustawiające tryb pinu (IN, OUT itd.) oraz metody pobierające i ustawiające cyfrowy poziom logiczny. Aby sterować pinem analogowo, zobacz klasę ADC.
Obiekt pinu tworzy się przy użyciu identyfikatora, który jednoznacznie określa dany pin I/O. Dopuszczalne formy identyfikatora oraz fizyczny pin, na który identyfikator wskazuje, są zależne od portu. Identyfikatorem może być liczba całkowita, łańcuch znaków lub krotka zawierająca port i numer pinu.
Model użycia:
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))
Konstruktory¶
- class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)¶
Dostęp do urządzenia peryferyjnego pinu (pinu GPIO) powiązanego z podanym
id. Jeśli w konstruktorze podano dodatkowe argumenty, są one używane do inicjalizacji pinu. Wszelkie ustawienia, które nie zostaną określone, pozostaną w swoim poprzednim stanie.Argumenty to:
idjest obowiązkowe i może być dowolnym obiektem. Wśród możliwych typów wartości są: int (wewnętrzny identyfikator Pin), str (nazwa Pin) oraz tuple (para [port, pin]).modeokreśla tryb pinu, który może być jednym z:Pin.IN- Pin skonfigurowany jako wejście. Patrząc jako wyjście, pin znajduje się w stanie wysokiej impedancji.Pin.OUT- Pin skonfigurowany jako (zwykłe) wyjście.Pin.OPEN_DRAIN- Pin skonfigurowany jako wyjście typu open-drain. Wyjście open-drain działa w następujący sposób: jeśli wartość wyjściowa zostanie ustawiona na 0, pin jest aktywny na niskim poziomie; jeśli wartość wyjściowa wynosi 1, pin znajduje się w stanie wysokiej impedancji. Nie wszystkie porty implementują ten tryb, a niektóre mogą go obsługiwać tylko na określonych pinach.Pin.ALT- Pin skonfigurowany do pełnienia funkcji alternatywnej, która jest zależna od portu. W przypadku pinu skonfigurowanego w ten sposób żadne inne metody Pin (pozaPin.init()) nie mają zastosowania (ich wywołanie doprowadzi do niezdefiniowanego lub zależnego od sprzętu rezultatu). Nie wszystkie porty implementują ten tryb.Pin.ALT_OPEN_DRAIN- To samo coPin.ALT, ale pin jest skonfigurowany jako open-drain. Nie wszystkie porty implementują ten tryb.Pin.ANALOG- Pin skonfigurowany jako wejście analogowe, zobacz klasęADC.
pullokreśla, czy pin ma dołączony (słaby) rezystor podciągający, i może być jednym z:None- Brak rezystora podciągającego w górę lub w dół.Pin.PULL_UP- Rezystor podciągający w górę włączony.Pin.PULL_DOWN- Rezystor podciągający w dół włączony.
valuejest prawidłowe tylko dla trybów Pin.OUT oraz Pin.OPEN_DRAIN i określa początkową wartość wyjściową pinu, jeśli zostanie podane; w przeciwnym razie stan urządzenia peryferyjnego pinu pozostaje niezmieniony.driveokreśla moc wyjściową pinu i może być jednym z:Pin.DRIVE_0,Pin.DRIVE_1itd., rosnących pod względem siły wysterowania. Rzeczywiste możliwości w zakresie prądu wyjściowego są zależne od portu. Nie wszystkie porty implementują ten argument.altokreśla funkcję alternatywną pinu, a wartości, jakie może przyjmować, są zależne od portu. Ten argument jest prawidłowy tylko dla trybówPin.ALTorazPin.ALT_OPEN_DRAIN. Może być używany, gdy pin obsługuje więcej niż jedną funkcję alternatywną. Jeśli obsługiwana jest tylko jedna funkcja alternatywna pinu, ten argument nie jest wymagany. Nie wszystkie porty implementują ten argument.
Jak określono powyżej, klasa Pin umożliwia ustawienie funkcji alternatywnej dla konkretnego pinu, ale nie określa żadnych dalszych operacji na takim pinie. Piny skonfigurowane w trybie funkcji alternatywnej zwykle nie są używane jako GPIO, lecz są sterowane przez inne urządzenia peryferyjne sprzętowe. Jedyną operacją obsługiwaną na takim pinie jest ponowna inicjalizacja poprzez wywołanie konstruktora lub metody
Pin.init(). Jeśli pin skonfigurowany w trybie funkcji alternatywnej zostanie ponownie zainicjalizowany zPin.IN,Pin.OUTlubPin.OPEN_DRAIN, funkcja alternatywna zostanie z niego usunięta.Metody¶
- init(mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1) None¶
Ponownie inicjalizuje pin przy użyciu podanych parametrów. Ustawione zostaną tylko te argumenty, które zostaną określone. Reszta stanu urządzenia peryferyjnego pinu pozostanie niezmieniona. Szczegóły dotyczące argumentów znajdują się w dokumentacji konstruktora.
Zwraca
None.
- value(x: Any = None, /) int | None¶
Ta metoda umożliwia ustawianie i pobieranie wartości pinu, w zależności od tego, czy argument
xzostał podany, czy nie.Jeśli argument zostanie pominięty, metoda pobiera cyfrowy poziom logiczny pinu, zwracając 0 lub 1, odpowiadające odpowiednio sygnałom niskiego i wysokiego napięcia. Zachowanie tej metody zależy od trybu pinu:
Pin.IN- Metoda zwraca rzeczywistą wartość wejściową aktualnie obecną na pinie.Pin.OUT- Zachowanie i wartość zwracana przez metodę są niezdefiniowane.Pin.OPEN_DRAIN- Jeśli pin jest w stanie «0», zachowanie i wartość zwracana przez metodę są niezdefiniowane. W przeciwnym razie, jeśli pin jest w stanie «1», metoda zwraca rzeczywistą wartość wejściową aktualnie obecną na pinie.
Jeśli argument zostanie podany, metoda ustawia cyfrowy poziom logiczny pinu. Argument
xmoże być dowolną wartością, która konwertuje się na wartość logiczną. Jeśli konwertuje się naTrue, pin zostaje ustawiony w stan «1», w przeciwnym razie zostaje ustawiony w stan «0». Zachowanie tej metody zależy od trybu pinu:Pin.IN- Wartość jest przechowywana w buforze wyjściowym pinu. Stan pinu nie zmienia się, pozostaje on w stanie wysokiej impedancji. Przechowywana wartość stanie się aktywna na pinie, gdy tylko zostanie on zmieniony na trybPin.OUTlubPin.OPEN_DRAIN.Pin.OUT- Bufor wyjściowy zostaje natychmiast ustawiony na podaną wartość.Pin.OPEN_DRAIN- Jeśli wartość wynosi «0», pin zostaje ustawiony w stan niskiego napięcia. W przeciwnym razie pin zostaje ustawiony w stan wysokiej impedancji.
Podczas ustawiania wartości metoda zwraca
None.
- __call__(x: Any = None, /) int | None¶
Obiekty Pin są wywoływalne. Metoda wywołania zapewnia (szybki) skrót do ustawiania i pobierania wartości pinu. Jest ona równoważna Pin.value([x]). Więcej szczegółów znajduje się w
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¶
Konfiguruje procedurę obsługi przerwania, która ma zostać wywołana, gdy źródło wyzwalania pinu jest aktywne. Jeśli tryb pinu to
Pin.IN, źródłem wyzwalania jest zewnętrzna wartość na pinie. Jeśli tryb pinu toPin.OUT, źródłem wyzwalania jest bufor wyjściowy pinu. W przeciwnym razie, jeśli tryb pinu toPin.OPEN_DRAIN, źródłem wyzwalania jest bufor wyjściowy dla stanu «0» oraz zewnętrzna wartość pinu dla stanu «1».Argumenty to:
handlerto opcjonalna funkcja wywoływana, gdy nastąpi przerwanie. Procedura obsługi musi przyjmować dokładnie jeden argument, którym jest instancjaPin.triggerkonfiguruje zdarzenie, które może wygenerować przerwanie. Możliwe wartości to:Pin.IRQ_FALLINGprzerwanie na opadającym zboczu.Pin.IRQ_RISINGprzerwanie na narastającym zboczu.
Te wartości można połączyć operacją OR, aby wyzwalać przerwanie na wielu zdarzeniach.
priorityustawia poziom priorytetu przerwania. Wartości, jakie może przyjmować, są zależne od portu, ale wyższe wartości zawsze oznaczają wyższe priorytety.wakewybiera tryb zasilania, w którym to przerwanie może wybudzić system. Nieobsługiwane na żadnym porcie OpenMV; pozostaw wartość domyślną.hardjeśli ma wartość true, używane jest przerwanie sprzętowe. Zmniejsza to opóźnienie między zmianą stanu pinu a wywołaniem procedury obsługi. Sprzętowe procedury obsługi przerwań nie mogą alokować pamięci; zobacz Pisanie procedur obsługi przerwań. Nie wszystkie porty obsługują ten argument.
Ta metoda zwraca obiekt wywołania zwrotnego.
Poniższe metody są rozszerzeniami podstawowego API Pin. Są pogrupowane według dostępności w portach.
Metody dostępne na wszystkich portach OpenMV¶
tylko mimxrt + alif¶
tylko STM32¶
Stałe¶
Poniższe stałe służą do konfigurowania obiektów
Pinza pomocą konstruktora,init()orazirq(). Są pogrupowane według dostępności w portach.Stałe dostępne na wszystkich portach OpenMV¶
tylko STM32¶
- ALT: int¶
Tryb pinu: funkcja alternatywna (push-pull). Używaj z
alt=, aby wybrać, do której funkcji peryferyjnej pin jest skierowany. AliasAF_PP.
- ANALOG: int¶
Tryb pinu: wejście analogowe – cyfrowy bufor wejścia/wyjścia jest odłączony, dzięki czemu pin może być sterowany przez kanał
ADC.
- AF_OD: int¶
Tryb funkcji alternatywnej open-drain (taka sama wartość jak
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Tryb wyjścia open-drain (taka sama wartość jak
OPEN_DRAIN).
tylko mimxrt¶
- PULL_HOLD: int¶
Włącza funkcję bus-keeper / hold padu – pin zatrzaskuje swój bieżący poziom logiczny zamiast pozostawać w stanie wysokiej impedancji.