třída Pin – ovládání I/O pinů

Objekt pin slouží k ovládání I/O pinů (známých také jako GPIO - general-purpose input/output). Objekty pin jsou obvykle spojeny s fyzickým pinem, který může nastavovat výstupní napětí a číst vstupní napětí. Třída pin má metody pro nastavení režimu pinu (IN, OUT atd.) a metody pro získání a nastavení digitální logické úrovně. Pro analogové ovládání pinu viz třídu ADC.

Objekt pin se vytváří pomocí identifikátoru, který jednoznačně určuje konkrétní I/O pin. Povolené formy identifikátoru a fyzický pin, na který se identifikátor mapuje, závisí na portu. Identifikátorem může být celé číslo, řetězec nebo n-tice s portem a číslem pinu.

Model použití:

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)

Přístup k periferii pinu (GPIO pin) spojené s daným id. Pokud jsou v konstruktoru uvedeny další argumenty, použijí se k inicializaci pinu. Veškerá nastavení, která nejsou specifikována, zůstanou v předchozím stavu.

Argumenty jsou:

  • id je povinné a může být libovolný objekt. Mezi možné typy hodnot patří: int (interní identifikátor Pin), str (název Pin) a tuple (dvojice [port, pin]).

  • mode určuje režim pinu, kterým může být jeden z:

    • Pin.IN - Pin je nakonfigurován pro vstup. Pokud je nahlížen jako výstup, nachází se pin ve stavu vysoké impedance.

    • Pin.OUT - Pin je nakonfigurován pro (normální) výstup.

    • Pin.OPEN_DRAIN - Pin je nakonfigurován pro výstup s otevřeným kolektorem (open-drain). Výstup s otevřeným kolektorem funguje následovně: pokud je výstupní hodnota nastavena na 0, je pin aktivní na nízké úrovni; pokud je výstupní hodnota 1, je pin ve stavu vysoké impedance. Ne všechny porty tento režim implementují, nebo jej některé mohou implementovat pouze na určitých pinech.

    • Pin.ALT - Pin je nakonfigurován pro plnění alternativní funkce, která závisí na portu. Pro pin nakonfigurovaný tímto způsobem nejsou použitelné žádné jiné metody Pin (kromě Pin.init()) (jejich volání povede k nedefinovanému nebo hardwarově specifickému výsledku). Ne všechny porty tento režim implementují.

    • Pin.ALT_OPEN_DRAIN - Stejné jako Pin.ALT, ale pin je nakonfigurován jako open-drain. Ne všechny porty tento režim implementují.

    • Pin.ANALOG - Pin je nakonfigurován pro analogový vstup, viz třídu ADC.

  • pull určuje, zda má pin připojený (slabý) pull rezistor, a může být jeden z:

    • None - Žádný pull-up ani pull-down rezistor.

    • Pin.PULL_UP - Pull-up rezistor povolen.

    • Pin.PULL_DOWN - Pull-down rezistor povolen.

  • value je platné pouze pro režimy Pin.OUT a Pin.OPEN_DRAIN a určuje počáteční výstupní hodnotu pinu, pokud je zadáno, jinak stav periferie pinu zůstává nezměněn.

  • drive určuje výstupní výkon pinu a může být jeden z: Pin.DRIVE_0, Pin.DRIVE_1 atd., se vzrůstající budicí silou. Skutečné schopnosti budicího proudu závisí na portu. Ne všechny porty tento argument implementují.

  • alt určuje alternativní funkci pinu a hodnoty, kterých může nabývat, závisí na portu. Tento argument je platný pouze pro režimy Pin.ALT a Pin.ALT_OPEN_DRAIN. Lze jej použít, když pin podporuje více než jednu alternativní funkci. Pokud je podporována pouze jedna alternativní funkce pinu, není tento argument vyžadován. Ne všechny porty tento argument implementují.

Jak je uvedeno výše, třída Pin umožňuje nastavit alternativní funkci pro konkrétní pin, ale neurčuje žádné další operace na takovém pinu. Piny nakonfigurované v režimu alternativní funkce se obvykle nepoužívají jako GPIO, ale jsou místo toho buzeny jinými hardwarovými periferiemi. Jedinou operací podporovanou na takovém pinu je opětovná inicializace voláním konstruktoru nebo metody Pin.init(). Pokud je pin nakonfigurovaný v režimu alternativní funkce znovu inicializován s Pin.IN, Pin.OUT nebo Pin.OPEN_DRAIN, bude alternativní funkce z pinu odstraněna.

Metody

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

Znovu inicializuje pin pomocí zadaných parametrů. Nastaví se pouze ty argumenty, které jsou specifikovány. Zbytek stavu periferie pinu zůstane nezměněn. Podrobnosti o argumentech najdete v dokumentaci konstruktoru.

Vrací None.

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

Tato metoda umožňuje nastavit a získat hodnotu pinu v závislosti na tom, zda je či není zadán argument x.

Pokud je argument vynechán, tato metoda získá digitální logickou úroveň pinu a vrátí 0 nebo 1 odpovídající signálům nízkého a vysokého napětí. Chování této metody závisí na režimu pinu:

  • Pin.IN - Metoda vrací skutečnou vstupní hodnotu aktuálně přítomnou na pinu.

  • Pin.OUT - Chování a návratová hodnota metody jsou nedefinované.

  • Pin.OPEN_DRAIN - Pokud je pin ve stavu ‚0‘, pak je chování a návratová hodnota metody nedefinované. Jinak, pokud je pin ve stavu ‚1‘, metoda vrací skutečnou vstupní hodnotu aktuálně přítomnou na pinu.

Pokud je argument zadán, pak tato metoda nastaví digitální logickou úroveň pinu. Argument x může být cokoli, co se převede na boolean. Pokud se převede na True, je pin nastaven do stavu ‚1‘, jinak je nastaven do stavu ‚0‘. Chování této metody závisí na režimu pinu:

  • Pin.IN - Hodnota je uložena ve výstupním bufferu pinu. Stav pinu se nemění, zůstává ve stavu vysoké impedance. Uložená hodnota se na pinu stane aktivní, jakmile se režim změní na Pin.OUT nebo Pin.OPEN_DRAIN.

  • Pin.OUT - Výstupní buffer je okamžitě nastaven na zadanou hodnotu.

  • Pin.OPEN_DRAIN - Pokud je hodnota ‚0‘, je pin nastaven do stavu nízkého napětí. Jinak je pin nastaven do stavu vysoké impedance.

Při nastavování hodnoty tato metoda vrací None.

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

Objekty pin jsou volatelné. Metoda volání poskytuje (rychlou) zkratku pro nastavení a získání hodnoty pinu. Je ekvivalentní Pin.value([x]). Více podrobností viz Pin.value().

on() None

Nastaví pin na výstupní úroveň „1“.

off() None

Nastaví pin na výstupní úroveň „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

Nakonfiguruje obslužnou rutinu přerušení, která se zavolá, když je aktivní spouštěcí zdroj pinu. Pokud je režim pinu Pin.IN, pak je spouštěcím zdrojem externí hodnota na pinu. Pokud je režim pinu Pin.OUT, pak je spouštěcím zdrojem výstupní buffer pinu. Jinak, pokud je režim pinu Pin.OPEN_DRAIN, pak je spouštěcím zdrojem výstupní buffer pro stav ‚0‘ a externí hodnota pinu pro stav ‚1‘.

Argumenty jsou:

  • handler je volitelná funkce, která se zavolá, když se spustí přerušení. Obslužná rutina musí přijímat přesně jeden argument, kterým je instance Pin.

  • trigger konfiguruje událost, která může generovat přerušení. Možné hodnoty jsou:

    • Pin.IRQ_FALLING přerušení na sestupné hraně.

    • Pin.IRQ_RISING přerušení na vzestupné hraně.

    Tyto hodnoty lze zkombinovat operací OR pro spouštění při více událostech.

  • priority nastavuje úroveň priority přerušení. Hodnoty, kterých může nabývat, závisí na portu, ale vyšší hodnoty vždy představují vyšší priority.

  • wake vybírá režim napájení, ve kterém může toto přerušení probudit systém. Není podporováno na žádném portu OpenMV; ponechte výchozí hodnotu.

  • hard pokud je true, použije se hardwarové přerušení. To snižuje zpoždění mezi změnou pinu a zavoláním obslužné rutiny. Obslužné rutiny hardwarových přerušení nesmějí alokovat paměť; viz Psaní obslužných rutin přerušení. Ne všechny porty tento argument podporují.

Tato metoda vrací objekt callback.

Následující metody jsou rozšířením základního API Pin. Jsou seskupeny podle dostupnosti na portech.

Metody dostupné na všech portech OpenMV

low() None

Nastaví pin na výstupní úroveň „0“. Alias pro off().

high() None

Nastaví pin na výstupní úroveň „1“. Alias pro on().

pouze mimxrt + alif

toggle() None

Přepne výstupní pin – překlopí „0“ na „1“ nebo naopak. Není dostupné na STM32 (pokud to potřebujete na STM32, použijte value(not value())).

pouze STM32

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

Získá nebo nastaví režim pinu. Podrobnosti o argumentu mode najdete v dokumentaci konstruktoru.

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

Získá nebo nastaví stav pull pinu. Podrobnosti o argumentu pull najdete v dokumentaci konstruktoru.

Konstanty

Níže uvedené konstanty se používají ke konfiguraci objektů Pin prostřednictvím konstruktoru, init() a irq(). Jsou seskupeny podle dostupnosti na portech.

Konstanty dostupné na všech portech OpenMV

IN: int

Režim pinu: digitální vstup s vysokou impedancí.

OUT: int

Režim pinu: digitální výstup push-pull. Alias pro OUT_PP na STM32.

OPEN_DRAIN: int

Režim pinu: výstup open-drain. Buzení 0 stáhne linku na nízkou úroveň; buzení 1 ji uvolní do vysoké impedance.

PULL_UP: int

Povolí interní pull-up rezistor na pinu.

PULL_DOWN: int

Povolí interní pull-down rezistor na pinu.

IRQ_FALLING: int

Předejte metodě irq() pro spuštění na sestupné hraně.

IRQ_RISING: int

Předejte metodě irq() pro spuštění na vzestupné hraně.

pouze STM32

ALT: int

Režim pinu: alternativní funkce (push-pull). Použijte s alt= k výběru, na kterou funkci periferie je pin směrován. Alias pro AF_PP.

ALT_OPEN_DRAIN: int

Režim pinu: alternativní funkce (open-drain). Alias pro AF_OD.

ANALOG: int

Režim pinu: analogový vstup – buffer digitálního vstupu/výstupu je odpojen, takže pin může být buzen kanálem ADC.

AF_PP: int

Režim alternativní funkce push-pull (stejná hodnota jako ALT).

AF_OD: int

Režim alternativní funkce open-drain (stejná hodnota jako ALT_OPEN_DRAIN).

OUT_PP: int

Výstupní režim push-pull (stejná hodnota jako OUT).

OUT_OD: int

Výstupní režim open-drain (stejná hodnota jako OPEN_DRAIN).

PULL_NONE: int

Zakáže interní pull-up / pull-down rezistor na pinu.

pouze mimxrt

PULL_UP_47K: int

Povolí interní pull-up rezistor ~47 kΩ.

PULL_UP_22K: int

Povolí interní pull-up rezistor ~22 kΩ.

PULL_HOLD: int

Povolí funkci bus-keeper / hold padu – pin si podrží svou aktuální logickou úroveň namísto plovoucího stavu.

DRIVE_OFF: int

Zakáže výstupní budič pinu.

DRIVE_0: int

Nastavení nejnižší budicí síly (nejvyšší sériová impedance) – reference R0 (~150 Ω při 3,3 V / 260 Ω při 1,8 V).

DRIVE_1: int

Budicí síla o jeden stupeň vyšší než DRIVE_0.

DRIVE_2: int

Budicí síla o dva stupně vyšší než DRIVE_0.

DRIVE_3: int

Budicí síla o tři stupně vyšší než DRIVE_0 (výchozí pro výstupní piny).

DRIVE_4: int

Budicí síla o čtyři stupně vyšší než DRIVE_0.

DRIVE_5: int

Budicí síla o pět stupňů vyšší než DRIVE_0.

DRIVE_6: int

Nastavení nejsilnější budicí síly.