sábado, 13 de abril de 2013

RaspberryPi: GPIO


Me había prometido que este 2013 iba a escribir una entrada mínimo cada mes. Está ya bien entrado el año y de momento sólo hay una. Hoy voy a intentar ponerle remedio presentando un juguete nuevo que tengo desde hace poco más de un año y que entre pitos y flautas, no he podido exprimir todo lo que me gustaría. Estoy hablando de la RaspberryPi.

Hablar de la RaspberryPi daría para muchos blogs. Yo me voy a centrar hoy en hacer una pequeña prueba de lo que es capaz su GPIO (General Purpose Input/Output), http://elinux.org/RPi_Low-level_peripherals.

Resumiendo mucho y salvando las distancias, son 26 pines digitales para conectar cualquier cosa que nos interese. Algo parecido a un Arduino, repito, salvando las distancias. Es muy importante recalcar que son digitales, cosa que me acabo de dar cuenta, así que todos mis planes para conectar algo analógico, de momento, quedan relegados a un segundo plano.

Para programar esto hay una librería hecha en Python, https://pypi.python.org/pypi/RPi.GPIO.

Como prueba de concepto he hecho lo siguiente. Dos botones y dos leds; cuando se pulsa un botón se ilumina su led correspondiente.


El código es el siguiente, es relativamente sencillo y se explica sólo.


import RPi.GPIO as GPIO

GPIO.cleanup()

pinVerdeEntrada = 11
pinVerdeSalida = 12

pinAmarilloEntrada = 15
pinAmarilloSalida = 16

GPIO.setmode(GPIO.BOARD)

GPIO.setup(pinVerdeSalida,GPIO.OUT)
GPIO.setup(pinAmarilloSalida,GPIO.OUT)

GPIO.setup(pinVerdeEntrada,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(pinAmarilloEntrada,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)

while True:
GPIO.output( pinAmarilloSalida , GPIO.input(pinAmarilloEntrada) )
GPIO.output( pinVerdeSalida , GPIO.input(pinVerdeEntrada) )

GPIO.cleanup()

Un esquema del circuito, para más claridad, y un vídeo para los más incrédulos.





Como primera prueba de contacto, está bastante bien.