Gpio Raspberrypi2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 12

Los pines GPIO de la Raspberry Pi son los grandes olvidados, pero que sabiendo cmo

utilizarlos nos abre un mundo de posibilidades. De eso trata este artculo, de abrirte las
puertas de este mundo e introducirte en la programacin y presentarte las posibilidades de
los GPIO. En prximos post tambin te ensearemos a conectar Arduino y la Raspberry Pi
mediante estos pines para conseguir grandes proyectos uniendo el poder de ambas
plataformas.

ndice [Ocultar]

1 Introduccin a los GPIO y esquemas

2 Esquemas de los GPIO segn el modelo


o 2.1 Model B (Rev 1.0)
o 2.2 Model A/B (Rev 2.0)
o 2.3 Model A+, B+, y 2

3 Introduccin a los HATs y Plates


4 Introduccin al uso de los GPIO
5 Programacin avanzada de los GPIO
o 5.1 C y wiringPi
o 5.2 Python

5.3 Scratch y GPIO

5.4 BASIC

Introduccin a los GPIO y esquemas

GPIO (General Purpose Input/Output) es, como su propio nombre indica, un


sistema de E/S (Entrada/Salida) de propsito general, es decir, una serie de
conexiones que se pueden usar como entradas o salidas para usos mltiples. Estos
pines estn incluidos en todos los modelos de Raspberry Pi, para que puedas
realizar proyectos interesantes como lo haras con Arduino.
Los GPIO representan la interfaz entre la Raspberry Pi y el mundo exterior. Y
con ellos podrs hacer multitud de proyectos, desde hacer titilar un LED hasta otros
mucho ms sofisticados. Pero para eso debes saber sus caractersticas y como se
programan. Lo primero variar en funcin de la revisin de placa que tengas o del
modelo.
Todos los pines son de tipo unbuffered, es decir, no disponen de buffers de
proteccin, as que debers tener cuidado con las magnitudes (voltajes,
intensidad,) cuando conectes componentes a ellos para no daar la placa. Como
podrs apreciar en las imgenes posteriores, no todos los pines tienen la misma
funcin:
Pines de alimentacin: puedes apreciar pines de 5v, 3v3 (limitados a 50mA) y
tierra (GND o Ground), que aportan alimentacin a estos voltajes para tus circuitos.
Te pueden servir como una fuente de alimentacin, aunque tambin puedes utilizar
otras fuentes (pilas, fuentes de alimentacin externas, etc). Recuerda que son
unbuffered y debes tener cuidado para no daar la placa.
DNC (Do Not Connect): son pines que por el momento no tienen funcin, pero en
futuras implementaciones son utilizados para otros fines. Por eso solo los vas a
encontrar en modelos ms primitivos de la Raspberry Pi. En las actuales placas han
sido marcados como GND.
GPIO normales: son conexiones configurables que puedes programar para tus
proyectos, tal como te ensearemos ms adelante.
GPIO especiales: dentro de stos se encuentran algunos pines destinados a una
interfaz UART, con conexiones TXD y RXD que sirven para comunicaciones en
serie, como por ejemplo, conectar con una placa Arduino. Tambin podemos ver
otros como SDA, SCL, MOSI, MISO, SCLK, CE0, CE1, etc, los cuales
explicaremos su funcionamiento ms adelante.

Esquemas de los GPIO segn el modelo


Todas las placas y revisiones no disponen de esquemas GPIO iguales. Aqu te
ofrecemos todos los esquemas de las diferentes placas que existen por el momento.

En las siguientes imgenes podemos apreciar los distintos layouts de los modelos
existentes por el momento:

Model B (Rev 1.0)

Model A/B (Rev 2.0)

Model A+, B+, y 2

Como puedes comprobar, existen tres esquemas bsicos. Los de la revisin 1.0
del modelo B, los incluidos en la revisin 2.0 del modelo A y B, y los modernos A+,
B+ y 2 que comparten el mismo esquema de conexiones.

Introduccin a los HATs y Plates

Aunque dedicaremos otro post a realizar una mega comparativa de HATs


(Hardware Attached on Top) y Plates para la Raspberry Pi, con ejemplos de sus
usos, vamos a explicar qu son y qu tienen que ver con los GPIO. Si ya ests
familiarizado con Arduino, es fcil captar la idea de lo que son estos componentes,
puesto que en el mundillo Duino se conocen como Shields o mdulos y Plates.
Los Plates son placas agujereadas para montar circuitos fcilmente. Algo as
como una protoboard que puede ser conectado a los GPIO de la Raspberry Pi. Son
un buen complemento si deseas montar dispositivos electrnicos de montaje
superficial. Como ves, su funcin es idntica a su equivalente para Arduino.

