TUTORIAL RASPBERRY PI – GPIO [PARTE 2]: CONTROL DE LEDs CON PYTHON

TUTORIAL RASPBERRY PI – GPIO [PARTE 2]: CONTROL DE LEDs CON PYTHON

tutorial gpio raspberry pi python led PORTADA

¡Hola a todos y a todas! Hace unos días que publiqué un tutorial sobre cómo encender y apagar un LED con la Raspberry Pi. Lo hacíamos a través de la terminal. Ahora vamos a escribir un pequeño programa en Python que haga parpadear un par de LEDs que estén conectados a los GPIO de la Raspberry Pi.

El anterior tutorial lo podéis encontrar en el siguiente enlace:

Vamos a seguir una serie de pasos para llevar a cabo esto. Seguro que así queda más claro.

PASO 1: MONTAJE

Antes de nada, vamos a realizar el montaje. Necesitaremos dos LEDs y un par de resistencias, por ejemplo de 1K Ohmios. Utilizaremos los GPIO 17 y 27. Quedará algo así:

tutorial gpio raspberry pi python led

PASO 2: INSTALACIÓN DE LA LIBRERÍA GPIO PARA PYTHON

Tras realizar el montaje, instalaremos la librería para poder controlar los GPIO con Python. Está alojada en SourceForge, pero podemos descargarla en la Raspberry Pi con el siguiente comando:

wget 'http://downloads.sourceforge.net/project/raspberry-gpio-python/RPi.GPIO-0.5.4.tar.gz'
Una vez descargada, vamos a descomprimir el tarball:
tar zxvf RPi.GPIO-0.5.4.tar.gz
Entramos en el directorio que acabamos de descomprimir:
cd RPi.GPIO-0.5.4/
Ahora toca instalar la librería. Por si no tenemos el paquete python-dev, introducimos el siguiente comando:
sudo apt-get install python-dev
Cuando acabe la instalación del paquete anterior, procedemos a instalar la librería:
sudo python setup.py install

 PASO 3: PROGRAMA PYTHON PARA HACER UN ENCENDIDO INTERMITENTE DE LOS LEDS

En este tercer paso, vamos a escribir un pequeño programa en Python que haga que se enciendan y apaguen los LEDs de forma intermitente.

3.1. Creamos un nuevo archivo Python.

sudo nano blink.py

 3.2. Importamos la librería que acabamos de instalar y declaramos los pines.

Los pines serán de salida, pues tenemos que encender LEDs. Como ya hemos hecho en el montaje, utilizaremos los GPIO 17 y 27. La forma de tratar los pines, su declaración y el encendido y apagado os recordará a Arduino.

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT) ## GPIO 17 como salida
GPIO.setup(27, GPIO.OUT) ## GPIO 27 como salida
 3.3. Creamos una función para ejecutar el bucle que enciende y apaga los LEDs. Por si no sabéis cómo definir funciones en Python. Aquí os dejo un tutorial: Funciones en Python. La función se llamará 'blink'. Es la típica con la que se empieza en Arduino.
def blink():
        print "Ejecucion iniciada..."
        iteracion = 0
        while iteracion < 30: ## Segundos que durara la funcion
                GPIO.output(17, True) ## Enciendo el 17
                GPIO.output(27, False) ## Apago el 27
                time.sleep(1) ## Esperamos 1 segundo
                GPIO.output(17, False) ## Apago el 17
                GPIO.output(27, True) ## Enciendo el 27
                time.sleep(1) ## Esperamos 1 segundo
                iteracion = iteracion + 2 ## Sumo 2 porque he hecho dos parpadeos
        print "Ejecucion finalizada"
        GPIO.cleanup() ## Hago una limpieza de los GPIO
3.4. Llamamos a la función.
blink() ## Hago la llamada a la funcion blink
Con esto, ya tendríamos todo el código hecho.  3.5. Ejecutamos el código.
sudo python blink.py
  Pues fin del tutorial. Como podéis ver, más fácil imposible. El código recuerda mucho a cómo se programa Arduino, así que si ya habéis trabajado con él, no tendréis problema alguno en avanzar y hacer cosas más chulas. ¡Nos vemos en el próximo tutorial! ¡Un saludo!

