Manejo de puertos en la RaspBerry Pi


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:

NUMERACION

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:

gpioWiringpi

En su página web se encuentra más información sobre la librería.

http://wiringpi.com/

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, pero usar  cshell para controlar nuestra Raspberry P nos puede servir para comprobar funcionalidades, pero  hay un método mucho mas potente  y flexible que además nos permite  controlar esta placa desde Internet  desde una app sin tener que instalar nada de forma manual en la RP,  si le interesa probar  mire este otro post  donde veremos el potente entorno de Cayenne  

 

 

Anuncios

5 comentarios el “Manejo de puertos en la RaspBerry Pi

  1. Juan Carlos dice:

    Hola.
    Te falta #include
    Saludos

    Me gusta

  2. Juan Carlos dice:

    #include “”

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s