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:
idje 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]).modeurč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é jakoPin.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říduADC.
pullurč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.
valueje 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.driveurčuje výstupní výkon pinu a může být jeden z:Pin.DRIVE_0,Pin.DRIVE_1atd., se vzrůstající budicí silou. Skutečné schopnosti budicího proudu závisí na portu. Ne všechny porty tento argument implementují.alturčuje alternativní funkci pinu a hodnoty, kterých může nabývat, závisí na portu. Tento argument je platný pouze pro režimyPin.ALTaPin.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 sPin.IN,Pin.OUTneboPin.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
xmůže být cokoli, co se převede na boolean. Pokud se převede naTrue, 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í naPin.OUTneboPin.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().
- 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 pinuPin.OUT, pak je spouštěcím zdrojem výstupní buffer pinu. Jinak, pokud je režim pinuPin.OPEN_DRAIN, pak je spouštěcím zdrojem výstupní buffer pro stav ‚0‘ a externí hodnota pinu pro stav ‚1‘.Argumenty jsou:
handlerje 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 instancePin.triggerkonfiguruje událost, která může generovat přerušení. Možné hodnoty jsou:Pin.IRQ_FALLINGpřerušení na sestupné hraně.Pin.IRQ_RISINGpřerušení na vzestupné hraně.
Tyto hodnoty lze zkombinovat operací OR pro spouštění při více událostech.
prioritynastavuje ú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.wakevybí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.hardpokud 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¶
pouze mimxrt + alif¶
pouze STM32¶
Konstanty¶
Níže uvedené konstanty se používají ke konfiguraci objektů
Pinprostřednictvím konstruktoru,init()airq(). Jsou seskupeny podle dostupnosti na portech.Konstanty dostupné na všech portech OpenMV¶
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 proAF_PP.
- 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_OD: int¶
Režim alternativní funkce open-drain (stejná hodnota jako
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Výstupní režim open-drain (stejná hodnota jako
OPEN_DRAIN).
pouze mimxrt¶
- PULL_HOLD: int¶
Povolí funkci bus-keeper / hold padu – pin si podrží svou aktuální logickou úroveň namísto plovoucího stavu.