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:

  • id jest 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]).

  • mode okreś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 (poza Pin.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 co Pin.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.

  • pull okreś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.

  • value jest 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.

  • drive określa moc wyjściową pinu i może być jednym z: Pin.DRIVE_0, Pin.DRIVE_1 itd., 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.

  • alt określa funkcję alternatywną pinu, a wartości, jakie może przyjmować, są zależne od portu. Ten argument jest prawidłowy tylko dla trybów Pin.ALT oraz Pin.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 z Pin.IN, Pin.OUT lub Pin.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 x został 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 x może być dowolną wartością, która konwertuje się na wartość logiczną. Jeśli konwertuje się na True, 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 tryb Pin.OUT lub Pin.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().

on() None

Ustawia pin na poziom wyjściowy „1”.

off() None

Ustawia pin na poziom wyjściowy „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

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 to Pin.OUT, źródłem wyzwalania jest bufor wyjściowy pinu. W przeciwnym razie, jeśli tryb pinu to Pin.OPEN_DRAIN, źródłem wyzwalania jest bufor wyjściowy dla stanu «0» oraz zewnętrzna wartość pinu dla stanu «1».

Argumenty to:

  • handler to opcjonalna funkcja wywoływana, gdy nastąpi przerwanie. Procedura obsługi musi przyjmować dokładnie jeden argument, którym jest instancja Pin.

  • trigger konfiguruje zdarzenie, które może wygenerować przerwanie. Możliwe wartości to:

    • Pin.IRQ_FALLING przerwanie na opadającym zboczu.

    • Pin.IRQ_RISING przerwanie na narastającym zboczu.

    Te wartości można połączyć operacją OR, aby wyzwalać przerwanie na wielu zdarzeniach.

  • priority ustawia poziom priorytetu przerwania. Wartości, jakie może przyjmować, są zależne od portu, ale wyższe wartości zawsze oznaczają wyższe priorytety.

  • wake wybiera tryb zasilania, w którym to przerwanie może wybudzić system. Nieobsługiwane na żadnym porcie OpenMV; pozostaw wartość domyślną.

  • hard jeś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

low() None

Ustawia pin na poziom wyjściowy „0”. Alias off().

high() None

Ustawia pin na poziom wyjściowy „1”. Alias on().

tylko mimxrt + alif

toggle() None

Przełącza pin wyjściowy – zmienia „0” na „1” lub odwrotnie. Niedostępne na STM32 (jeśli potrzebujesz tego na STM32, użyj value(not value())).

tylko STM32

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

Pobiera lub ustawia tryb pinu. Szczegóły dotyczące argumentu mode znajdują się w dokumentacji konstruktora.

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

Pobiera lub ustawia stan podciągania pinu. Szczegóły dotyczące argumentu pull znajdują się w dokumentacji konstruktora.

Stałe

Poniższe stałe służą do konfigurowania obiektów Pin za pomocą konstruktora, init() oraz irq(). Są pogrupowane według dostępności w portach.

Stałe dostępne na wszystkich portach OpenMV

IN: int

Tryb pinu: cyfrowe wejście o wysokiej impedancji.

OUT: int

Tryb pinu: cyfrowe wyjście typu push-pull. Alias OUT_PP na STM32.

OPEN_DRAIN: int

Tryb pinu: wyjście typu open-drain. Wysterowanie 0 ściąga linię do niskiego poziomu; wysterowanie 1 zwalnia ją do stanu wysokiej impedancji.

PULL_UP: int

Włącza wewnętrzny rezystor podciągający w górę na pinie.

PULL_DOWN: int

Włącza wewnętrzny rezystor podciągający w dół na pinie.

IRQ_FALLING: int

Przekaż do irq(), aby wyzwalać przerwanie na opadającym zboczu.

IRQ_RISING: int

Przekaż do irq(), aby wyzwalać przerwanie na narastającym zboczu.

tylko STM32

ALT: int

Tryb pinu: funkcja alternatywna (push-pull). Używaj z alt=, aby wybrać, do której funkcji peryferyjnej pin jest skierowany. Alias AF_PP.

ALT_OPEN_DRAIN: int

Tryb pinu: funkcja alternatywna (open-drain). Alias AF_OD.

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_PP: int

Tryb funkcji alternatywnej push-pull (taka sama wartość jak ALT).

AF_OD: int

Tryb funkcji alternatywnej open-drain (taka sama wartość jak ALT_OPEN_DRAIN).

OUT_PP: int

Tryb wyjścia push-pull (taka sama wartość jak OUT).

OUT_OD: int

Tryb wyjścia open-drain (taka sama wartość jak OPEN_DRAIN).

PULL_NONE: int

Wyłącza wewnętrzny rezystor podciągający w górę / w dół na pinie.

tylko mimxrt

PULL_UP_47K: int

Włącza wewnętrzny rezystor podciągający w górę o wartości ~47 kΩ.

PULL_UP_22K: int

Włącza wewnętrzny rezystor podciągający w górę o wartości ~22 kΩ.

PULL_HOLD: int

Włącza funkcję bus-keeper / hold padu – pin zatrzaskuje swój bieżący poziom logiczny zamiast pozostawać w stanie wysokiej impedancji.

DRIVE_OFF: int

Wyłącza sterownik wyjściowy pinu.

DRIVE_0: int

Ustawienie najniższej siły wysterowania (najwyższa impedancja szeregowa) – odniesienie R0 (~150 Ω przy 3,3 V / 260 Ω przy 1,8 V).

DRIVE_1: int

Siła wysterowania o jeden stopień wyższa niż DRIVE_0.

DRIVE_2: int

Siła wysterowania o dwa stopnie wyższa niż DRIVE_0.

DRIVE_3: int

Siła wysterowania o trzy stopnie wyższa niż DRIVE_0 (domyślna dla pinów wyjściowych).

DRIVE_4: int

Siła wysterowania o cztery stopnie wyższa niż DRIVE_0.

DRIVE_5: int

Siła wysterowania o pięć stopni wyższa niż DRIVE_0.

DRIVE_6: int

Ustawienie najsilniejszego wysterowania.