class Pin – controllo dei pin di I/O

Un oggetto pin viene utilizzato per controllare i pin di I/O (noti anche come GPIO - general-purpose input/output). Gli oggetti pin sono comunemente associati a un pin fisico in grado di pilotare una tensione di uscita e leggere tensioni di ingresso. La classe pin dispone di metodi per impostare la modalità del pin (IN, OUT, ecc.) e di metodi per ottenere e impostare il livello logico digitale. Per il controllo analogico di un pin, vedere la classe ADC.

Un oggetto pin viene costruito utilizzando un identificatore che specifica in modo univoco un determinato pin di I/O. Le forme consentite dell’identificatore e il pin fisico a cui l’identificatore corrisponde sono specifiche della porta. Le possibilità per l’identificatore sono un intero, una stringa o una tupla con numero di porta e di pin.

Modello di utilizzo:

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

Costruttori

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

Accede alla periferica pin (pin GPIO) associata all”id specificato. Se nel costruttore vengono forniti argomenti aggiuntivi, questi vengono utilizzati per inizializzare il pin. Tutte le impostazioni non specificate rimarranno nel loro stato precedente.

Gli argomenti sono:

  • id è obbligatorio e può essere un oggetto arbitrario. Tra i possibili tipi di valore vi sono: int (un identificatore Pin interno), str (un nome di Pin) e tuple (coppia di [port, pin]).

  • mode specifica la modalità del pin, che può essere una delle seguenti:

    • Pin.IN - Il pin è configurato per l’ingresso. Se visto come uscita, il pin si trova in stato di alta impedenza.

    • Pin.OUT - Il pin è configurato per l’uscita (normale).

    • Pin.OPEN_DRAIN - Il pin è configurato per l’uscita open-drain. L’uscita open-drain funziona nel modo seguente: se il valore di uscita è impostato a 0 il pin è attivo a livello basso; se il valore di uscita è 1 il pin si trova in stato di alta impedenza. Non tutte le porte implementano questa modalità, o alcune potrebbero farlo solo su determinati pin.

    • Pin.ALT - Il pin è configurato per svolgere una funzione alternativa, che è specifica della porta. Per un pin configurato in questo modo, qualsiasi altro metodo Pin (tranne Pin.init()) non è applicabile (la loro chiamata porterà a un risultato indefinito o specifico dell’hardware). Non tutte le porte implementano questa modalità.

    • Pin.ALT_OPEN_DRAIN - Uguale a Pin.ALT, ma il pin è configurato come open-drain. Non tutte le porte implementano questa modalità.

    • Pin.ANALOG - Il pin è configurato per l’ingresso analogico, vedere la classe ADC.

  • pull specifica se il pin ha una resistenza di pull (debole) collegata, e può essere una delle seguenti:

    • None - Nessuna resistenza di pull-up o pull-down.

    • Pin.PULL_UP - Resistenza di pull-up abilitata.

    • Pin.PULL_DOWN - Resistenza di pull-down abilitata.

  • value è valido solo per le modalità Pin.OUT e Pin.OPEN_DRAIN e specifica il valore iniziale di uscita del pin se fornito, altrimenti lo stato della periferica pin rimane invariato.

  • drive specifica la potenza di uscita del pin e può essere uno tra: Pin.DRIVE_0, Pin.DRIVE_1, ecc., in ordine crescente di intensità di pilotaggio. Le effettive capacità di pilotaggio della corrente dipendono dalla porta. Non tutte le porte implementano questo argomento.

  • alt specifica una funzione alternativa per il pin e i valori che può assumere dipendono dalla porta. Questo argomento è valido solo per le modalità Pin.ALT e Pin.ALT_OPEN_DRAIN. Può essere utilizzato quando un pin supporta più di una funzione alternativa. Se è supportata una sola funzione alternativa per il pin, questo argomento non è richiesto. Non tutte le porte implementano questo argomento.