En cambio, los HATs son similares a los shields o escudos de Arduino. Es decir,
placas de expansin que se pueden conectar a los GPIO para agregar
funcionalidades a la placa. Si te fijas en el nombre, coincide con la palabra inglesa
sombrero y que hace referencia a la forma en que se conectan con la Raspi.
Al ser un complemento nuevo, stos solo son compatible con los modelos de
Raspberry Pi que comparten el mismo esquema de conexiones. Si recuerdas el
apartado anterior, stos son el A+, B+ y la nueva versin 2 de la placa SBC. Pero
en el mercado podrs encontrar diferentes fabricantes que suministran este tipo de
HATs para Raspberry Pi. Uno de ellos es AdaFruit, que vende tarjetas de expansin
denominadas HatADay y que contienen pantallas TFT, GPS, servomecanismos,
complementos para robtica, etc

Introduccin al uso de los GPIO

Al igual que Arduino emplea su entorno Arduino IDE para crear sketchs o cdigos
fuente para programar los proyectos, la Raspberry Pi permite tambin programar
sus GPIO, pero con mayor flexibilidad. Se puede realizardesde tu
distribucin utilizando multitud de herramientas con diversos lenguajes de
programacin (Python, Java, C,), o desde la consola utilizando sencillos scripts y
comandos.
Por lo general, la Raspberry Pi utiliza distribuciones Linux. Como buen UNIX, el
sistema operativo tratar a todos los elementos, incluido el hardware, como un
fichero. Ya sabes que en Windows existen unidades (C:, D:,) o dispositivos
hardware. Pero en un *nix todo son ficheros, como por ejemplo el disco duro
(/dev/sda), la unidad de DVD (/dev/dvd), tarjetas SD (/dev/mmcblk0), etc
Pues bien, los puertos GPIO tambin sern tratados como un fichero ms, aunque
no se encuentren en el dierctorio /dev, y por tanto podrs emplear los comandos
bsicos de la consola para gestionar ficheros. Por ejemplo, si queremos controlar
un LED, podramos entrar en la consola (para nuestros ejemplos hemos empleado
Raspbian) y escribir lo siguiente:

echo 17 > /sys/class/gpio/export

Con esta lnea crearamos un fichero con la estructura del GPIO correspondiente
para que pueda ser manipulado. Luego se debera de configurar como entrada o
salida, segn lo que quieras. En nuestro caso como salida, puesto que queremos
alimentar al LED para encenderlo:
echo out > /sys/class/gpio/gpio17/direction

Ahora se podra encender o apagar. Para ello le podemos dar valores a la salida
que hemos creado. Si le damos valor 1 se encender y con valor 0 se apagar:
echo 1 > /sys/class/gpio/gpio17/value
echo 0 > /sys/class/gpio/gpio17/value

Una vez termines el experimento, puedes borrar la entrada para realizar otro
ejercicio en el mismo pin o en otro diferente:
echo 17 > /sys/class/gpio/unexport

Simple verdad? Pues ahora puedes utilizar tu imaginacin y utilizar otros


comandos que normalmente utilizas con ficheros y directorios para gestionar los
GPIO. Por ejemplo, puedes listar los GPIO que tienes activos con:
cd /sys/class/gpio
ls

Tambin puedes crear scripts para Bash (o el intrprete que utilices). Por ejemplo,
continuando con el ejemplo del LED, se puede crear un script que podamos ejecutar
en cualquier momento sin tener que poner los comandos uno a uno. Para ello, abre
un fichero de texto y escribe el siguiente contenido:
#!/bin/bash
source gpio
gpio mode 17 out
while true; do
gpio write 17 1
sleep 1.3
gpio write 17 0
sleep 1.3
done

Luego guarda el texto en un fichero denominado, por ejemplo, LED.sh y cuando lo


desees abrir solo tendrs que situarte en el directorio donde lo hayas guardado y
teclear lo siguiente esto para su ejecucin:
./LED.sh

Si lo anterior no funciona, puede que debas darle permisos de ejecucin al fichero


LED.sh. Puedes realizarlo desde el entorno grfico o con chmod (chmod u+rwx
LED.sh). Y el resultado ser un LED que titila cada 1.3 segundos. Recuerda que el
lmite es tu imaginacin.

Programacin avanzada de los GPIO

Pues se puede complicar algo ms para realizar otros proyectos algo ms


sofisticados. Sobre todo si utilizamos lenguajes de programacin para crear
nuestros proyectos. Se pueden utilizar diferentes herramientas y lenguajes de
programacin. Por ejemplo, el lenguaje de programacin C utilizando bibliotecas
como WiringPi, pigpio, sysfs, etc, o compilar nuestros propios cdigos fuente con
otros lenguajes como C#, Ruby, Java, Perl, BASIC y Python.
Y si no sabes programar, no te preocupes, hasta un nio puede programar los
GPIO utilizando lenguajes grficos como los que aporta Scratch, que se incluye en
Raspbian por defecto, pero puedes instalarlo en otras distros sin problema y
disfrutar del sistema drag and drop con bloques grficos de Scratch.

