Cos'è il GPIO
Il connettore a 40 pin presente su ogni Raspberry Pi si chiama GPIO (General Purpose Input/Output) e permette alla scheda di dialogare con il mondo esterno: accendere un LED, leggere lo stato di un pulsante, pilotare un relè, comunicare con un sensore. A differenza di Arduino, i pin GPIO del Raspberry lavorano a 3,3 Volt e non sono tolleranti ai 5V: collegare un segnale a 5V direttamente su un pin GPIO può danneggiare permanentemente la scheda, quindi va sempre verificata la tensione di lavoro di ogni componente prima di collegarlo.
Due modi di numerare i pin
Una delle prime fonti di confusione per chi inizia è che esistono due sistemi di numerazione per gli stessi pin fisici. La numerazione BOARD conta semplicemente la posizione fisica del pin sul connettore, da 1 a 40. La numerazione BCM (Broadcom) fa invece riferimento al numero del canale GPIO del chip, che non coincide con la posizione fisica. Il comando pinout, eseguito nel terminale del Raspberry Pi OS, mostra una mappa completa con entrambe le numerazioni: è la prima cosa da consultare prima di collegare qualsiasi cavo.
Controllare un pin con gpiozero
La libreria Python più semplice per iniziare si chiama gpiozero ed è preinstallata su Raspberry Pi OS. Accendere un LED collegato (con la relativa resistenza di protezione) richiede poche righe: si crea un oggetto LED passando il numero di pin BCM, e si richiamano i metodi on(), off() o blink(). Per leggere lo stato di un pulsante il concetto è analogo con la classe Button, che espone la proprietà is_pressed e permette anche di collegare una funzione da eseguire automaticamente alla pressione, tramite when_pressed.
Le resistenze pull-up e pull-down
Quando un pin è configurato come ingresso e non è collegato a nulla, il suo stato elettrico è indefinito e può oscillare tra 0 e 1 in modo casuale (il classico "rumore" elettrico). Per questo un pulsante va sempre collegato con una resistenza di pull-up o pull-down, che forza il pin a uno stato noto quando il pulsante non è premuto. Molti pin GPIO del Raspberry hanno resistenze di pull-up/pull-down interne attivabili via software, e gpiozero le gestisce automaticamente nella maggior parte dei casi comuni, semplificando non poco il cablaggio.
Prima di iniziare
Tre regole pratiche prima di collegare qualsiasi componente: verifica sempre la tensione di lavoro (3,3V, non 5V), spegni il Raspberry Pi mentre modifichi i collegamenti, e usa sempre una resistenza di protezione in serie a un LED per evitare di superare la corrente massima erogabile da un singolo pin (circa 16mA).