GPIO (General Purpose Input/Output) es un puerto accesible por un conector de 26 pines que sirve a la Raspberry Pi para comunicarse con dispositivos externos. Del puerto GPIO algunos pines se pueden configurar como entradas o como salidas digitales.
Como el lector habrá comprobado , en efecto ,Raspberry NO Pi incluye ningun puerto analógico tanto de entrada o de salida como suelen disponer otras placas como Arduino o Netduino
También incorpora pins de masa y alimentación de 5V y 3,3V, y pins de comunicación Serial, I2C y SPI pre-configurados.
Estos pins trabajan a un voltaje de 3,3V y, al contrario que un Arduino, los pins GPIO de la Raspberry Pi no tienen ninguna protección de circuitería, por lo que hay que ir con muchisimo cuidado a la hora de conectar dispositivos a estos pins.
Lo que haremos a continuación será controlar un led que estará conectado a un pin del puerto GPIO de la Raspberry Pi de tres maneras distintas: a través del terminal, a través de un script Python y a través de la librería WiringPi.
Hay 2 sistemas de numeración de los 26 pines del GPIO: BCM y BOARD:
- El sistema BCM usa el número de pin GPIO correspondiente. En nuestro caso usamos el GPIO4, por lo tanto ponemos el número 4.
- El sistema BOARD la numeración se basa en el orden de los pins de arriba a abajo de la placa. En esta imagen se aprecia mejor la diferencia entre los dos sistemas:
Conectaremos un led con una resistencia de 220 ohms en serie entre el pin 4 y una masa del puerto GPIO. El esquema de conexión es bastante simple ( incluso se puede obviar la resistencia) bastando conectar entre el pin GPIO4 y cualquier masa un led
Controlar GPIO a través del terminal
Primero, vamos a controlar el puerto GPIO desde un terminal directamente a través de directorios. Consiste en exportar los pins de los directorios del puerto GPIO y controlarlos a través de comandos. Para esto nos tendremos que identificar como usuario root a través del siguiente comando:
sudo -i
Seguidamente, tenemos que exportar el pin que queremos controlar (en nuestro caso el número 4):
echo 4 > /sys/class/gpio/export
Indicamos si queremos que sea un pin de entrada (in) o salida (out):
echo out > /sys/class/gpio/gpio4/direction
Finalmente, ponemos la salida a nivel alto para encender el led:
echo 1 > /sys/class/gpio/gpio4/value
Para volver a apagar el led, ponemos la salida del pin a nivel bajo:
echo 0 > /sys/class/gpio/gpio4/value
Una vez hemos terminado, tenemos que eliminar la conexión con el pin GPIO:
echo 4 > /sys/class/gpio/unexport
Controlar GPIO a través de un script Python
Para poder controlar el puerto GPIO a través de Python, primero tendremos que descargarnos una librería para Python con este comando:
sudo apt-get install python-dev
Luego, instalamos el modulo RPi.GPIO con el siguiente comando:
sudo apt-get install python-rpi.gpio
Después, creamos un archivo Python:
sudo nano led.py
Y escribimos el siguiente código para hacer parpadear el led:
import RPi.GPIO as GPIO #Libreria Python GPIO
import
time
#Libreria Time
GPIO.setmode(GPIO.BCM) #Establecemos el sisetma de numeracion de pins BCM
GPIO.setup(4, GPIO.OUT) #Ponemos el Pin GPIO4 como salida
while
True:
print
"ON"
GPIO.output(4, GPIO.HIGH)
time
.sleep(1)
print
"OFF"
GPIO.output(4, GPIO.LOW)
time
.sleep(1)
GPIO.cleanup() #Reiniciar configuracion pins GPIO
Para guardar el script, pulsamos CTRL+X, luego S e INTRO. Finalmente ejecutamos el script Python escribiendo este comando:
sudo python led.py
El led irá parpadeando y en el terminal indicará el estado del led ON/OFF. Para salir del programa, pulsamos CTRL+C.
Controlar GPIO a través de la librería WiringPi
WiringPi es una librería para la Raspberry Pi creada por Gordon Henderson para acceder y usar el puerto GPIO a través de lenguaje C. De esta manera, programar los pins GPIO es muy parecido a programar un Arduino. Esta librería soporta lectura y escritura analógica a través de módulos externos (recordemos que los pins GPIO no tienen entradas analógicas). Esta librería tiene su propia numeración de los pins GPIO:
En su página web se encuentra más información sobre la librería.
Para instalar la librería en la Raspberry Pi se debe descargar a través de GIT. Si aún no tenemos instalado GIT en la Raspberry Pi, escribimos el siguiente comando:
sudo apt-get install git-core
Ahora, decargamos WiringPi:
git clone git://git.drogon.net/wiringPi
I luego:
cd wiringPi
git pull origin
E instalamos:
cd wiringPi
./build
Una vez instalada la librería, creamos un archivo:
sudo nano led.c
Escribimos el siguiente código:
#include //Importamos la libreria WiringPi
int
main()
{
wiringPiSetup () ;
pinMode (7, OUTPUT);
//GPIO4 corresponde al pin 7 de WiringPi
for
(;;)
{
digitalWrite (7, HIGH);
delay (500);
digitalWrite (7, LOW);
delay (500);
}
}
Para guardar pulsamos CTRL+X, luego S e INTRO. Ahora tenemos que compilar el código:
gcc -Wall -o led led.c -lwiringPi
I lo ejecutamos:
sudo ./led
Para salir del programa, pulsamos CTRL+C.
Sin duda manejar los puertos digitales nos servirá para futuros proyectos donde queramos conectar dispositivos externos en la Raspberry Pi.