19 comentarios


Luciano · Hace 1 mes

Hola el programa me funciona perfecto pero cuando le pongo en lugar de leds unos reles en las gpios los dos reles se encienden y se apagan al tiempo pero no hacen la secuencia. Tienes idea por que puede ser?

Martin Alaniz · Hace 1 año

Hola, me sale error acceso denegado, cuando pongo GPIO.output(7, GPIO.OUT) ese es otro ejemplo que estaba probando. ayuda por favor

Roberto Navarro · Hace 23 días

Estas escribiendo mal el codigo si lo que quieres es fijar los puertso como salida. Deberias poner: GPIO.setup(17, GPIO.OUT).

Rammstein Add · Hace 1 año

Muchas Gracias por el tutorial! es sencillo perfecto para iniciar con la programación de los GPIO, ahora probare conectándole un par de LEDs mas modificando el codigo y aprendiendo a programar en python. Saludos

Ivan Cayon Guarnizo · Hace 1 año

Para los que habian tenido problema con las librerias GPIO este es el nuevo link la version cambio de 0.5.04 a esta 0.5.11 wget 'http://downloads.sourceforge.net/project/raspberry-gpio-python/RPi.GPIO-0.5.11.tar.gz' tar zxvf RPi.GPIO-0.5.11.tar.gz y asi etc. esto a diciembre del 2015 si sale una nueva version de las libreria busquen el link y cambien la version.

Noit · Hace 1 año

hola , una consulta solo quiero conectar un led a traves del gpio 17 es necesario usar la misma resistencia, o no? y si es necesaria, de cuantos ohm y por donde la conecto? entre el led y ground? de antemano gracias

Luis Greco · Hace 1 año

hola , quisas me puedan ayudar nesecito conectar 2 rotary encoders para poder controlar kodi , me podrian pasar algun codigo y como deberia de configurarlo?

Malevo · Hace 2 años

Hola que tal el GPIO 27 no existe en mi Raspbrry pi b+ solo tiene hasta el 26 por so se los cambie y use el 22 y el 23 que serian los pines 15 y 16, pero cuando ejecuto "sudo python blink.py" no me pone nada despues pongo "blink()" y me pone un ">" esperando a que ponga algo vuelvo a poner "blink()" y me tira "error sintactico cerca del elemento inesperado" me podrias ayudar como se arregla este inconcluso por que no entendi la ejecucion del programa

Sergio Alexander Gutiérrez · Hace 2 años

Hola, muchas gracias por el tuto, tengo una Raspberry pi B+, no he podido leer nada del GPIO, realize el montaje para un sensor DHT11, pero no logre leer los datos, ahora hago este tuto para porbar, y tampoco me funciona no, me arroja ningún error, sabe que puede ser?

Santha Rosa · Hace 2 años

en que plataforma esta hecho? Raspibian?

David · Hace 2 años

Ojo, no te lo digo por propia experiencia, pero creo que da igual. Aquí se hace uso de Python y los GPIO. Python es un lenguaje común a todas las distribuciones (si meto aquí la pata, mea culpa).

Santha Rosa · Hace 2 años

Me referia al sistema operativo ._.

David · Hace 2 años

Distribución = Sistema operativo linux. Vamos que da igual en que distribución (Sistema operativo) lo hagas ^^

gabylan · Hace 2 años

Hola que tal!, tengo una duda. Porqué en este tutorial usas resistencia y no la usas en el tutorial 1? ¿si quiero solo prender/apagar lo puedo hacer sin resistencia?

Borys Zuñiga · Hace 2 años

Hola que tal, me encuentro realizando un proyecto para lo cual necesito conectar un termostato digital a la Raspberry Pi, mi pregunta es si tal ves puede hacer un tutorial con todo lo que se necesita para conectar y controlar el termostato con la RPi... de antemano gracias por contestar este mensaje y su pronta respuesta..

Borys Zuñiga · Hace 2 años

Hola, excelente tutorial, soy nuevo en esto de Raspbery pi y estoy empezando a usar los pines GPIO y me parece una buen página para los que estamos empezando en esto. Me funcionó muy bien pero sobre todo muy bien explicado el tema. Saludos y porfavor sube más tutoriales con el uso de senores(termostato digital).

