lunes, 5 de marzo de 2018

Raspberry Pi para encender y apagar un LED con los GPIO

El miniordenador Raspberry Pi dispone de los puertos GPIO que de permiten interactuar con el mundo físico y con el que podemos introducirnos en el IoT (Internet of Things) el Internet de las cosas.

En este caso vamos a ver lo más básico que consiste en encender y apagar un LED utilizando código Python.


  • Conectaremos GND, a uno de los GPIO de tierra mediante cable negro. En nuestro caso usaremos el GPIO 6.
  • Conectaremos el cable rojo, al GPIO 18.
  • Incluiremos una resistencia de 200 ohomios, da igual que la pongamos por una patilla o por la otra del led.
  • Un par de cables, hembra-macho
  • Una pequeña placa protoboard
  • La Raspberry Pi versión 1. Tener en cuenta que los pines GPIO de las versiones 2 y 3 son iguales pero difieren de los de la versión 1. Aunque, en este caso los GPIO usados el 6 y el 18 coinciden en las tres versiones.
  • Cable RJ45 para conectar al router
  • Alimentación de la Raspberry Pi con un cargador de movil. Para la versión 1 con uno normalito de 0,5A es suficiente.
  • Tarjeta SD, con el sistema operativo Raspbian. En nuestro caso la versión 4.9 (RASPBIAN STRETCH).
  • Usaremos la versión Python 3, concretamente la versión 3.5.3.
El código en Python es el siguiente.

 import RPi.GPIO  
 import time  
 RPi.GPIO.setmode (RPi.GPIO.BCM)  
 RPi.GPIO.setup (18,RPi.GPIO.OUT)  
 while True:  
  RPi.GPIO.output (18, True)  
  time.sleep(1)  
  RPi.GPIO.output (18, False)  
  time.sleep(1)  

Esto lo que consigue es hacer un blink, esto es que el led se encienda y se apague ininterrumpidamente cada segundo.



Con un bucle infinito del tipo while True la Raspberry Pi se queda ejecutando el procedimiento Python de forma indefinida y se tiene que finalizar en algún momento pulsando Control+c. Al lanzar de nuevo el programa ledonoff.py surge un mensaje avisando de que el procedimiento está en uso.


Para evitar los mensaje podemos añadir la siguiente línea.

RPi.GPIO.setwarnings(False)

Por estos motivos, hemos optado por implementar una segunda versión, que mostramos seguidamente.

Blink de un led durante un tiempo

Ahora el led permanece encendido un décimo de segundo y permanece apagado otro décimo de segundo. Esto se repite 30 veces.


 import RPi.GPIO  
 import time  
 RPi.GPIO.setmode (RPi.GPIO.BCM)  
 RPi.GPIO.setup (18,RPi.GPIO.OUT)  
   
 for i in range(30):  
  RPi.GPIO.output (18, True)  
  time.sleep(.1)  
  RPi.GPIO.output (18, False)  
  time.sleep(.1)  
 RPi.GPIO.cleanup(18)  

En esta segunda versión del código hemos sustituido el bucle while por un for que hace que la duración total del procedimiento sea aproximadamente de 6 segundos.

La última línea de código lo que hace es limpiar el uso del GPIO 18 que es el que hemos usado, por si luego se desea emplear en otros menesteres.


Con una función de Python

Esta es otra variante del programa anterior donde hemos creado la función parpadea.

 import RPi.GPIO as GPIO  
 import time  
 GPIO.setmode(GPIO.BCM)  
 GPIO.setup(18,GPIO.OUT)  
   
 def parpadea():  
  print("Comienza a parpadear el led ...")  
  for i in range(30):  
   GPIO.output(18,True)  
   print("|",end="",flush=True)  
   time.sleep(.1)  
   GPIO.output(18,False)  
   time.sleep(.1)  
  print("")  
  print("Fin")  
  GPIO.cleanup()  
   
 parpadea()  


No hay comentarios:

Publicar un comentario