Come utilizzare i pulsanti con i pin GPIO del Raspberry Pi

Immagine di copertura del breadboard con pulsante

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

Indice dei contenuti

  • Come funzionano i pulsanti
  • Pulsanti a 4 pin
  • Utilizzare i pulsanti con i pin GPIO del Raspberry Pi
  • Come utilizzare i pulsanti
  • Hardware sui pulsanti
  • Comandi di importazione
  • Comandi di configurazione
  • Comandi in loop
  • Domande frequenti

Leggi anche: Come far lampeggiare i LED con il Raspberry Pi

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 unendo i due pin, completando il circuito. Ma se lasci andare, c’è un meccanismo a molla che separa di nuovo i pin.

Pulsante su breadboard solo

Leggi anche: Come trasformare il tuo Raspberry Pi in una stazione di videoconferenza

Pulsanti a 4 pin

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

Retro del pulsante

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

Pinout del pulsante a 4 pin

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

Leggi anche: Come programmare un Arduino con un Raspberry Pi

Utilizzare i pulsanti con i pin GPIO del Raspberry Pi

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

Cose di cui avrai bisogno

  • Pulsante (a 4 pin)
  • Resistenza (una tra 100Ω e 1000Ω dovrebbe funzionare)
  • Fili jumper
  • Voltmometro (opzionale)
  • Raspberry Pi
  • Monitor e tastiera (o SSH)

Leggi anche: Come installare Windows 11 su un Raspberry Pi 4

Come utilizzare i pulsanti

  1. Apri il tuo editor di codice preferito e incolla il seguente codice:
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 è HIGH!")  
    elif GPIO.input(7) == GPIO.LOW:  
        print("Pin 7 è LOW...")  
        sleep(0.15)
  1. Salva come “rpi-pushbutton.py” (o qualsiasi nome tu voglia purché l’estensione del file sia la stessa).

  2. Costruisci il circuito. Su un pin del pulsante, collegalo al pin 7 e a una resistenza in parallelo. Collega un filo jumper a un pin GND (pin 6, 7, 14, 20, 25, 30, 34 o 39) dall’altro lato di questa resistenza, quindi collega un altro filo jumper a un pin 3.3V (pin 1 o 17) su un pin separato del pulsante.

Schema e breadboard del pulsante

Suggerimento: 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 a destra di esso c’è il pin 2. Sotto il pin 1 c’è il pin 3, a destra c’è il pin 4, e così via.

Pinout del Raspberry Pi

  1. Accendi il tuo Raspberry Pi e apri il terminale. Usa cd per spostarti nella directory dello script Python, quindi inserisci python3 rpi-pushbutton.py. Se hai usato un nome di file diverso, usa quello invece di “rpi-pushbutton.”

Terminale Cd Python3 Rpi Pushbutton

  1. Dovresti vedere una nuova riga di testo che dice Pin 7 è LOW... ogni 0.15 secondi nel terminale. Se premi il pulsante, la nuova riga sarà Pin 7 è HIGH!.

Se scambi i pin GND e 3.3V, con 3.3V sulla resistenza e GND dall’altro lato del pulsante, invertirai la logica del pulsante. Uscirà Pin 7 è HIGH! tutto il tempo e diventerà Pin 7 è LOW quando premi il pulsante.

Resistenze Pull Up Vs Pull Down del pulsante

Leggi anche: Le migliori alternative al Raspberry Pi del 2024 che dovresti controllare ora

Hardware sui pulsanti

I pulsanti utilizzano due tipi di resistenze: pull-up e pull-down. Quella con 3.3V collegata alla resistenza è una resistenza pull-up. Essa tira la tensione verso l’alto. Nel frattempo, le resistenze pull-down tirano la tensione verso il basso collegando un pin GND a esse.

Puoi comunque utilizzare un pulsante senza una resistenza, ma farlo lascia il tuo pin GPIO in galleggiamento. Un pin GPIO in galleggiamento non riceve carica elettrica diretta, quindi cerca cariche nei suoi dintorni. Se c’è un forte campo elettromagnetico vicino a esso, ad esempio, misurerà solo quello.

Circuito del pulsante senza resistenza

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

