class Pin – I/O-pinnen aansturen¶
Een pin-object wordt gebruikt om I/O-pinnen aan te sturen (ook bekend als GPIO - general-purpose input/output). Pin-objecten worden gewoonlijk geassocieerd met een fysieke pin die een uitgangsspanning kan leveren en ingangsspanningen kan uitlezen. De Pin-klasse heeft methoden om de modus van de pin in te stellen (IN, OUT, enz.) en methoden om het digitale logische niveau op te vragen en in te stellen. Voor analoge aansturing van een pin, zie de ADC-klasse.
Een pin-object wordt geconstrueerd met behulp van een identifier die ondubbelzinnig een bepaalde I/O-pin specificeert. De toegestane vormen van de identifier en de fysieke pin waarnaar de identifier verwijst zijn poortspecifiek. Mogelijkheden voor de identifier zijn een integer, een string of een tuple met poort- en pinnummer.
Gebruiksmodel:
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))
Constructors¶
- class machine.Pin(id: int | str, mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1)¶
Toegang tot het pin-randapparaat (GPIO-pin) dat is geassocieerd met de gegeven
id. Als er aanvullende argumenten in de constructor worden opgegeven, worden deze gebruikt om de pin te initialiseren. Alle instellingen die niet worden gespecificeerd, blijven in hun vorige toestand.De argumenten zijn:
idis verplicht en kan een willekeurig object zijn. Mogelijke waardetypen zijn: int (een interne Pin-identifier), str (een Pin-naam) en tuple (paar van [poort, pin]).modespecificeert de pinmodus, die een van de volgende kan zijn:Pin.IN- De pin is geconfigureerd voor invoer. Bekeken als uitgang bevindt de pin zich in een hoge-impedantietoestand.Pin.OUT- De pin is geconfigureerd voor (normale) uitvoer.Pin.OPEN_DRAIN- De pin is geconfigureerd voor open-drain-uitvoer. Open-drain-uitvoer werkt op de volgende manier: als de uitgangswaarde op 0 is ingesteld, is de pin actief op een laag niveau; als de uitgangswaarde 1 is, bevindt de pin zich in een hoge-impedantietoestand. Niet alle poorten implementeren deze modus, en sommige doen dit mogelijk alleen op bepaalde pinnen.Pin.ALT- De pin is geconfigureerd om een alternatieve functie uit te voeren, die poortspecifiek is. Voor een pin die op deze manier is geconfigureerd zijn andere Pin-methoden (behalvePin.init()) niet van toepassing (het aanroepen ervan leidt tot een ongedefinieerd of hardwarespecifiek resultaat). Niet alle poorten implementeren deze modus.Pin.ALT_OPEN_DRAIN- Hetzelfde alsPin.ALT, maar de pin is geconfigureerd als open-drain. Niet alle poorten implementeren deze modus.Pin.ANALOG- De pin is geconfigureerd voor analoge invoer, zie deADC-klasse.
pullspecificeert of de pin een (zwakke) pull-weerstand heeft aangesloten, en kan een van de volgende zijn:None- Geen pull-up- of pull-down-weerstand.Pin.PULL_UP- Pull-up-weerstand ingeschakeld.Pin.PULL_DOWN- Pull-down-weerstand ingeschakeld.
valueis alleen geldig voor de modi Pin.OUT en Pin.OPEN_DRAIN en specificeert de initiële uitgangswaarde van de pin indien opgegeven, anders blijft de toestand van het pin-randapparaat ongewijzigd.drivespecificeert het uitgangsvermogen van de pin en kan een van de volgende zijn:Pin.DRIVE_0,Pin.DRIVE_1, enz., oplopend in stuurkracht. De daadwerkelijke stroomstuurcapaciteiten zijn poortafhankelijk. Niet alle poorten implementeren dit argument.altspecificeert een alternatieve functie voor de pin en de waarden die het kan aannemen zijn poortafhankelijk. Dit argument is alleen geldig voor de modiPin.ALTenPin.ALT_OPEN_DRAIN. Het kan worden gebruikt wanneer een pin meer dan één alternatieve functie ondersteunt. Als slechts één alternatieve pinfunctie wordt ondersteund, is dit argument niet vereist. Niet alle poorten implementeren dit argument.
Zoals hierboven gespecificeerd, staat de Pin-klasse toe om een alternatieve functie voor een bepaalde pin in te stellen, maar specificeert het geen verdere bewerkingen op zo’n pin. Pinnen die in de modus alternatieve functie zijn geconfigureerd, worden gewoonlijk niet als GPIO gebruikt, maar worden in plaats daarvan aangestuurd door andere hardware-randapparaten. De enige bewerking die op zo’n pin wordt ondersteund, is opnieuw initialiseren, door de constructor of de
Pin.init()-methode aan te roepen. Als een pin die in de modus alternatieve functie is geconfigureerd opnieuw wordt geïnitialiseerd metPin.IN,Pin.OUTofPin.OPEN_DRAIN, wordt de alternatieve functie van de pin verwijderd.Methoden¶
- init(mode: int = -1, pull: int = -1, *, value: Any = None, drive: int = 0, alt: int = -1) None¶
Initialiseer de pin opnieuw met de gegeven parameters. Alleen de argumenten die worden gespecificeerd, worden ingesteld. De rest van de toestand van het pin-randapparaat blijft ongewijzigd. Zie de documentatie van de constructor voor details over de argumenten.
Retourneert
None.
- value(x: Any = None, /) int | None¶
Met deze methode kan de waarde van de pin worden ingesteld en opgevraagd, afhankelijk van of het argument
xwordt opgegeven of niet.Als het argument wordt weggelaten, haalt deze methode het digitale logische niveau van de pin op en retourneert 0 of 1 die respectievelijk overeenkomen met lage en hoge spanningssignalen. Het gedrag van deze methode hangt af van de modus van de pin:
Pin.IN- De methode retourneert de daadwerkelijke ingangswaarde die momenteel op de pin aanwezig is.Pin.OUT- Het gedrag en de retourwaarde van de methode zijn ongedefinieerd.Pin.OPEN_DRAIN- Als de pin zich in toestand ‘0’ bevindt, zijn het gedrag en de retourwaarde van de methode ongedefinieerd. Anders, als de pin zich in toestand ‘1’ bevindt, retourneert de methode de daadwerkelijke ingangswaarde die momenteel op de pin aanwezig is.
Als het argument wordt opgegeven, stelt deze methode het digitale logische niveau van de pin in. Het argument
xkan alles zijn dat naar een boolean wordt geconverteerd. Als het naarTrueconverteert, wordt de pin op toestand ‘1’ gezet, anders wordt deze op toestand ‘0’ gezet. Het gedrag van deze methode hangt af van de modus van de pin:Pin.IN- De waarde wordt opgeslagen in de uitgangsbuffer voor de pin. De toestand van de pin verandert niet, deze blijft in de hoge-impedantietoestand. De opgeslagen waarde wordt actief op de pin zodra deze wordt gewijzigd naar de modusPin.OUTofPin.OPEN_DRAIN.Pin.OUT- De uitgangsbuffer wordt onmiddellijk op de gegeven waarde ingesteld.Pin.OPEN_DRAIN- Als de waarde ‘0’ is, wordt de pin op een lage spanningstoestand gezet. Anders wordt de pin op de hoge-impedantietoestand gezet.
Bij het instellen van de waarde retourneert deze methode
None.
- __call__(x: Any = None, /) int | None¶
Pin-objecten zijn aanroepbaar. De aanroepmethode biedt een (snelle) snelkoppeling om de waarde van de pin in te stellen en op te vragen. Het is gelijkwaardig aan Pin.value([x]). Zie
Pin.value()voor meer details.
- 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¶
Configureer een interrupt-handler die wordt aangeroepen wanneer de triggerbron van de pin actief is. Als de pinmodus
Pin.INis, is de triggerbron de externe waarde op de pin. Als de pinmodusPin.OUTis, is de triggerbron de uitgangsbuffer van de pin. Anders, als de pinmodusPin.OPEN_DRAINis, is de triggerbron de uitgangsbuffer voor toestand ‘0’ en de externe pinwaarde voor toestand ‘1’.De argumenten zijn:
handleris een optionele functie die wordt aangeroepen wanneer de interrupt wordt getriggerd. De handler moet precies één argument aannemen, namelijk dePin-instantie.triggerconfigureert de gebeurtenis die een interrupt kan genereren. Mogelijke waarden zijn:Pin.IRQ_FALLINGinterrupt op dalende rand.Pin.IRQ_RISINGinterrupt op stijgende rand.
Deze waarden kunnen met OR worden gecombineerd om op meerdere gebeurtenissen te triggeren.
prioritystelt het prioriteitsniveau van de interrupt in. De waarden die het kan aannemen zijn poortspecifiek, maar hogere waarden vertegenwoordigen altijd hogere prioriteiten.wakeselecteert de energiemodus waarin deze interrupt het systeem kan wekken. Niet ondersteund op enige OpenMV-poort; laat op de standaardwaarde staan.hardals dit waar is, wordt een hardware-interrupt gebruikt. Dit verkleint de vertraging tussen de pinverandering en het aanroepen van de handler. Hard-interrupt-handlers mogen geen geheugen toewijzen; zie Interrupt-handlers schrijven. Niet alle poorten ondersteunen dit argument.
Deze methode retourneert een callback-object.
De volgende methoden zijn uitbreidingen op de kern-Pin-API. Ze zijn gegroepeerd op poortbeschikbaarheid.
Methoden die op alle OpenMV-poorten beschikbaar zijn¶
alleen mimxrt + alif¶
alleen STM32¶
Constanten¶
De onderstaande constanten worden gebruikt om
Pin-objecten te configureren via de constructor,init()enirq(). Ze zijn gegroepeerd op poortbeschikbaarheid.Constanten die op alle OpenMV-poorten beschikbaar zijn¶
alleen STM32¶
- ALT: int¶
Pinmodus: alternatieve functie (push-pull). Gebruik met
alt=om te selecteren naar welke randapparaatfunctie de pin wordt gerouteerd. Alias vanAF_PP.
- ANALOG: int¶
Pinmodus: analoge invoer – de digitale invoer-/uitvoerbuffer wordt losgekoppeld zodat de pin door een
ADC-kanaal kan worden aangestuurd.
- AF_OD: int¶
Open-drain-modus voor alternatieve functie (zelfde waarde als
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Open-drain-uitvoermodus (zelfde waarde als
OPEN_DRAIN).
alleen mimxrt¶
- PULL_HOLD: int¶
Schakel de bus-keeper-/hold-functie van de pad in – de pin houdt zijn huidige logische niveau vast in plaats van te zweven.