Come specificato sopra, la classe Pin consente di impostare una funzione alternativa per un determinato pin, ma non specifica alcuna ulteriore operazione su tale pin. I pin configurati in modalità a funzione alternativa di solito non vengono usati come GPIO, ma sono invece pilotati da altre periferiche hardware. L’unica operazione supportata su un pin di questo tipo è la re-inizializzazione, chiamando il costruttore o il metodo Pin.init(). Se un pin configurato in modalità a funzione alternativa viene re-inizializzato con Pin.IN, Pin.OUT o Pin.OPEN_DRAIN, la funzione alternativa verrà rimossa dal pin.

Metodi

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

Re-inizializza il pin utilizzando i parametri forniti. Verranno impostati solo gli argomenti specificati. Il resto dello stato della periferica pin rimarrà invariato. Vedere la documentazione del costruttore per i dettagli sugli argomenti.

Restituisce None.

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

Questo metodo consente di impostare e ottenere il valore del pin, a seconda che l’argomento x venga fornito o meno.

Se l’argomento viene omesso, questo metodo ottiene il livello logico digitale del pin, restituendo 0 o 1 corrispondenti rispettivamente ai segnali di tensione bassa e alta. Il comportamento di questo metodo dipende dalla modalità del pin:

  • Pin.IN - Il metodo restituisce il valore di ingresso effettivamente presente sul pin.

  • Pin.OUT - Il comportamento e il valore restituito dal metodo sono indefiniti.

  • Pin.OPEN_DRAIN - Se il pin si trova nello stato “0” allora il comportamento e il valore restituito dal metodo sono indefiniti. Altrimenti, se il pin si trova nello stato “1”, il metodo restituisce il valore di ingresso effettivamente presente sul pin.

Se l’argomento viene fornito, questo metodo imposta il livello logico digitale del pin. L’argomento x può essere qualsiasi cosa convertibile in un booleano. Se si converte in True, il pin viene impostato allo stato “1”, altrimenti viene impostato allo stato “0”. Il comportamento di questo metodo dipende dalla modalità del pin:

  • Pin.IN - Il valore viene memorizzato nel buffer di uscita del pin. Lo stato del pin non cambia, rimane nello stato di alta impedenza. Il valore memorizzato diventerà attivo sul pin non appena questo viene cambiato in modalità Pin.OUT o Pin.OPEN_DRAIN.

  • Pin.OUT - Il buffer di uscita viene impostato immediatamente al valore fornito.

  • Pin.OPEN_DRAIN - Se il valore è “0” il pin viene impostato in stato di bassa tensione. Altrimenti il pin viene impostato in stato di alta impedenza.

Quando imposta il valore, questo metodo restituisce None.

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

Gli oggetti Pin sono richiamabili. Il metodo di chiamata fornisce una scorciatoia (veloce) per impostare e ottenere il valore del pin. È equivalente a Pin.value([x]). Vedere Pin.value() per maggiori dettagli.

on() None

Imposta il pin al livello di uscita «1».

off() None

Imposta il pin al livello di uscita «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

Configura un gestore di interrupt da chiamare quando la sorgente di trigger del pin è attiva. Se la modalità del pin è Pin.IN allora la sorgente di trigger è il valore esterno sul pin. Se la modalità del pin è Pin.OUT allora la sorgente di trigger è il buffer di uscita del pin. Altrimenti, se la modalità del pin è Pin.OPEN_DRAIN allora la sorgente di trigger è il buffer di uscita per lo stato “0” e il valore esterno del pin per lo stato “1”.

Gli argomenti sono:

  • handler è una funzione opzionale da chiamare quando l’interrupt si attiva. Il gestore deve accettare esattamente un argomento, che è l’istanza Pin.

  • trigger configura l’evento che può generare un interrupt. I valori possibili sono:

    • Pin.IRQ_FALLING interrupt sul fronte di discesa.

    • Pin.IRQ_RISING interrupt sul fronte di salita.

    Questi valori possono essere combinati con un OR per attivarsi su più eventi.

  • priority imposta il livello di priorità dell’interrupt. I valori che può assumere sono specifici della porta, ma valori più alti rappresentano sempre priorità più elevate.

  • wake seleziona la modalità di alimentazione in cui questo interrupt può risvegliare il sistema. Non supportato su nessuna porta OpenMV; lasciare al valore predefinito.

  • hard se è true viene utilizzato un interrupt hardware. Questo riduce il ritardo tra la variazione del pin e la chiamata del gestore. I gestori di interrupt hardware non possono allocare memoria; vedere Scrittura dei gestori di interrupt. Non tutte le porte supportano questo argomento.

