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”
idspecificato. 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]).modespecifica 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 (trannePin.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 aPin.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 classeADC.
pullspecifica 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.drivespecifica 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.altspecifica una funzione alternativa per il pin e i valori che può assumere dipendono dalla porta. Questo argomento è valido solo per le modalitàPin.ALTePin.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 conPin.IN,Pin.OUToPin.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
xvenga 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
xpuò essere qualsiasi cosa convertibile in un booleano. Se si converte inTrue, 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.OUToPin.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.
- 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.INallora la sorgente di trigger è il valore esterno sul pin. Se la modalità del pin èPin.OUTallora la sorgente di trigger è il buffer di uscita del pin. Altrimenti, se la modalità del pin èPin.OPEN_DRAINallora 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’istanzaPin.triggerconfigura l’evento che può generare un interrupt. I valori possibili sono:Pin.IRQ_FALLINGinterrupt sul fronte di discesa.Pin.IRQ_RISINGinterrupt sul fronte di salita.
Questi valori possono essere combinati con un OR per attivarsi su più eventi.
priorityimposta il livello di priorità dell’interrupt. I valori che può assumere sono specifici della porta, ma valori più alti rappresentano sempre priorità più elevate.wakeseleziona la modalità di alimentazione in cui questo interrupt può risvegliare il sistema. Non supportato su nessuna porta OpenMV; lasciare al valore predefinito.hardse è 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¶
solo mimxrt + alif¶
solo STM32¶
Costanti¶
Le costanti seguenti vengono utilizzate per configurare gli oggetti
Pintramite il costruttore,init()eirq(). Sono raggruppate in base alla disponibilità per porta.Costanti disponibili su tutte le porte OpenMV¶
solo STM32¶
- ALT: int¶
Modalità pin: funzione alternativa (push-pull). Usare con
alt=per selezionare a quale funzione periferica viene instradato il pin. Alias diAF_PP.
- 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_OD: int¶
Modalità a funzione alternativa open-drain (stesso valore di
ALT_OPEN_DRAIN).
- OUT_OD: int¶
Modalità di uscita open-drain (stesso valore di
OPEN_DRAIN).
solo mimxrt¶
- PULL_HOLD: int¶
Abilita la funzione bus-keeper / hold del pad – il pin mantiene il suo livello logico corrente invece di rimanere flottante.
- 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).