Raspberry PI 3 model B y Raspbian: evaluando los lenguajes

Es un buen momento para recapitular el estado en el que nos encontramos.

El sistema con el que contamos lo componen:

  • La Raspberry Pi  cuyo modelo podemos comprobar con el comando de terminal cat /proc/cpuinfo y después buscar el modelo concreto en  esta lista de modelos y fabricantes. (Por ejemplo Hardware : BCM2835 corresponde a la  Pi 3 Model B 1GB a02082 Sony, UK).
  • El Sistema Operativo Raspbian iy para saber la versión con la que contamos podemos usar el comando de terminal uname -a  (Por ejemplo Linux raspberrypi 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux) o el comando cat /etc/os-release (Por ejemplo PRETTY_NAME=”Raspbian GNU/Linux 9 (stretch)” )

Los lenguajes de programación que hasta el momento hemos probado su correcto funcionamiento con el clásico programa “Hola mundo” y después su trabajo con el módulo GPIO para controlar un sencillo LED son los siguientes:

Software Version IDE Version Ejecución GPIO
Java 1.8.0_65 Bluej 3.1.7b Terminal Completo
Python 3.5.3 Integrado 3.5.3 Integrada Completo
Scratch 2 Integrado 2 Integrada Limitado
LUA 5.1.5 No Terminal Incompleta

Para futuros ejemplos en Raspberry Pi  usaré Python y para enseñar y disfrutar con los más pequeños Scratch.

Emulador de Python con GPIO Raspberry Pi

SI desea probar código escrito en Python para la Raspberry Pi que usa GPIO, y no quiere usar o no tiene disponible la Raspberry Pi físicamente, puede incorporar librerias que permiten emularlo en su ordenador personal (Descargar, descomprimir y oner en la misma libreria que el fuente de Phyton) o usar un emulador web como el de withcode

Resumiendo hasta ahora hemos visto que podemos programar Python para RAspberry PI:

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