Pablo Acevedo · Hace 3 años

Estimados, estoy comenzando a echar mano a los GPIO de Raspberry Pi, quiero saber una cosa, solo puedo conectar leds o también distintos sensores para recibir datos de entradas?

Miguel · Hace 3 años

Excelente tutorial, lo único que te comento que el link me aparece como caído. Googleando se soluciona, pero para que le echaras un ojo ; )

Abel Guitian · Hace 3 años

En el subtema 3.2 en el comando de la linea 3 que es lo que hace o significa este comando?: GPIO.setmode(GPIO.BCM)

Magrado · Hace 2 años

Porque esta declarando que los puertos del GPIO serán llamados como "números" 17 y 27. Broadcom Numbers.

Juanjo · Hace 6 meses

Copiado de la página de la librería: https://sourceforge.net/p/raspberry-gpio-python/wiki/BasicUsage/ There are two ways of numbering the IO pins on a Raspberry Pi within RPi.GPIO. The first is using the BOARD numbering system. This refers to the pin numbers on the P1 header of the Raspberry Pi board. The advantage of using this numbering system is that your hardware will always work, regardless of the board revision of the RPi. You will not need to rewire your connector or change your code. The second numbering system is the BCM numbers. This is a lower level way of working - it refers to the channel numbers on the Broadcom SOC. You have to always work with a diagram of which channel number goes to which pin on the RPi board. Your script could break between revisions of Raspberry Pi boards.

mablack6 · Hace 3 años

no puedo ejecutar el programa me dice: File "blink.py", line 1, in import RPi.GPIO as GPIO ImportError: No module named GPIO

ocellum · Hace 2 años

Hola --> He solucionado el problemilla, pero no estoy seguro por cual de estos dos medios. Había creado el probrama XX.py dentro del directorio descomprimido de las librerías sobre control de GPIO con Python, He copiado el programa XX.py fuera de ese directorio. Además he encontrado este foro en inglés, en el que comentan el mismo problema, y recomiendan lo siguiente: # wget http://raspberry-gpio-python.googlecode.com/files/python-rpi.gpio_0.3.1a-1_armhf.deb # sudo dpkg -i python-rpi.gpio_0.3.1a-1_armhf.deb Está usando Python v2. La verdad que no se cual de las dos cosas me ha funcionado, si lo probáis, me comentáis cual fue (Imagino que con la primera vale)

Rammstein Add · Hace 1 año

SOLUCIONADO!! ami me funcionó tu primera opción, copie el archivo blink.py afuera de la carpeta donde se descomprimió todo y lo "ejecute" desde ahí... Saludos.

ocellum · Hace 2 años

--Hola, a mi me ocurre lo mismo con import RPi.GPIO as GPIOImportError: No module named GPIO Habéis encontrado alguna solución??

SoyElKorn · Hace 3 años

Yo tengo exactamente el mismo problema, después de haber escrito todo el código y guardado el archivo, me aparece ese mensaje de error de importación, supongo que no ha de encontrar la librería, pero aun no encuentro solución.

ocellum · Hace 2 años

Hola, a mi me ocurre lo mismo con import RPi.GPIO as GPIOImportError: No module named GPIO Habéis encontrado alguna solución??

Adrian · Hace 3 años

Tengo sólo una duda. ¿Dónde metes ese código? ¿En una terminal? ¿En algún programa?... Gracias, un saludo.

Aarón · Hace 3 años

En un editor de textos. Usa nano, que es el paso 3.1

carguzvi · Hace 3 años

Excelente tutorial, lo seguí y pude controlar un led, pero tengo una pregunta. Como puedo hacer para correr un programa que controle GPIO como usuario normal?, Tengo un programa en python y me pide permisos para poder correrlo. Gracias por su ayuda.

J.G. García (@jggrc) · Hace 3 años

Muy bien explicado!. Para complementar, existe un módulo que extiende en gran manera el uso de GPIO en RPi se llama RPIO. Te da control sobre encendido/apagado como módulo o por medio de una herramienta en terminal, control pull-up/pull-down, interrupciones y PWM con bastante resolución. http://pythonhosted.org/RPIO/ Un saludo!

Deja un comentario