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:

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.

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  

 

 

Una nintendo mejorada gracias a una Raspberry pi


Vermy   nos muestra como a veces como con un poco ingenio  ,tesón y muchísimo trabajo  se pueden crear cosas  increíbles, en esta ocasión  construyendo  una computadora de mano utilizando una Frambuesa Pi cero y un original DMG – 01 Game Boy .Es tan pequeña que Vermy, el autor de este proyecto, ha conseguido modificar una Game Boy original pero con un acabado realmente espectacular utilizando una Raspberry Pi Zero.

El cableado ,que muy pronto   vamos a ver , es una auténtica locura , pero desde luego   hasta que se enciende, exteriormente  no se  pude saber que es una Game Boy modificada ,gracias al gran trabajo de re-acondicionamiento de la vieja electrónica de los años 70   por la nueva de este siglo.

Realmente ademas de  usar la misma caja , ha aprovechado muchas de las partes como los pulsadores, cruceta, el jack de audio para los cascos y el altavoz interno.

Ademas  ,para dar mas realismo ,también  ha cableado de forma muy ingeniosa el cartucho original para alojar la micro SD de la Raspberry Pi Zero.

 

Veamos los pasos  básicos que ha seguido en su construcción:

En primer lugar se  usa la placa  de los pulsadores , usando el autor ​​cinta de cobre para agregar un par de almohadillas de botón extra . Dos tiras paralela ssuficientemente cerca de cobre son suficientes para que cuando la placa del botón haga contacto , se cierre la conexión.

 

pi1

 

Ahora le toca el montaje del interruptor de alimentación y de carga micro USB que se muestra a continuación:

 

pi2

Se muestra el montaje de la  nueva  pantalla, la tarjeta de conexión   de los pulsadores( con las conexiones extra )   y el altavoz.

 

pi3

 

La pantalla seleccionada es lo suficientemente grande  por lo que el autor tuvo que quitar los topes  de los tornillos superiores . Se pega con epoxi para unir los topes de los tornillos originales a una pieza de metal que ha pegado a la caja por encima de la pantalla, por lo que todavía puedo utilizar los orificios de los tornillos originales,

 

pi4

Ahora toca el cartucho

Básicamente ha modificado un cartucho original de Game Boy para actuar como un adaptador de tarjeta SD para la Pi , para que pueda tener la misma satisfacción de poner un cartucho en la alimentación y en que lo haría en una Game Boy regular.

Podemos   ver el cableado del cartucho de juego modificado, donde desde lueho al cerrar  el cartucho desde luego no se nota para nada la modificaicon

pi5

Ahora  viene el lío  , toca  cablear  el lector de  cartucho para los contactos  de tarjetas SD en la parte posterior del Pi cero .

 

pi6

 

!Fin !  Sólo  toca arrancar el Pi a través del cartucho de tarjetas SD por primera vez …

pi7

¡Funciona! El autor descubrio  que cuando tuvo la carcasa cerrada  provocó que los cables del lector de tarjetas  presionasen  contra   el lector de tarjetas SD , lo cual demostro quue éste era bastante poco fiable . Como  falló al arrancar a veces , dando errores de lectura cuando se cargan grandes juegos, etc. añadió un poco de blindaje alrededor de los cables del lector de tarjetas SD , y sin entonces  quedo solucionado el problema.

 

Ahora finalmente ,  toca montar todo  el conjunto:

pi8

Se puede  ver los controles que están cableados hasta un Teensy LC , que solo se muestra como un teclado para la Pi .

pi9

Vemos ahora el concentrador USB con adaptador Blutooth , con botones en la parte superior para controlar el brillo, el contraste y el color de la pantalla . pi10

!!Es  un trabajo realmente espectacular!!!   y que podemos ver en el video a a continuación:

 

 

Por cierto  , el autor  tambien ha creado  un canal para  las  dudas sobre su contrucción  y funcionamiento en   Reddit

Fuente aqui