Come utilizzare i pulsanti con i pin GPIO Raspberry Pi

Se hai mai usato un LED con un Raspberry Pi, probabilmente sai come funzionano le uscite GPIO. Il codice fa fluire l’elettricità attraverso i pin GPIO (General Purpose Input / Output), passa attraverso i LED e si accende. Ma hai mai provato a fare il contrario? Con i pulsanti puoi fare esattamente il contrario. Questo tutorial ti mostra come trasformare un pin GPIO in un pin di input, ascoltando ogni pressione di un pulsante che fai!

Come funzionano i pulsanti

Un pulsante è un tipo di interruttore. Ha due pin conduttivi separati che impediscono un circuito completo essendo separati l’uno dall’altro. Quando premi un pulsante, stai effettivamente spingendo insieme i due pin, completando il circuito. Ma se lasci andare, c’è un meccanismo a molla che separa di nuovo i perni.

Pulsanti a 4 pin

Il tipico pulsante nei kit di sensori ha quattro pin, con ciascun pin separato dagli altri. Una piastra mobile di metallo si trova proprio sotto l’area del pulsante, che scende e collega tutti gli altri pin quando il pulsante viene premuto verso il basso.

Pulsante sul retro
Un pulsante a 4 pin ha quattro pin sotto il pulsante.

Troverai due piastre all’interno di un pulsante a 4 pin. Ciascuno è collegato a due pin esterni. Entrambe le piastre sono tenute separate l’una dall’altra e possono essere collegate solo premendo su una terza piastra: la piastra metallica sotto il pulsante.

Piedinatura del pulsante a 4 pin
Pinout di un pulsante a 4 pin. Un interruttore collega le due coppie di pin insieme.

In un certo senso, ci sono sempre due pin collegati in un pulsante. Quando si preme il pulsante a 4 pin, si collegano insieme tutti e quattro i pin.

Utilizzo di pulsanti con pin GPIO Raspberry Pi

Questa volta, stiamo facendo in modo che i pin GPIO di Raspberry Pi rilevino la pressione di un pulsante da un pulsante. Quando l’elettricità lo attraversa, il Raspberry Pi stamperà un messaggio che ti dice che sta funzionando.

Cose di cui avrai bisogno

  • Pulsante (4 pin)
  • Resistenza (una tra 100Ω e 1000Ω dovrebbe funzionare)
  • Cavi di collegamento
  • Voltmetro (opzionale)
  • Lampone Pi
  • Monitor e tastiera (o SSH)

Come utilizzare i pulsanti

  1. Apri la tua scelta di editor di codice e incolla il codice seguente:
import RPi.GPIO as GPIO
from time import sleep
 
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
 
while True:
  if GPIO.input(7) == GPIO.HIGH:
    print("Pin 7 is HIGH!")
  elif GPIO.input(7) == GPIO.LOW:
    print("Pin 7 is LOW...")
  sleep(0.15)
  1. Salva come “rpi-pushbutton.py” (o qualsiasi nome desideri purché l’estensione del file sia la stessa).
  1. Costruisci il circuito. Su un pin del pulsante, collegarlo al pin 7 e a un resistore in parallelo. Collegare un cavo di collegamento a un pin GND (pin 6, 7, 14, 20, 25, 30, 34 o 39) sull’altro lato di questo resistore, quindi collegare un altro cavo di collegamento a un pin da 3,3 V (pin 1 o 17 ) su un perno pulsante separato.
Pulsante Schema E Breadboard Ver
A sinistra: diagramma schematico del circuito del pulsante. A destra: pulsante live sulla breadboard. Designazioni dei colori dei cavi del ponticello: rosso = 3,3 V, marrone = pin 7 e nero = GND.

Mancia: per trovare il numero di pin corretto, tieni il tuo Raspberry Pi in modo che i pin GPIO si trovino nell’angolo in alto a destra. Il pin in alto a sinistra è il pin 1 e alla sua destra c’è il pin 2. Sotto il pin 1 c’è il pin 3, a destra c’è il pin 4 e così via.

