miércoles, 20 de enero de 2016

Programar con RaspberryPi, Python

RaspberryPi es un dispositivo fantástico para aprender a programar, podemos crear nuestros propios programas y además podemos hacer que estos interactúen con otros dispositivos que podemos conectar con nuestra Raspberry a través de los diferentes conectores como por ejemplo los GPIO.




1. Lenguajes de programación

RaspberryPi incorpora diversos lenguajes y/o software de programación algunos de ellos muy populares y enfocados a diferentes públicos, Scratch, Mathematica o Python son algunos de ellos.
Por ejemplo Scratch es un lenguaje de programación visual a través de cajas o contenedores ideal para los jóvenes, y permite programar de forma sencilla e intuitiva.
Otro lenguaje es Mathematica muy utilizado para álgebra y programas computacionales.
Tal vez el lenguaje más popular es Python (he leído por ahí que la palabra Pi de nuestra RaspberryPi, precisamente hace referencia a este lenguaje) que se ha hecho muy popular en los últimos años y es una buena opción para alguien que ya tiene conocimientos de programación y quiere trastear un poco con su RaspberryPi.
En la última versión de Raspbian se ha incorporado más software de programación y siempre podemos obtener otros paquetes de software a través de apt o pi-package, podéis consultar el siguiente post para Raspbian Jessie


o este pata las anteriores versiones


2. Programar con Python en RaspberryPi

Para usar Python en RaspberryPi podemos optar por dos versiones (Python II o Python III),
en la comunidad de programación, Python II continúa siendo muy popular por la gran cantidad de librerías disponible, algo que con la última versión aún no se ha conseguido. De todas formas si lo que queréis es aprender un nuevo lenguaje y trastear con la RaspberryPi por ahora la versión que escojáis no es muy importante, personalmente yo uso Python III (renovarse o morir).

2.1 Programar Python con IDLE

Si estais usando Raspbian Jessie podremos programar tanto en Python II como en Python III. La forma más sencilla es encender nuestro dispositivo y vamos al botón Menú-Programación




tal y como se muestra en la imagen disponemos de un acceso directo a Python 2(IDLE) y otro a Python 3(IDLE). Solo tenemos que hacer click encima de la versión escogida.



como vemos arriba al hacer click se abrirá la pantalla del Pyhton Shell, la pantalla y funciones son las mismas para las dos versiones de Python. A través de esta podemos escribir y ejecutar comandos y funciones de python y ver los resultados de forma inmediata. Esto es ideal para realizar pruebas.
El símbolo >>> indica que podemos introducir un comando de Python. Por ejemplo vamos a realizar un test sencillo (tras cada línea de código hay que presionar Intro en el teclado), introduciremos

A="Hola mundo"
print(A)

Después de hacer Intro en la segunda línea el Shell nos devolverá la frase Hola Mundo tal y como muestro en la siguiente imagen



Otro test podría ser el siguiente código

for i  in range(1,10):
    print(i)

tras poner los dos puntos (:) y hacer intro en el teclado, veremos que la siguiente línea de código queda sangrada, esto se debe a que el siguiente código que escribimos forma parte del bucle for que hemos escrito en la primera linea. tras escribir la segunda línea haremos Intro dos veces y se ejecutará el código. Aparecerá algo como lo que se muestra a continuación



Sin embargo si deseamos escribir un programa no tendremos suficiente con el shell y tendremos que usar un editor. Para ello, en la misma ventana iremos a la opción 

File-New File

esto abrirá una ventana de un editor en el que podemos introducir código, introduciremos el mismo código que hemos visto en el ejemplo anterior. Quedará algo parecido a esto



ahora guardaremos el archivo, vamos a File-Save As y lo guardaremos en una ubicación conocida por ejemplo en /home/pi/Desktop con el nombre contador.py

Con esto hemos generado un archivo con código de python que podemos ejecutar de la siguiente forma, vamos a la opción Run-Run Module o bien presionamos la tecla F5. Esto ejecutará el código de nuestro archivo en el shell de Python tal y como se muestra a continuación (la línea ===== RESTART===== indica el punto de inicio en el que se ejecuta)



2.2. Programar Python desde la consola o pantalla de línea de comandos

Si nos conectamos a la RaspberryPi con un cable de consola o a través de SSH (y no estamos en el entorno de escritorio) o bien queremos usar una pantalla de linea de comandos, también podemos ejecutar comandos. Para ello desde la propia pantalla de terminal ejecutamos la orden python (para trabajar con python 2) o python3 (para trabajar con python 3),  tras hacer Intro en el teclado en la pantalla aparecerá el símbolo de introducción de comandos de python (>>>), tal y como muestro a continuación



ahora podemos usar la pantalla como si estuviéramos en el shell de Python. Podemos introducir las líneas de código  de los ejemplos anteriores y veremos que funciona de la misma forma.

for i  in range(1,10):
    print(i)

hay que tener en cuenta que después de poner los dos puntos (:) y hacer Intro con el teclado, la siguiente línea aparece con tres puntos (...), pero no se sangra de forma automática tenemos que poner 4 espacios para sangrar la segunda línea de código, luego presionaremos Intro dos veces (una para finalizar el sangrado y otra para ejecutar el código) y obtendremos algo como esto



el resultado es el mismo que si trabajamos en el IDLE o shell de python.

Para salir del modo de introducción de comandos de pyhton presionaremos Ctr+D en el teclado y desaparecerá el indicador de comandos de python (>>>) para continuar usando el terminal de forma normal.


Personalmente prefiero usar el shell de python, ya que el sangrado automático de las líneas y la diferenciación en colores del código etc, hace que la programación sea mucho más sencilla que con la pantalla de terminal.

Por otro lado tal y como ejecutábamos programas desde el IDLE de python también podemos ejecutar un programa de python desde la consola, para ello debemos introducir el comando python o python3 (en función de la versión con la que queremos ejecutar el programa) seguido de la ruta completa del archivo (los archivos python han de tener la extensión *.py). Por ejemplo para ejecutar el programa que guardamos en uno de los ejemplos anteriores como contador.py en python 2 usaríamos

python /home/pi/Desktop/contador.py

para usar python  3 usaríamos

python3 /home/pi/Desktop/contador.py

tras hacer Intro en la pantalla se mostrará algo como esto



es posible que algunos programas no se ejecuten correctamente, por ejemplo si el programa usa los puertos GPIO de la RaspberryPi, si no se ejecuta correctamente, tendréis que ejecutar la orden con permisos especiales mediante la orden sudo, para python 2 seria

sudo python /home/pi/Desktop/contador.py

y para python 3 seria

sudo python3 /home/pi/Desktop/contador.py

En principio si estáis usando la última versión de Raspbian Jessie, precisamente una de las mejoras que trae es que no es necesario usar sudo para ejecutar comandos o programas que usan los puertos GPIO. Pero con versiones anteriores es obligatorio usar el comando sudo, o un usuario con permisos de super usuario. Para más información de las novedades de Raspbian Jessie os dejo dos enlaces

http://frambuesa-pi.blogspot.com.es/2015/11/raspberry-pi-raspbian-jessie.html

http://frambuesa-pi.blogspot.com.es/2015/12/raspberrypi-raspbian-jessie-revision.html


Bueno, ahora ya hemos visto como usar Raspbian para programar en Python, o sea que a practicar...