clasa Pin – controlul pinilor de I/O

Un obiect pin este folosit pentru a controla pinii de I/O (cunoscuți și sub numele de GPIO - general-purpose input/output). Obiectele pin sunt de obicei asociate cu un pin fizic care poate furniza o tensiune de ieșire și poate citi tensiuni de intrare. Clasa pin are metode pentru a seta modul pinului (IN, OUT etc.) și metode pentru a obține și seta nivelul logic digital. Pentru controlul analogic al unui pin, consultați clasa ADC.

Un obiect pin este construit folosind un identificator care specifică fără ambiguitate un anumit pin de I/O. Formele permise ale identificatorului și pinul fizic la care corespunde identificatorul sunt specifice fiecărui port. Identificatorul poate fi un întreg, un șir de caractere sau un tuplu cu portul și numărul pinului.

Model de utilizare:

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))

Constructori

class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)

Accesează perifericul pinului (pinul GPIO) asociat cu id-ul dat. Dacă în constructor sunt furnizate argumente suplimentare, atunci acestea sunt folosite pentru a inițializa pinul. Orice setări care nu sunt specificate vor rămâne în starea lor anterioară.

Argumentele sunt:

  • id este obligatoriu și poate fi un obiect arbitrar. Printre tipurile de valori posibile se numără: int (un identificator intern de Pin), str (un nume de Pin) și tuple (perechea [port, pin]).

  • mode specifică modul pinului, care poate fi unul dintre:

    • Pin.IN - Pinul este configurat pentru intrare. Privit ca ieșire, pinul se află în stare de înaltă impedanță.

    • Pin.OUT - Pinul este configurat pentru ieșire (normală).

    • Pin.OPEN_DRAIN - Pinul este configurat pentru ieșire open-drain. Ieșirea open-drain funcționează în felul următor: dacă valoarea de ieșire este setată la 0, pinul este activ la nivel scăzut; dacă valoarea de ieșire este 1, pinul se află în stare de înaltă impedanță. Nu toate porturile implementează acest mod, iar unele îl pot implementa doar pe anumiți pini.

    • Pin.ALT - Pinul este configurat pentru a îndeplini o funcție alternativă, care este specifică portului. Pentru un pin configurat în acest mod, orice altă metodă a clasei Pin (cu excepția Pin.init()) nu este aplicabilă (apelarea acestora va duce la un rezultat nedefinit sau specific hardware-ului). Nu toate porturile implementează acest mod.

    • Pin.ALT_OPEN_DRAIN - La fel ca Pin.ALT, dar pinul este configurat ca open-drain. Nu toate porturile implementează acest mod.

    • Pin.ANALOG - Pinul este configurat pentru intrare analogică, consultați clasa ADC.

  • pull specifică dacă pinul are atașat un rezistor de pull (slab) și poate fi unul dintre:

    • None - Niciun rezistor de pull-up sau pull-down.

    • Pin.PULL_UP - Rezistor de pull-up activat.

    • Pin.PULL_DOWN - Rezistor de pull-down activat.

  • value este valid doar pentru modurile Pin.OUT și Pin.OPEN_DRAIN și specifică valoarea inițială de ieșire a pinului, dacă este furnizată; în caz contrar, starea perifericului pinului rămâne neschimbată.

  • drive specifică puterea de ieșire a pinului și poate fi una dintre: Pin.DRIVE_0, Pin.DRIVE_1 etc., crescând în intensitatea de antrenare. Capacitățile reale de antrenare în curent depind de port. Nu toate porturile implementează acest argument.

  • alt specifică o funcție alternativă pentru pin, iar valorile pe care le poate lua depind de port. Acest argument este valid doar pentru modurile Pin.ALT și Pin.ALT_OPEN_DRAIN. Poate fi folosit atunci când un pin acceptă mai mult de o funcție alternativă. Dacă este acceptată o singură funcție alternativă a pinului, atunci acest argument nu este necesar. Nu toate porturile implementează acest argument.