Piedinatura Raspberry Pi
Pinout del Raspberry Pi
  1. Accendi il tuo Raspberry Pi e apri il terminale. Uso cd per passare alla directory dello script Python, quindi immettere python3 rpi-pushbutton.py. Se hai usato un nome file diverso, usa quello invece di “rpi-pushbutton”.
Pulsante terminale Cd Python3 Rpi
  1. Dovresti vedere una nuova riga di testo che dice Pin 7 is LOW... ogni 0,15 secondi sul terminale. Se si preme il pulsante, verrà visualizzata la nuova riga Pin 7 is HIGH!.

Se cambi i pin GND e 3,3 V, con 3,3 V sul resistore e GND sull’altro lato del pulsante, invertirai la logica del pulsante. Verrà prodotto Pin 7 is HIGH! tutto il tempo e diventa Pin 7 is LOW quando si preme il pulsante.

Pulsanti Pull Up Vs Pull Down resistori
A sinistra: un resistore di pull-down è realizzato collegando un pin 7 (marrone) GND (nero). A destra: il collegamento di 3,3 V (rosso) al pin 7 (marrone) crea invece un resistore di pull-up.

Hardware sui pulsanti

I pulsanti utilizzano due tipi di resistori: pull-up e pull-down. Quello con 3,3 V collegato al resistore è un resistore di pull-up. Tira la tensione verso l’alto. Nel frattempo, i resistori di pull-down riducono la tensione collegando un pin GND.

In relazione :  Qualificazioni alla Coppa del Mondo UEFA: Portogallo vs Macedonia del Nord Valutazioni dei giocatori mentre il Portogallo si qualifica alla Coppa del Mondo con una vittoria per 2-0

Puoi ancora utilizzare un pulsante senza resistore, ma in questo modo il pin GPIO rimane in sospeso. Un pin GPIO flottante non riceve alcuna carica elettrica diretta, quindi cerca le cariche nell’ambiente circostante. Se c’è un forte campo elettromagnetico vicino ad esso, ad esempio, lo misurerà semplicemente.

Circuito a pulsante senza resistenza
Il pin 7 (marrone) diventa un pin mobile quando 3,3 V (rosso) è separato da esso.

Ecco perché hai bisogno di un punto di riferimento. Se colleghi il pin GPIO a 0 V (GND) per impostazione predefinita, misurerà 0 V mentre il pulsante non è premuto. Ma se non lo fai, il valore del pin GPIO può essere ovunque, anche i volt negativi!

I perni mobili possono fare alcune cose interessanti, però. Se si lascia un perno fluttuante, può percepire la differenza di tensione nell’aria, misurando anche l’effetto del movimento del dito vicino al perno stesso. È come un presenza elettromagnetica sensore o qualcosa del genere.

È un peccato che tu non possa farlo semplicemente sul Raspberry Pi, però. Affinché sia ​​utile, avrai bisogno di pin analogici e il Raspberry Pi non li ha.

Codice per Pulsanti

Sapendo questo, dovresti capire che il pin 7 rileva se 3,3 V o 0 V lo attraversa. Se rileva 3,3 V, si segnala come ALTO. Ma se rileva 0 V, allora è BASSO.

Dividiamo il codice in tre parti: comandi di importazione, comandi di configurazione e comandi ripetuti.

Comandi di importazione

Stiamo usando due comandi di importazione:

import RPi.GPIO as GPIO
from time import sleep

import RPi.GPIO as GPIO importa il modulo RPi.GPIO, che ti consente di fare cose con i pin GPIO del tuo Raspberry Pi. Aggiungendo as GPIO alla fine, stai dicendo a Python di dire quella digitazione GPIO equivale a digitare RPi.GPIO. Puoi persino sostituirlo con altre stringhe e il codice dovrebbe continuare a funzionare fintanto che lo formatti correttamente.

D’altro canto, from time import sleep importa solo una parte del modulo time di Python. Ti permette di usare il sleep() funzione.

Comandi di configurazione

Stiamo lavorando con i tre comandi del modulo RPi.GPIO sui comandi di configurazione per correggere alcune impostazioni.

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