C y wiringPi
Una de las mejores maneras de crear programas en lenguaje de programacin
C es utilizando la biblioteca wiringPI (si tu distro no la tiene instalada, lo primero que
debes hacer es descargarla e instalarla, al igual que el compilador gcc u otro que

prefieras). Yo utilizar gcc y la librera wiringPI. Para crear nuestro cdigo fuente
debemos enlazar la biblioteca.
Si no los tienes instalados, instala GCC:
sudo apt-get install gcc

Y luego haz lo mismo para la biblioteca wiringPI:


sudo apt-get install git-core
sudo apt-get update
sudo apt-get upgrade
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
cd wiringPi
./build

Si por ejemplo queremos seguir con nuestro ejemplo de LED que titila, y lo
denominamos LED.c. En un editor de texto que prefieras, como por ejemplo gedit,
puedes escribir el cdigo fuente y luego guardarlo con el nombre que hemos
elegido. El contenido de nuestro programa en C contendr las siguientes lneas:
/*Cdigo fuente para hacer titilar un LED desde los GPIO*/
#include <stdio.h>
#include <wiringPi.h>
int main (void)
{
printf (Titilando LED\N);
if (wiringPiSetup () == -1)
return 1;
pinMode (0, OUTPUT); //0 es el correspondiente del chip al pin 17
for (;;)
{

digitalWrite (0, 1); //Poner en ON o encenderlo


delay (1300); //Retraso de 1.3 segundos
digitalWrite (0, 0); //Poner en Off o apagar
delay (1300); //Retraso para volver a encender...
}
return 0;
}

Para compilarlo, desde el directorio donde se encuentra el cdigo fuente guardado,


podemos teclear lo siguiente:
gcc -o LED LED.c -lwiringPi

Si te has decidido por la librera pigpio, utiliza -lpigpio. Y para ejecutar el


programa que hemos compilado, se har de forma similar al script. Pero
necesitaremos privilegios para iniciar la ejecucin del binario llamado LED que
hemos generado:
sudo ./LED

Python
Python es el lenguaje preferido para programar los GPIO. Las bibliotecas
anteriormente citadas, tambin pueden ser empleadas con Python. Raspbian ya
incluye un mdulo denominado RPI.GPIO para poder crear scripts en Python, pero
te recomiendo que utilices e instales pigpio, ya que stos scripts pueden ser
ejecutados tanto en Windows, Mac OS X como en Linux. Solo se necesitan los
demonios corriendo en la mquina donde quieras ejecutar el cdigo.
Instlalo as:
sudo apt-get install python-dev python-rpi.gpio

El cdigo fuente para realizar el titileo de nuestro LED en Python es el siguiente


(haz lo mismo que con el cdigo C, puedes editarlo en un editor de texto):
#!/usr/bin/env python
#LED.py
import time
import pigpio
pi = pigpio.pi()
pi.set_mode (17, pigpio.OUTPUT) #Ponemos el pin 17 como salida

pi.set_servo_pulsewidth (17, 1300) #Iniciamos pulsos cada 1.3 segundos para


encender el LED
pi.stop() #Terminamos el programa.

Lo debes guardar con el nombre LED y la extensin .py y para ejecutarlo, teclea
en el terminal:
sudo pigpiod
./LED.py

Scratch y GPIO
Para usar Scratch con los GPIO podemos utilizar diferentes mtodos, como con
el resto de lenguajes de programacin. Uno es emplear ScratchGPIO,
RpiScratchIO, etc Pero lo primero, si ya tienes Scratch y as ser si ests
utilizando Raspbian, es instalar el complemento ScratchGPIO:
sudo wget http://goo.gl/Pthh62 -O in stall_scratchgpio5.sh
sudo bash install_scratchgpio5.sh

Por ejemplo, si disponemos de ScratchGPIO, podemos crear el siguiente


sketch para hacer titilar el LED:

BASIC
Si ests acostumbrado a programar en BASIC o ya eres usuario de placas de
desarrollo de Parallax BASIC Stamp (que emplea PBASIC para programar los
microcontroladores), te resultar ms sencillo programar los pines GPIO en lenguaje
BASIC.

Una de las posibilidades es usar RTB (Return to Basic), para instalarlo (en este
caso es la versin 2.20):
cd /tmp
wget http://unicorn.drogon.net/rtb-2.20-1.deb
sudo dpkg -i rtb-2.20-1.deb
sudo apt-get -f install

Para ejecutarlo, solo tienes que teclear rtb en el terminal. Y con l teclear el
siguiente cdigo fuente renovado, aunque con reminiscencias del BASIC clsico y
guardarlo como LED.rtb:
//Titilar LED
PinMode (17, 1) //Pin 17 como salida
CYCLE
DigitalWrite (17, 1) //Pin ON
WAIT (1.3) //Esperamos 1.3 segundos
DigtialWRite (17, 0) //Pin OFF
WAIT (1.3)
REPEAT
END

Espero que te haya servido de ayuda. Cualquier duda u opinin, deja tus
comentarios!

También podría gustarte