Gestire linee gpio sul Raspberry pi

Sapiamo che le schede Raspberry Pi offrono un panorama di impiego molto ampio, grazie anche alla presenza di un connettore maschio a 40 pin (Raspberry Pi 1, 2, 3, Zero) che interfaccia la scheda a diverse tipologie di circuiti elettronici. Questa possibilità è data da una serie di linee GPIO che possono essere programmate anche con Python.

Cosa sono le linee GPIO

Le linee GPIO (general purpose input output) sono dei collegamenti tra il processore e i pin del connettore della scheda. Queste linee possono essere programmate sia per funzionare come porte di ingresso sia come porte di uscita. Alcune di queste linee hanno delle funzionalità aggiuntive infatti possono essere configurate come linee UART, SPI o I2C.

Pin function

Per conoscere la posizione e la denominazione delle linee GPIO nel connettore a 40 pin del Raspberry Pi utilizzo il comando pinout. Apriamo il terminale LxTerminal e digitiamo il seguente comando: premiamo invio e dopo qualche istante avremo sul terminale la rappresentazione delle periferiche della scheda ed in particolare del connettore a 40 pin:
In verde sono elencate le linee GPIO, in grigio i pin collegati a GND, in rosso le linee di alimentazione a 5Vdc ed in celeste le linee di alimentazione a 3,3V La programmazione delle porte IO può avvenire utilizzando diversi linguaggi di programmazione, ma naturalmente andremo ad utilizzare il linguaggio Python perché è quello che viene maggiormente usato su questa piattaforma (almeno credo!).

Gestire le linee GPIO con Python

Configurare pin Gpio in uscita

Per utilizzare le porte IO abbiamo a disposizione l’attributo GPIO del modulo RPi. Questo attributo mette a disposizione i metodi per definire una linea come ingresso o come uscita e ne permette di controllarne lo stato. Se è una linea di uscita è possibile porla a livello logico alto oppure basso, se è una linea di ingresso è possibile leggere il valore logico disponibile sul pin. Per scrivere il programma Python usiamo Thonny, disponibile come software preinstallato nelle ultime versioni di Raspbian. scriviamo la prima istruzione che definisce l’attributo GPIO L’istruzione seguente, invece, è necessaria per definire il modo di riferimento del pin. In pratica possiamo riferirci ad un pin tramite la numerazione del connettore (da 1 a 40) o tramite la numerazione del processore (ad esempio gpioxx). Usando l’istruzione seguente utilizzeremo la numerazione gpio del processore quindi per definire il pin 40 (gpio21) come linea di uscita dovremmo scrivere la seguente istruzione: il metodo setup accetta come primo argomento il numero della linea gpio, in questo caso la 21, che corrisponde al pin 40. Se avessi usato questa istruzione per definire il riferimento ai pin: nel metodo setup avrei dovuto scrivere: le due istruzioni precedenti producono lo stesso risultato, ovvero definire il pin 40 (gpio21) come una uscita. Una volta definito il pin come linea digitale di output possiamo gestirne lo stato con la seguente istruzione: di seguito il codice completo: Di seguito il circuito uttizzato per verificare la corretta esecuzione del codice
linee gpio configurate come uscita

Configurare pin Gpio in ingresso

Allo stesso modo di come abbiamo configurato un pin in uscita possiamo utilizzare alcune semplici istruzioni per impostare un pin in ingresso. L’istruzione seguente configura la linea Gpio 20 (pin 38) come ingresso: Per leggere il livello logico presente sul pin dobbiamo utilizzare la seguente istruzione Il seguente circuito permette di avere sul pin 38 (gpio20) un livello logico alto (+3.3Vdc) e premendo il pulsante un livello logico basso (0Vdc).
linee gpio configurate come ingresso
Il codice per verificare lo stato del pin è il seguente: Ogni volta che premeremmo il pulsante verrà printata la stringa “Pulsante premuto”. Queste che abbiamo visto sono le istruzioni basilari che ci permettono di interfacciare il Raspberry Pi al mondo esterno utilizzando le linee GPIO come ingressi e uscite digitali.