După cum s-a specificat mai sus, clasa Pin permite setarea unei funcții alternative pentru un anumit pin, dar nu specifică nicio operație suplimentară asupra unui astfel de pin. Pinii configurați în modul de funcție alternativă nu sunt de obicei folosiți ca GPIO, ci sunt în schimb antrenați de alte periferice hardware. Singura operație acceptată asupra unui astfel de pin este reinițializarea, prin apelarea constructorului sau a metodei Pin.init(). Dacă un pin configurat în modul de funcție alternativă este reinițializat cu Pin.IN, Pin.OUT sau Pin.OPEN_DRAIN, funcția alternativă va fi eliminată de pe pin.

Metode

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

Reinițializează pinul folosind parametrii dați. Vor fi setate doar argumentele care sunt specificate. Restul stării perifericului pinului va rămâne neschimbat. Consultați documentația constructorului pentru detalii despre argumente.

Returnează None.

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

Această metodă permite setarea și obținerea valorii pinului, în funcție de faptul dacă argumentul x este furnizat sau nu.

Dacă argumentul este omis, atunci această metodă obține nivelul logic digital al pinului, returnând 0 sau 1, corespunzând semnalelor de tensiune joasă, respectiv înaltă. Comportamentul acestei metode depinde de modul pinului:

  • Pin.IN - Metoda returnează valoarea de intrare reală prezentă în prezent pe pin.

  • Pin.OUT - Comportamentul și valoarea returnată de metodă sunt nedefinite.

  • Pin.OPEN_DRAIN - Dacă pinul se află în starea «0», atunci comportamentul și valoarea returnată de metodă sunt nedefinite. În caz contrar, dacă pinul se află în starea «1», metoda returnează valoarea de intrare reală prezentă în prezent pe pin.

Dacă argumentul este furnizat, atunci această metodă setează nivelul logic digital al pinului. Argumentul x poate fi orice se convertește la o valoare booleană. Dacă se convertește la True, pinul este setat în starea «1»; în caz contrar, este setat în starea «0». Comportamentul acestei metode depinde de modul pinului:

  • Pin.IN - Valoarea este stocată în tamponul de ieșire pentru pin. Starea pinului nu se schimbă, rămâne în starea de înaltă impedanță. Valoarea stocată va deveni activă pe pin de îndată ce acesta este schimbat în modul Pin.OUT sau Pin.OPEN_DRAIN.

  • Pin.OUT - Tamponul de ieșire este setat imediat la valoarea dată.

  • Pin.OPEN_DRAIN - Dacă valoarea este «0», pinul este setat în stare de tensiune joasă. În caz contrar, pinul este setat în stare de înaltă impedanță.

La setarea valorii, această metodă returnează None.

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

Obiectele Pin sunt apelabile. Metoda de apel oferă o scurtătură (rapidă) pentru a seta și obține valoarea pinului. Este echivalentă cu Pin.value([x]). Consultați Pin.value() pentru mai multe detalii.

on() None

Setează pinul la nivelul de ieșire „1”.

off() None

Setează pinul la nivelul de ieșire „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

Configurează un gestionar de întreruperi care să fie apelat atunci când sursa de declanșare a pinului este activă. Dacă modul pinului este Pin.IN, atunci sursa de declanșare este valoarea externă de pe pin. Dacă modul pinului este Pin.OUT, atunci sursa de declanșare este tamponul de ieșire al pinului. În caz contrar, dacă modul pinului este Pin.OPEN_DRAIN, atunci sursa de declanșare este tamponul de ieșire pentru starea «0» și valoarea externă a pinului pentru starea «1».

Argumentele sunt:

  • handler este o funcție opțională care urmează să fie apelată atunci când se declanșează întreruperea. Gestionarul trebuie să accepte exact un argument, care este instanța Pin.

  • trigger configurează evenimentul care poate genera o întrerupere. Valorile posibile sunt:

    • Pin.IRQ_FALLING întrerupere pe muchie descendentă.

    • Pin.IRQ_RISING întrerupere pe muchie ascendentă.

    Aceste valori pot fi combinate prin OR pentru a declanșa pe mai multe evenimente.

  • priority setează nivelul de prioritate al întreruperii. Valorile pe care le poate lua sunt specifice portului, dar valorile mai mari reprezintă întotdeauna priorități mai mari.

  • wake selectează modul de alimentare în care această întrerupere poate trezi sistemul. Nu este acceptat pe niciun port OpenMV; lăsați-l la valoarea implicită.

  • hard dacă este true, se folosește o întrerupere hardware. Aceasta reduce întârzierea dintre schimbarea pinului și apelarea gestionarului. Gestionarii de întreruperi hardware nu pot aloca memorie; consultați Scrierea handlerelor de întrerupere. Nu toate porturile acceptă acest argument.

