Una delle cose più apprezzate e che più caratterizza da sempre qualsiasi Raspberry Pi, incluso il nuovo Pi 4, è la possibilità di poterlo usare per costruire aggeggi fantastici di qualsiasi genere, dai robot alle console da gioco retrò, fino ai fart detectors – sì, avete capito bene, sono rilevatori di puzzette.
La maggior parte dei sensori, motori, luci e altre periferiche che rendono possibili questi progetti si collegano ai pin GPIO dei Pi. Ogni modello, dal Pi B+ in poi ha avuto 40 pin GPIO, a voler essere precisi, in realtà, Pi Zero e Zero W avevano 40 fori su cui saldare i pin o i cavi.
Questa guida nasce per parlare delle nuove funzionalità del Raspberry Pi 4, che viene ancora fornito con 40 pin GPIO, ma che ha alcune nuove connessioni aggiuntive come I2C, SPI e UART.
Affinché i vostri progetti diventino realtà dovete conoscere il pinout del Raspberry Pi GPIO, ossia la mappa e la spiegazione di quello che può fare ogni pin. Mentre alcuni pin forniscono elettricità, altri sono GND (terra) e altri ancora si collegano a diversi tipi di interfacce.
I pin GPIO (General Purpose Input Output)
Il GPIO è l'aspetto più semplice, ma accessibile del Raspberry Pi. I pin GPIO sono digitali, vuol dire che possono avere solo due stati, spento o acceso.
Possono avere una direzione per ricevere o inviare corrente (input, output rispettivamente) e questo è tutto completamente controllabile tramite linguaggi di programmazione come Python, JavaScript, node-RED ed altri.
I pin funzionano con una tensione di 3,3 V e con un assorbimento massimo di corrente di 16 mA. Questo significa che possiamo alimentare in modo sicuro, da un singolo pin GPIO, tramite un resistore, uno o due LED.
Per alimentare qualsiasi altra cosa richieda più corrente, ad esempio un motore DC, è decisamente necessario usare componenti esterni in modo da evitare di danneggiare il GPIO.
Per controllare il GPIO con Python va per prima cosa importata una libreria di codice scritto in precedenza. La più comune e diffusa è Rpi.GPIO, usata per creare migliaia di progetti sin dagli albori del Raspberry Pi.
In tempi più recenti è stata introdotta un’altra libreria, denominata GPIO Zero, che offre un’esperienza più semplice per chi è nuovo a Python e all’elettronica di base. Entrambe le librerie sono preinstallate nel sistema operativo Raspbian.
Per quanto riguarda la nomenclatura dei pin GPIO, vi sono vari modi per identificarli; il metodo più semplice ed ovvio è sicuramente quello che fa riferimento alla loro posizione fisica.
Partendo in alto a sinistra del GPIO, e con questo intendiamo il pin più vicino allo slot della micro SD, abbiamo il pin fisico 1 che fornisce alimentazione 3v3.
A destra di quel pin c'è il pin fisico 2 che fornisce 5v di potenza. Il numero del pin continuerà a crescere man mano che si scende lungo le colonne, come avrete capito su quella di sinistra troveremo tutti i pin con numerazione dispari e su quella di destra quelli pari.
C’è un altro metodo usato, ed è la numerazione dei pin di Broadcom (BCM) (GPIO pin numbering) che però all’utente medio può sembrare essere caotica, con GPIO17, 22 e 27 che si susseguono con quella che parrebbe una poca riflessione sulla numerazione logica.
In realtà la mappatura dei pin BCM si riferisce ai pin GPIO che sono stati direttamente collegati SoC del Raspberry Pi. In sostanza, abbiamo collegamenti diretti con il cervello del nostro Pi per collegare sensori e componenti da usare nei nostri progetti.
La maggior parte dei tutorial Raspberry Pi che vi capiterà di vedere usa questo schema di numerazione, anche perché è quello supportato ufficialmente dalla Raspberry Pi Foundation. Pertanto, se volete entrare in questo mondo, è bene che impariate questo schema di numerazione al più presto poiché, nel tempo, diventerà lo standard che utilizzerete. Si noti inoltre che la numerazione dei pin BCM e GPIO fanno riferimento allo stesso schema. Quindi per esempio GPIO17 è uguale a BCM17.
Infine, alcuni pin GPIO hanno anche funzioni secondarie che permettono loro di interfacciarsi con diversi tipi di dispositivi che usano i protocolli I2C, SPI o UART. Ad esempio, GPIO3 e GPIO4 sono anche pin SDA e SCL I2C usati per collegare i dispositivi tramite il protocollo I2C.
Per usare questi pin con questi protocolli, è necessario abilitare le interfacce usando l'applicazione Raspberry Pi Configuration disponibile nel sistema operativo Raspbian, nel menu Preferenze.
I2C, SPI e UART: Quale utilizzare?
Nei successivi paragrafi entreremo nello specifico per vedere quali sono le differenze tra I2C, SPI e UART. Ma se vi state chiedendo qual è il pin più appropriato per connettere un determinato dispositivo, allora la risposta è semplice: controllate sempre la scheda tecnica, dove sicuramente è riportato.
Ad esempio, un piccolo schermo LED potrebbe richiedere l’SPI ed un altro potrebbe invece richiedere il protocollo I2C (UART è usato da davvero pochi dispositivi). Se leggete la documentazione fornita con un prodotto (a condizione che ne abbia), di solito vi dirà quali pin Pi usare.
Se siete utenti di Raspberry Pi 4 allora sappiate che ora i pin SPI, I2C e UART disponibili sono molti di più rispetto ai precedenti modelli. Queste interfacce extra vengono attivate tramite overlay della struttura ad albero del dispositivo e possono fornire quattro connessioni SPI, I2C e UART aggiuntive.
I2C - Inter-Integrated Circuit
L’I2C è un protocollo seriale a due fili a bassa velocità usato per collegare dispositivi mediante lo standard I2C. I dispositivi che usano questo standard hanno una relazione di tipo master-slave.
Possono esserci molteplici master, ma ricordate che ogni dispositivo slave richiede un indirizzo univoco, ottenuto dal produttore NXP, un tempo noto come Philips Semiconductors.
Ciò significa che possiamo parlare a più dispositivi tramite una singola connessione I2C poiché ogni dispositivo è unico e rilevabile grazie a comandi Linux come i2cdetect.
Come abbiamo accennato prima, l’I2C ha due connessioni: SDA e SCL. Come funzionano? Inviando dati da e verso la connessione SDA, con velocità controllata dal pin SCL. L’I2C è un modo semplice e veloce per collegare al vostro progetto una gamma di componenti abbastanza eterogenea, si va da schermi LCD/OLED ai sensori di temperatura, fino ai convertitori analogico-digitali da usare con fotoresistori e tanti altri.
Pur risultando un po’ più ostico da comprendere rispetto ai pin GPIO standard, la conoscenza acquisita dall’apprendimento dell’I2C vi sarà di grande aiuto quando comprenderete come connettere sensori di maggior precisione per l’utilizzo sul campo.
Il Raspberry Pi ha due connessioni I2C su GPIO2 e GPIO3 (SDA e SCL) e sono I2C0 (master), mentre i pin fisici 27 e 28 sono pin I2C che consentono al Pi di comunicare con l'HAT (Hardware Attached on Top) compatibile aggiunto alla scheda.
SPI - Serial Peripheral Interface
SPI è un secondo protocollo per il collegamento di dispositivi compatibili disponibile sul vostro Raspberry Pi. Funziona similmente all’I2C in quanto esiste una relazione master-slave tra Raspberry Pi e i dispositivi collegati.
Generalmente SPI viene usato per inviare dati su brevi distanze tra microcontrollori e componenti quali registri a scorrimento (shift registers), sensori e persino una scheda SD. I dati sono sincronizzati usando un clock (SCLK su GPIO11) dal master (il Raspberry Pi) e i dati vengono inviati dal Pi al componente SPI collegato usando il pin MOSI (GPIO10).
MOSI sta per Master Out Slave In. In maniera contraria se il componente deve rispondere al nostro Pi, allora invierà i dati usando il pin MISO (GPIO9) che sta per Master In Slave Out.
UART - Universal Asynchronous Receiver / Transmitter
Conosciuti anche solamente come “Serial”, i pin UART (trasmittente GPIO14 e ricevente GPIO15) forniscono un accesso console/terminale per l’installazione "headless", che significa potersi collegare al Pi senza tastiera o un dispositivo di puntamento.
Normalmente, il modo più semplice per eseguire una configurazione headless su Raspberry Pi è semplicemente controllare il Pi tramite una rete o una connessione USB diretta (nel caso del Pi zero).
Tuttavia, se non è presente alcuna connessione di rete, è possibile avere un controllo headless sul Pi tramite un cavo seriale o USB collegati a una scheda seriale da un computer su cui si esegue una console.
UART è un protocollo eccezionalmente affidabile e garantisce l'accesso a un Raspberry Pi senza la necessità di apparecchiature aggiuntive. È solamente necessario ricordarsi di abilitare la console seriale nell'applicazione Raspberry Pi Configuration. Detto questo, è anche improbabile che abbiate voglia o necessità di fare tutto questo, ma il supporto UART è presente se ne avete bisogno.
Ground (gnd)
Ground è comunemente chiamato GND, o gnd - ma tutti significano la stessa cosa. GND è dove tutte le tensioni possono essere misurate e dove si completa un circuito elettrico.
È il nostro punto zero e collegando un componente, come un LED a una fonte di alimentazione e alla messa a terra, il componente diventa parte del circuito e la corrente fluisce attraverso il LED producendo luce.
In fase di costruzione di qualsiasi circuito, è sempre consigliabile effettuare i collegamenti di messa a terra prima di applicare qualsiasi potenza in quanto questi impediranno eventuali problemi con componenti sensibili.
Il Raspberry Pi ha otto connessioni di messa a terra lungo il GPIO e ciascuno di questi pin gnd si collega a una singola connessione di messa a terra.
Pertanto, la scelta di quale pin da utilizzare è esclusivamente legata alle preferenze personali o dalla praticità durante il collegamento dei componenti.
5v
I pin 5v consentono l'accesso diretto all'alimentazione 5v proveniente dall'adattatore principale, meno energia rispetto a quella utilizzata dal Raspberry Pi stesso.
Un Pi può essere alimentato direttamente da questi pin e può anche alimentare altri dispositivi 5v. Bisogna essere coscienti di quel che si sta facendo quando si vanno ad utilizzare questi pin in maniera diretta, quindi fate attenzione e controllate le tensioni prima di effettuare una connessione, perché queste bypassano le funzioni di sicurezza, come il regolatore di tensione e il fusibile che sono lì per proteggere il Pi.
Quindi occhio a quello che fate, poiché se bypassate quest'ultime con una tensione più alta, potreste rendere il vostro Pi inutilizzabile.
3v3
Il pin 3v è lì per offrire un'alimentazione stabile a 3,3 V per i componenti e testare i LED. In realtà, è raro che si consideri l’uso di questo pin in una build, ma ha un uso speciale. Quando si collega un LED al GPIO, bisogna prima assicurarsi che il LED sia cablato correttamente e che si accenda.
Collegando la lunga gamba del LED, l'anodo al pin 3.3v tramite un resistore e la gamba più corta, il catodo a uno dei pin Ground (gnd), possiamo controllare che il nostro LED si illumini e funzioni. Questo permette di eliminare un errore hardware dal progetto e ci consente di iniziare a costruirlo con sicurezza.