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í.

VNC: control de máquinas a distancia

Ya hemos comentado cómo, la virtualización, ha cambiado las infraestructuras de los centros de cálculo, incluso el trabajo con los sistemas, que se puede hacer a distancia mediante escritorios remotos.

Una aplicación muy popular para el control remoto de ordenadores es VNC (Virtual Network Computing).

VNC puede trabajar dos modos: cliente y servidor. VNC en modo cliente o viewer permite conectarse remotamente a un VNC en modo servidor o connect  y de esta forma controlar un sistema de forma remota al visualizar el escritorio y acceder a su teclado y ratón. VNC permite realizar la conexión mediante la dirección de red ip o mediante un usuario y contraseña de la nube (p.e. una app a través de Internet)

VNC está disponible en Raspbian-Raspberry Pi así que es posible controlar remotamente, muy útil, por ejemplo, cuando se tiene conectada la raspberry a  la pantalla de TV y no se quiere molestar a los telespectadores.

Vamos a listar unos cuantos comandos que podemos ejecutar en el terminal de Raspbian para poner a punto la conexión VNC, hay que recordar que el comando sudo permite ejecutar comandos en modo superusuario en LINUX.

El comando ifcongig  nos dice, entre otras cosas, la dirección ip de la Raspberry. Desde el terminal de un equipo remoto se puede hacer el comando ping <direccion iP>  por ejemplo ping 192.168.1.109 para comprobar la conectividad (que hay conexión y que está encendido la Raspberry)

sudo apt-get update comprueba la actualización del software, importante antes de cada instalación como la que vamos a hacer del vnc server.

sudo apt-get install <nombre> permite la instalación de un determinado paquete o aplicación en Raspberry. En este caso sudo apt-get install realvnc-vnc-server, también podemos hacer sudo apt-get install realvnc-vnc-viewer aunque no es necesario pues viene instalado por defecto

Ahora podemos ir a Menu => Preferences => Raspberry Pi configuration => interfaces y comprobar que VNC está «enable» pero si estamos en el terminal podemos ganar tiempo ejecutando  sudo raspi-config

Por defecto el usuario y la contraseña del VNC server son pi y rapberry, pero es bueno cambiar la contraseña con el comando sudo vncpasswd -service

Ahora ya es el momento de arrancar VNC viewer en el equipo remoto y teclear la IP, el usuario y la contraseña … y a trabajar