I pin in galleggiamento possono fare alcune cose interessanti, però. Se lasci un pin in galleggiamento, può percepire la differenza di tensione nell’aria, misurando anche l’effetto di avere il tuo dito muoversi vicino al pin stesso. È come un sensore di presenza elettromagnetica o qualcosa del genere.

Peccato che non puoi semplicemente farlo sul Raspberry Pi, però. Perché sia utile, avrai bisogno di pin analogici, e il Raspberry Pi non li ha.

Codice per i pulsanti

Sapendo ciò, dovresti capire che il pin 7 rileva se passa 3.3V o 0V attraverso di esso. Se rileva 3.3V, allora si segnala come HIGH. Ma se rileva 0V, allora è LOW.

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

Comandi di importazione

Stiamo utilizzando 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 che digitare GPIO è equivalente a digitare RPi.GPIO. Puoi anche sostituirlo con altre stringhe, e il codice dovrebbe comunque funzionare purché lo formatti correttamente.

D’altra parte, from time import sleep importa solo una parte del modulo time di Python. Ti consente di utilizzare la funzione sleep().

Comandi di configurazione

Stiamo lavorando con i tre comandi del modulo RPi.GPIO sui comandi di configurazione per sistemare 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 sull’uso dei pin GPIO non appena avvii lo script Python. GPIO.setwarnings(False) impedisce che ciò accada.

GPIO.setmode(GPIO.BOARD) è un altro comando del modulo RPi.GPIO. Dice a Python che stai usando il pinout “BOARD”. Ci sono due tipi di pinout 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 singolo canale SOC Broadcom. BOARD è molto più facile da usare, poiché è sempre lo stesso indipendentemente dal tipo di scheda Raspberry Pi che utilizzi. Il pinout BCM può cambiare a seconda del modello che utilizzi.

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

Leggi anche: Guida per principianti all’Arduino

Comandi in loop

I sistemi embedded normalmente utilizzano solo alcune righe di codice e le eseguono indefinitamente. Diversi linguaggi di programmazione utilizzano modi diversi per farlo. Ma il concetto è lo stesso: utilizzano una sorta di ciclo. Per Python, questo è while True:.

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

while True: ti consente di eseguire il codice indefinitamente. Tutto ciò che metti in esso verrà eseguito per sempre finché c’è elettricità sulla scheda.

if GPIO.input(7) == GPIO.HIGH: è un’istruzione if. Dice che se il pin 7, che è un pin di input, legge come HIGH, allora dovrebbe eseguire tutto ciò che è all’interno.

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

Il prossimo è elif GPIO.input(7) == GPIO.LOW:. È fondamentalmente lo stesso di if GPIO.input(7) == GPIO.HIGH: tranne che per la prima parte: utilizza elif invece di if. Il codice elif sta per Else If. Ciò che dice è che se tutto il codice sopra di esso restituisce falso, allora Python dovrebbe eseguire questa istruzione else-if.

Infine, sleep(0.15) mette in pausa il codice per 0.15 secondi. Perché mettere in pausa il codice? È principalmente per problemi di prestazioni. Il Raspberry Pi invierà codice di output così velocemente che farà laggare un po’ la tua GUI. È ancora più pronunciato se stai utilizzando il tuo Raspberry Pi tramite SSH. Ci sarà un ritardo evidente che diventerà solo peggiore nel tempo. Mettere in pausa il codice lo rallenta per evitare problemi di prestazioni.

Leggi anche: Come programmare Arduino tramite Visual Studio Code utilizzando PlatformIO

Domande frequenti

È sicuro cambiare i pin del Raspberry Pi a caldo?

Cambiare a caldo, o sostituire i pin del Raspberry Pi mentre è acceso, è generalmente una cattiva idea. È sempre più sicuro rimuoverlo dall’alimentazione prima di cambiare.

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

Utilitariamente, sono fondamentalmente gli stessi. Ma avere quattro pin ti consente di collegare il pulsante a 4 pin a un altro pulsante in un circuito in serie.

Posso trasformare qualsiasi pin del Raspberry Pi in un pin di input?

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

Tutte le foto e gli screenshot di Terenz Jomar Dela Cruz