Control de circuitos eléctricos con Raspberry Pi – I : Python

Vamos a ver ahora un ejemplo sencillo de  circuito eléctrico controlado por una Raspberry Pi, para ello necesitamos:

Primero debemos comprobar que tenemos las librerías de RPi.GPIO de Python, para ellos desde el terminal debemos ejecutar:

pi@raspberrypi:~ $ pip show RPI.GPIO
Name: RPi.GPIO
Version: 0.6.3
Summary: A module to control Raspberry Pi GPIO channels
Home-page: http://sourceforge.net/projects/raspberry-gpio-python/
Author: Ben Croston
Author-email: ben@croston.org
License: MIT
Location: /usr/lib/python2.7/dist-packages
Requires:

En caso de que no esté la libreria RPi.GPIO en el Raspbian deb instalarlo de forma manual (descarga, descomprimir e instalr):

  • Descargar la ultima versión de https://sourceforge.net/projects/raspberry-gpio-python en nuestro caso la 0.6.3  RPi.GPIO-0.6.3.tar.gz 
  • Descomprimir el archivo comprimido con doble click
  • Comprobar que disponemos del paquete python-dev y en caso contrario instalarlo con: sudo apt-get install python-dev
  • Ejecutar la instalación desde el directorio descomprimido:   cd Downloads/Rpi.GPIO-0.6.3 sudo python setup.py install

o de forma automática usando los comandos de PyPI – the Python Package Index con el comando (la recomendable):

  • pip install RPi.GPIO

El programa en Python propuesto es el siguiente:

# led.py 
# Programa que enciende un LED 1s
#
# Importa librerias (completan los comandos Phyton)
# si no puede, da error (Es posible que no esté instalada)
# https://pypi.python.org/pypi/RPi.GPIO 
try:
 import RPi.GPIO as GPIO
 print("GPIO.RPI_INFO = " + str(GPIO.RPI_INFO))
 print("GPIO.VERSION = " + str(GPIO.VERSION))
except RuntimeError:
 print("Error importando RPi.GPIO")
 
try: 
 import time
except RuntimeError:
 print("Error importando RPi.GPIO")
 
# GPIO: Ajuste de los nombres de GPIO: BOARD ó BCM
GPIO.setmode(GPIO.BCM)
# GPIO: Ajuste mensajes de warning a OFF
# (avisos de otros programas trabajando con GPIO)
GPIO.setwarnings(False)
# GPIO:El PIN 18 se define como salida
GPIO.setup(18,GPIO.OUT)

# PYTHON: mensaje a consola
print ("LED on")
# GPIO: El PIN 18 se activa/enciende con 3.3V
GPIO.output(18,GPIO.HIGH)
# TIME: espera de 1s
time.sleep(2)
print ("LED off")
#GPIO: El PIN 18 se desactiva/apaga 
GPIO.output(18,GPIO.LOW)
# borrar todos los ajustes antes de terminar 
GPIO.cleanup()

Si quiere que el LED parpadee varias veces puede hacer algo como:

contador = 0
while contador < 5: 
 print ("LED on")
 # GPIO: El PIN 18 se activa/enciende con 3.3V
 GPIO.output(18,GPIO.HIGH)
 # TIME: espera encendido de 1s
 time.sleep(1)
 print ("LED off")
 #GPIO: El PIN 18 se desactiva/apaga 
 GPIO.output(18,GPIO.LOW)
 # TIME: espera apagado 1s
 time.sleep(1)
 contador += 1 
# borrar todos los ajustes antes de terminar 
GPIO.cleanup()

Si quiere hacer que dos LEDs parpadeen como las luces de una ambulancia puede modificar el código:

# GPIO:Los PIN 18 y 23 se definen como salidas en forma de lista
Lista_canales = [18,23] 
GPIO.setup(Lista_canales,GPIO.OUT)

#Bucle que se repite 5 veces
contador = 0
while contador < 5:
 print ("Ni")
 # GPIO: canales 18 / 23 se activa/desactiva 
 GPIO.output(Lista_canales,(GPIO.HIGH,GPIO.LOW))
 # TIME: espera encendido de 1s
 time.sleep(1)
 print ("No")
 #GPIO: canales 18 / 23 se desactiva/ activa 
 GPIO.output(Lista_canales,(GPIO.LOW,GPIO.HIGH))
 # TIME: espera apagado 1s
 time.sleep(1)
 contador += 1
# borrar todos los ajustes antes de terminar 
GPIO.cleanup()

Leds balancines (esquema y montaje)

Más información sobre la sintaxis de los comandos de la librería Python GPIO los puede encontrar aquí y un articulo más detallado sobre el proyecto de encender un led con Python en Raspberry aquí.

Python en Raspberry Pi

Python es un lenguaje interpretado (se traduce a lenguaje máquina en tiempo de ejecución), de tipo secuencial (se ejecuta una instrucción detrás de otra, aunque soporta otros estilos como orientado a objetos o funcional) de código abierto (Open Source) que se encuentra preinstalado su IDLE (editor e interprete) en el SO Raspbian de la Raspberry Pi.

El ciclo de desarrollo de un programa Python en la Raspberry Pi es:

  1. Escribir un programa con Geany o con el editor de Python (Recuerde la importancia de comentar lo que hace y tratar las excepciones o errores).
  2. Guardar el programa («save as ..» ) con la extensión .py
  3. Ejecutar el programa («Run») en el interprete de Python  («shell»).
  4. Depurar los errores y mejorar las prestaciones
  5. Versionar (guardar el programa con un nombre distinto para no destruir el trabaja hecho) y volver a 3

Dos ejemplos para comenzar a programas con Python 3 en la Raspberry PI:

# Hola.py
# Imprime un texto por consola
print ('Hola mundo')

# Hola_lista.py
#Imprime una lista
lista = ['Hola', 'Adios']
for texto in lista:
print (texto)

En otra entrada veremos como controlas las entradas y salidas de la GPIO de la Raspberry Pi  con Python

Arduino vs Raspberry Pi

Raspberry Pi es un ordenador de propósito general con fines educativos contenido en una pequeña placa alrededor del procesador Broadcom BCM2837( CPU con cuatro núcleos 64bits a 1,2GHz) , cuyo diseño pertenece a   la Fundacion Raspberry Pi en el que se puede elegir el Sistema Operativo y el lenguaje con el que programar, no es publica la arquitectura por lo que no existen clones, hay cuatro modelos básicos (Zero,1, 2 y 3) y el  el precio es bajo pero lo fija básicamente la fundación.

Arduino es un autómata programable o microcontrolador, contenido en una pequeña placa alrededor de un microcontroladores ATmega328  / ATmega1280 /ATmega2560 (Un solo núcleo 8bits y a 16MHz)  y de  bajo precio. Arduino dispone de su propio Sistema Operativo (ArdOS) pues no dispone de recursos apra soportar un LINUX,  que se programa bajo un entorno específico basado en Processing con su propio lenguaje basado en wiring y con emuladores que permite comprobar su funcionamiento antes de instalarlo en el equipo (Las limitaciones de un microcontrolador obligan a tener el entorno de desarrollo en un ordenador separado). La arquitectura no es propietaria por la que puede encontrar clones muy baratos.

Así si lo que quiere desarrollar es una aplicación de control donde el coste o el tamaño es determinante, necesita trabajar en tiempo real y las necesidades de calculo o proceso son bajas,  seguramente la solución en ese caso será Arduino, si desea desarrollar una aplicación de uso personal que necesita un procesado intensivo es fundamental seguramente optará por Rasperry Pi. Así por ejemplo puede usar una Raspberry Pi con Raspbian para desarrollar aplicaciones para Arduino.

Personalmente para desarrollos caseros y para clases de Informática usaría Raspberry Pi, y para usos  industriales y para clases de formación profesional de automatización y robótica usaría  Arduino.

Para un ingeniero no hay una solución mejor que otra en términos absolutos, sino que en cada caso hay una que se preferible.