Această metodă returnează un obiect callback.

Următoarele metode sunt extensii ale API-ului de bază Pin. Ele sunt grupate în funcție de disponibilitatea pe porturi.

Metode disponibile pe toate porturile OpenMV

low() None

Setează pinul la nivelul de ieșire „0”. Alias pentru off().

high() None

Setează pinul la nivelul de ieșire „1”. Alias pentru on().

doar mimxrt + alif

toggle() None

Comută pinul de ieșire – inversează „0” în „1” sau invers. Nu este expus pe STM32 (folosiți value(not value()) dacă aveți nevoie de aceasta pe STM32).

doar STM32

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

Obține sau setează modul pinului. Consultați documentația constructorului pentru detalii despre argumentul mode.

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

Obține sau setează starea de pull a pinului. Consultați documentația constructorului pentru detalii despre argumentul pull.

Constante

Constantele de mai jos sunt folosite pentru a configura obiectele Pin prin constructor, init() și irq(). Ele sunt grupate în funcție de disponibilitatea pe porturi.

Constante disponibile pe toate porturile OpenMV

IN: int

Mod pin: intrare digitală de înaltă impedanță.

OUT: int

Mod pin: ieșire digitală push-pull. Alias pentru OUT_PP pe STM32.

OPEN_DRAIN: int

Mod pin: ieșire open-drain. Antrenarea cu 0 trage linia la nivel scăzut; antrenarea cu 1 o eliberează la înaltă impedanță.

PULL_UP: int

Activează rezistorul intern de pull-up de pe pin.

PULL_DOWN: int

Activează rezistorul intern de pull-down de pe pin.

IRQ_FALLING: int

Se transmite către irq() pentru a declanșa pe o muchie descendentă.

IRQ_RISING: int

Se transmite către irq() pentru a declanșa pe o muchie ascendentă.

doar STM32

ALT: int

Mod pin: funcție alternativă (push-pull). Se folosește cu alt= pentru a selecta către ce funcție de periferic este rutat pinul. Alias pentru AF_PP.

ALT_OPEN_DRAIN: int

Mod pin: funcție alternativă (open-drain). Alias pentru AF_OD.

ANALOG: int

Mod pin: intrare analogică – tamponul digital de intrare/ieșire este deconectat, astfel încât pinul să poată fi antrenat de un canal ADC.

AF_PP: int

Mod de funcție alternativă push-pull (aceeași valoare ca ALT).

AF_OD: int

Mod de funcție alternativă open-drain (aceeași valoare ca ALT_OPEN_DRAIN).

OUT_PP: int

Mod de ieșire push-pull (aceeași valoare ca OUT).

OUT_OD: int

Mod de ieșire open-drain (aceeași valoare ca OPEN_DRAIN).

PULL_NONE: int

Dezactivează rezistorul intern de pull-up / pull-down de pe pin.

doar mimxrt

PULL_UP_47K: int

Activează un rezistor intern de pull-up de ~47 kΩ.

PULL_UP_22K: int

Activează un rezistor intern de pull-up de ~22 kΩ.

PULL_HOLD: int

Activează funcția de bus-keeper / hold a pad-ului – pinul își menține nivelul logic curent în loc să fie flotant.

DRIVE_OFF: int

Dezactivează driverul de ieșire al pinului.

DRIVE_0: int

Setarea cu cea mai mică intensitate de antrenare (cea mai mare impedanță în serie) – referința R0 (~150 Ω la 3,3 V / 260 Ω la 1,8 V).

DRIVE_1: int

Intensitate de antrenare cu un pas peste DRIVE_0.

DRIVE_2: int

Intensitate de antrenare cu doi pași peste DRIVE_0.

DRIVE_3: int

Intensitate de antrenare cu trei pași peste DRIVE_0 (implicit pentru pinii de ieșire).

DRIVE_4: int

Intensitate de antrenare cu patru pași peste DRIVE_0.

DRIVE_5: int

Intensitate de antrenare cu cinci pași peste DRIVE_0.

DRIVE_6: int

Setarea cu cea mai puternică intensitate de antrenare.