Questo metodo restituisce un oggetto callback.

I metodi seguenti sono estensioni dell’API Pin di base. Sono raggruppati in base alla disponibilità per porta.

Metodi disponibili su tutte le porte OpenMV

low() None

Imposta il pin al livello di uscita «0». Alias di off().

high() None

Imposta il pin al livello di uscita «1». Alias di on().

solo mimxrt + alif

toggle() None

Inverte il pin di uscita – da «0» a «1» o viceversa. Non esposto su STM32 (usare value(not value()) se serve su STM32).

solo STM32

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

Ottiene o imposta la modalità del pin. Vedere la documentazione del costruttore per i dettagli sull’argomento mode.

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

Ottiene o imposta lo stato di pull del pin. Vedere la documentazione del costruttore per i dettagli sull’argomento pull.

Costanti

Le costanti seguenti vengono utilizzate per configurare gli oggetti Pin tramite il costruttore, init() e irq(). Sono raggruppate in base alla disponibilità per porta.

Costanti disponibili su tutte le porte OpenMV

IN: int

Modalità pin: ingresso digitale ad alta impedenza.

OUT: int

Modalità pin: uscita digitale push-pull. Alias di OUT_PP su STM32.

OPEN_DRAIN: int

Modalità pin: uscita open-drain. Pilotare 0 porta la linea a livello basso; pilotare 1 la rilascia in alta impedenza.

PULL_UP: int

Abilita la resistenza interna di pull-up sul pin.

PULL_DOWN: int

Abilita la resistenza interna di pull-down sul pin.

IRQ_FALLING: int

Passare a irq() per attivarsi su un fronte di discesa.

IRQ_RISING: int

Passare a irq() per attivarsi su un fronte di salita.

solo STM32

ALT: int

Modalità pin: funzione alternativa (push-pull). Usare con alt= per selezionare a quale funzione periferica viene instradato il pin. Alias di AF_PP.

ALT_OPEN_DRAIN: int

Modalità pin: funzione alternativa (open-drain). Alias di AF_OD.

ANALOG: int

Modalità pin: ingresso analogico – il buffer di ingresso/uscita digitale è disconnesso in modo che il pin possa essere pilotato da un canale ADC.

AF_PP: int

Modalità a funzione alternativa push-pull (stesso valore di ALT).

AF_OD: int

Modalità a funzione alternativa open-drain (stesso valore di ALT_OPEN_DRAIN).

OUT_PP: int

Modalità di uscita push-pull (stesso valore di OUT).

OUT_OD: int

Modalità di uscita open-drain (stesso valore di OPEN_DRAIN).

PULL_NONE: int

Disabilita la resistenza interna di pull-up / pull-down sul pin.

solo mimxrt

PULL_UP_47K: int

Abilita una resistenza interna di pull-up di ~47 kΩ.

PULL_UP_22K: int

Abilita una resistenza interna di pull-up di ~22 kΩ.

PULL_HOLD: int

Abilita la funzione bus-keeper / hold del pad – il pin mantiene il suo livello logico corrente invece di rimanere flottante.

DRIVE_OFF: int

Disabilita il driver di uscita del pin.

DRIVE_0: int

Impostazione di intensità di pilotaggio più bassa (impedenza in serie più elevata) – il riferimento R0 (~150 Ω a 3,3 V / 260 Ω a 1,8 V).

DRIVE_1: int

Intensità di pilotaggio di un passo superiore a DRIVE_0.

DRIVE_2: int

Intensità di pilotaggio di due passi superiore a DRIVE_0.

DRIVE_3: int

Intensità di pilotaggio di tre passi superiore a DRIVE_0 (predefinita per i pin di uscita).

DRIVE_4: int

Intensità di pilotaggio di quattro passi superiore a DRIVE_0.

DRIVE_5: int

Intensità di pilotaggio di cinque passi superiore a DRIVE_0.

DRIVE_6: int

Impostazione di intensità di pilotaggio più elevata.