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:
ideste 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]).modespecifică 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țiaPin.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 caPin.ALT, dar pinul este configurat ca open-drain. Nu toate porturile implementează acest mod.Pin.ANALOG- Pinul este configurat pentru intrare analogică, consultați clasaADC.
pullspecifică 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.
valueeste 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ă.drivespecifică puterea de ieșire a pinului și poate fi una dintre:Pin.DRIVE_0,Pin.DRIVE_1etc., crescând în intensitatea de antrenare. Capacitățile reale de antrenare în curent depind de port. Nu toate porturile implementează acest argument.altspecifică o funcție alternativă pentru pin, iar valorile pe care le poate lua depind de port. Acest argument este valid doar pentru modurilePin.ALTșiPin.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 cuPin.IN,Pin.OUTsauPin.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
xeste 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
xpoate fi orice se convertește la o valoare booleană. Dacă se convertește laTrue, 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 modulPin.OUTsauPin.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.
- 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 estePin.OUT, atunci sursa de declanșare este tamponul de ieșire al pinului. În caz contrar, dacă modul pinului estePin.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:
handlereste 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țaPin.triggerconfigurează 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.
prioritysetează nivelul de prioritate al întreruperii. Valorile pe care le poate lua sunt specifice portului, dar valorile mai mari reprezintă întotdeauna priorități mai mari.wakeselectează modul de alimentare în care această întrerupere poate trezi sistemul. Nu este acceptat pe niciun port OpenMV; lăsați-l la valoarea implicită.harddacă 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¶
doar mimxrt + alif¶
doar STM32¶
Constante¶
Constantele de mai jos sunt folosite pentru a configura obiectele
Pinprin constructor,init()șiirq(). Ele sunt grupate în funcție de disponibilitatea pe porturi.Constante disponibile pe toate porturile OpenMV¶
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 pentruAF_PP.
- 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_OD: int¶
Mod de funcție alternativă open-drain (aceeași valoare ca
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Mod de ieșire open-drain (aceeași valoare ca
OPEN_DRAIN).
doar mimxrt¶
- 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_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).