Il modulo RPi.GPIO normalmente mostra un messaggio che ti avverte dell’uso dei pin GPIO non appena avvii lo script Python. GPIO.setwarnings(False) impedisce che ciò accada.

GPIO.setmode(GPIO.BOARD) è un altro comando dal modulo RPi.GPIO. Dice a Python che stai usando la piedinatura “BOARD”. Ci sono due tipi di piedinatura in RPi.GPIO: BOARD e BCM. BOARD ti consente di scegliere i pin utilizzando i numeri dei pin. BCM (abbreviazione di “Broadcom”) ti consente di scegliere i pin con il loro canale SOC Broadcom individuale. BOARD è molto più facile da usare, poiché è sempre lo stesso, indipendentemente dal tipo di scheda Raspberry Pi che utilizzi. La piedinatura BCM può cambiare a seconda del modello utilizzato.

In relazione :  Come disabilitare il controllo ortografico di OneNote

Infine, GPIO.setup(7, GPIO.IN) consente di impostare il pin 7 come pin di input. Usa il .setup() funzione e legge 7 come pin che stai cercando di scegliere. GPIO.IN significa che stai cercando di impostarlo come pin di input.

Comandi in loop

I sistemi embedded normalmente usano solo poche righe di codice e le ripetono indefinitamente. Linguaggi di programmazione diversi usano modi diversi per farlo. Ma il concetto è lo stesso: usano una sorta di loop. Per Python, ecco while True:.

while True:
  if GPIO.input(7) == GPIO.HIGH:
    print("Pin 7 is HIGH!")
  elif GPIO.input(7) == GPIO.LOW:
    print("Pin 7 is LOW...")
  sleep(0.15)

while True: ti consente di eseguire il ciclo del codice indefinitamente. Tutto ciò che ci metti durerà per sempre finché c’è elettricità sul tabellone.

if GPIO.input(7) == GPIO.HIGH: è un’istruzione if. Dice che se il pin 7, che è un pin di input, si legge come HIGHquindi dovrebbe fare tutto al suo interno.

print("Pin 7 is HIGH!") è all’interno di un’istruzione if. Tutto ciò che fa è stampare Pin 7 is HIGH! sulla consolle. Puoi sostituirlo con qualsiasi stringa, numero o variabile che li contenga.

Il prossimo è elif GPIO.input(7) == GPIO.LOW:. È fondamentalmente lo stesso di if GPIO.input(7) == GPIO.HIGH: tranne la prima parte: usa elif invece di if. Il codice elif sta per Altro Se. Quello che dice è che se tutto l’altro codice sopra restituisce false, Python dovrebbe eseguire questa istruzione else-if.

Infine, sleep(0.15) sospende il codice per 0,15 secondi. Perché mettere in pausa il codice? È principalmente per problemi di prestazioni. Il Raspberry Pi invierà il codice di output così velocemente che farà ritardare un po’ la tua GUI. È ancora più pronunciato se stai usando il tuo Raspberry Pi tramite SSH. Ci sarà un notevole ritardo che peggiorerà nel tempo. La sospensione del codice lo rallenta per evitare problemi di prestazioni.

Domande frequenti

È sicuro sostituire a caldo i pin sul Raspberry Pi?

La sostituzione a caldo o la sostituzione dei pin del Raspberry Pi mentre è acceso, è generalmente una cattiva idea. È sempre più sicuro rimuoverlo dall’alimentazione prima di passare.

Cosa rende i pulsanti a 4 pin migliori dei pulsanti a 3 pin?

Dal punto di vista dell’utilità, sono fondamentalmente la stessa cosa. Ma avere quattro pin consente di collegare il pulsante a 4 pin a un altro pulsante in un circuito in serie.

Posso attivare qualsiasi pin sul Raspberry Pi come pin di input?

Il Raspberry Pi può avere 40 pin, ma solo 27 di questi sono GPIO. Puoi programmare solo pin GPIO in pin di input e output. La maggior parte degli IDE non ti consente di riprogrammare un pin non GPIO in un pin di input.