Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on Abr 23, 2014 in Raspberry Pi | 5 comments

Python: GPIO LED

Python: GPIO LED

Python RASPBERRY PI: GPIO LED

Python

GPIO prender y apagar un led en Python.

El tutorial asume que la tarjeta Raspberry Pi ya se encuentra configurada con el sistema operativo RASPBIAN. Si todavía no está instalado aquí lo pueden descargar y también pueden encontrar una guía de como grabar una imagen en la memoria SD con diferentes sistemas operativos.

01

http://www.raspberrypi.org/downloads/

 Dado que este tutorial está enfocado más al control del hardware externo de la Raspberry Pi a través de los pines es necesario instalar la biblioteca para controlar el GPIO. Para instalar la biblioteca del GPIO de Python es necesario introducir en la terminal las siguientes instrucciones.

 

sudo apt-get update
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio

 

En la última distribución de Raspbian ya se pueden descargar de manera directa desde los repositorios las bibliotecas para el GPIO, es por esto que se comienza con la actualización. Una vez instalada la biblioteca ya podemos hacer uso de la misma para scripts en Python.

Para comenzar con un script vamos a escribir en la terminal:

 

Sudo idle

Se abrirá una pestaña de IDLE para scripts en Python, damos clic en nuevo y es ahí donde podemos comenzar a escribir nuestro script.

Algunas de las instrucciones como se vera a continuación tienen un gran parecido con las que se realizan en el Arduino para poder controlar o configurar los pines del mismo.

import RPi.GPIO as GPIO

Importa la biblioteca para poder hacer uso del GPIO, esta instrucción siempre tiene que ir al inicio de nuestro script si haremos uso del GPIO.

<pre>GPIO.setmode(GPIO.BOARD)
GPIO.setmode(GPIO.BCM)

Una vez importada la biblioteca, el siguiente paso es seleccionar el tipo de etiquetas que llevaran los pines, en este caso tenemos la opción “BOARD” la cual asigna las etiquetas correspondientes a la numeración de los pines según el conector, siendo del 1 al 26, y la opción “BCM” que es la que personalmente prefiero es la etiqueta del pin del procesador de la tarjeta, esta suele tener los nombres como, 5V, 3.3V, GND, GPIO14 UART0_TXD, GPIO1 I2C0_SDA, etc… El inconventiente del BCM es que las etiquetas ya han cambiado para la revisión B de la tarjeta. Es por eso que se recomienda tener siempre a la mano una hoja impresa con el nombre de los pines de la tarjeta que tienes.

Para configurar si el pin será entrada o salida se hace con las siguientes instrucciones.

GPIO.setup(17, GPIO.IN)
GPIO.setup(18, GPIO.OUT)

En este caso se selecciona el pin 11 o el GPIO17 como entrada y el pin 12 p GPIO18 como salida. Aunque el ejemplo de prender y apagar un LED no considera la lectura de entradas digitales a través de los pines o GPIO de la tarjeta, considero importante ponerlo de una vez.

input_value = GPIO.input(17)

Con esto se lee un valor alto o bajo del pin de la tarjeta en el pin 11 o GPIO17.

Para activar o desactivar el LED es necesario indicarle al GPIO que se vaya a un nivel alto de energía (3.3V), para hacer esto, se usara la siguiente instrucción:

GPIO.output(18, GPIO.HIGH)

Con esto activaremos el GPIO correspondiente. Esto significa que el pin físico de la tarjeta estará a 3.3V respecto al pin de GND.

Por ultimo lo que necesitamos para prender y apagar el LED son los retardos, ya que si no ponemos retardos, no podríamos apreciar el LED que se prende y se apaga, esto debido a la velocidad con lo que lo haría la tarjeta. Es por esto que vamos a poner un retardo de por lo menos 50 ms, en este caso 1s.

 

time.sleep(1)

La instrucción nos indica que la Raspbery esperara 1000 milisegundos para poder continuar con la siguiente instrucción.

Para poder hacer uso de la función sleep es necesario haber importado además otra biblioteca, la cual contiene entre otras instrucciones las de retardo.

 

<pre>import time

 

Ya con las instrucciones previamente descritas, es posible realizar un scipt para comenzar a probar nuestra Raspberry Pi. El script que se encuentra a continuación sirve para activar y desactivar un LED con un periodo de 200 ms (100 ms prendido y 100 ms apagado).

 

<pre>import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(17,GPIO.OUT)

while True:
 GPIO.output(17, True)
 time.sleep(1)
 GPIO.output(17, False)
 time. sleep

 

Si se quisiera cambiar el código para usar los pines como su numeración y que ejecute la misma rutina en el mismo pin seria:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)

while True:
 GPIO.output(11, True)
 time.sleep(1)
 GPIO.output(11, False)
 time. sleep

 

 

Python

 

Python

 

Para este tutorial se usó la tarjeta PiDuino HeTPro la cual convierte todos los niveles de voltajes de entradas y/o salidas en 5V/3.3V de manera bidireccional. Por lo que se puede hacer uso de una gran cantidad de arduino shields que ya se tengan a la mano. Cabe señalar que en esta tarjeta el pin 11 o el GPIO17 se encuentran ubicados en la salida D7.

——

META: Python Raspberry PI GPIO LED PiDuino

5 Comments

  1. Muy buena aportación, facilita mucho el aprendizaje para los que iniciamos en este tipo de plataformas sobre todo para incluirlas dentro del aula de clase.

    • Por cierto que tambien estan probados para la nueva Raspbery B+. Por lo que el codigo es totalmente compatible.

  2. Hola, soy nuevo en esto, estoy intentando hacer un llamador de alarma vía email cuando esta suena activa o desactiva, por lo que veo son infinitas las utilidades de este dispositivo, e probado algo y a medias funciono, lo que veo es que cuando ejecuto un script consumo el 100% de la cpu, y tengo que ejecutar 3 uno para disparo uno activada y uno desactivada, me imagino que en un solo script se podría hacer todo, alguien me puede dar una mano? sobretodo lo del consumo del 100% dejo el script básico debajo que me funciono, disparo.py me envía el email.

    import RPi.GPIO as GPIO
    import time
    import os

    #adjust for where your switch is connected
    buttonPin = 22
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(buttonPin,GPIO.IN)

    while True:
    #assuming the script to call is long enough we can ignore bouncing
    if (GPIO.input(buttonPin)):
    #this is the script that will be called (as root)
    os.system(“python /home/pi/disparo.py”)

    • Quizas, esta sea la parte que te esta consumiendo mucha memoria: while True:
      #assuming the script to call is long enough we can ignore bouncing
      if (GPIO.input(buttonPin)):
      #this is the script that will be called (as root)
      os.system(“python /home/pi/disparo.py”)

  3. Un saludo, he trabajado con arduino y recientemente quise ver el potencial de raspberry pi me gusto mucho tu tutorial, aportando que falto el tiempo de apagado cuando nustra salida es “False”.

    time. sleep(1) al final .

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *