Aprender Python y Sense Hat Emulator

Raspberry Pi 400

Este es uno de los capítulos del tutorial Raspberry Pi 400. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Ya que tienes completamente disponible Sense Hat Emulator, tal y como te comenté en el capítulo anterior del tutorial, y que te gustaría aprender a programar, en este capítulo del podcast, voy a intentar incrementar esas ganas. Así, el objetivo de este capítulo, y aunque me salga ligeramente de la temática del tutorial, es el de acrecentar esas ganas de aprender a programar, mostrándote algunos ejemplos prácticos, para que veas lo sencillo que es Python y lo fácil que es llevarlo a la práctica con Sense Hat Emulator. Es decir, se trata de jugar con Python y el Sense Hat Emulator. Con todo y con eso, decirte, que esto mismo lo podrás aplicar a la práctica, en el Sense Hat, con unos mínimos cambios en el código, tal y como te adelanté en el mismo capítulo.

Así para seguir este capítulo sobre Python y el Sense Hat Emulator, solo necesitas un editor, como podría ser Thonny, que te comenté hace un par de capítulos, Python, por supuesto, y unas pocas ganas de pasar una entretenida tarde de Domingo, o cualquier rato, que tu le quieras dedicar a esto.

Aprender Python y Sense Hat Emulator

Aprender con Python y Sense Hat Emulator

Como has podido ver en la introducción del podcast, los requerimientos para aprender con Python y Sense Hat Emulator son bastante reducidos. Lo mejor de todo, es que no necesitas adquirir ni siquiera el Sense Hat, lo que ya es un considerable alivio, teniendo en cuenta que no es nada económico. Sin embargo, puede sentar los precedentes, para que lo quieras instalar. Desde, luego, antes de lanzarte a realizar ese desembolso económico, mi recomendación es que lo pruebes, que exprimas al máximo Python y Sense Hat Emulator, y luego, si todavía te quedan ganas lo compres.

Instalar Sense Hat Emulator

En el caso de que no tengas una Pi400, o una Raspberry Pi, con el entorno de escritorio de Raspberry Pi OS, puedes instalar el Sense Hat Emulator, realizando los siguientes pasos en Ubuntu, Linux Mint y otras distribuciones.

pip3 install --user sense-emu

Cuando te canses de hacer tus aplicaciones para el Sense Hat Emulator, solo tienes que desinstalarlo ejecutando,

pip3 uninstall sense-emu

Con esta sencilla instrucción ya tienes Sense Hat Emulator instalado en tu equipo. Si lo quieres ejecutar, para verlo en vivo y en directo, tan solo tienes que ejecutar la instrucción sense_emu_gui.

Teniendo en cuenta que recurrir al terminal cada vez que quieras ejecutar el emulador, es un poco tedioso, te recomiendo que crees el archivo ~/.local/share/applications, con el siguiente contenido,

[Desktop Entry]
Name=Sense Hat Emulator
GenericName=Sense Hat Emulator
Icon=applications-engineering-symbolic
Exec=sense_emu_gui
Type=Application

Con esto ya lo tienes resuelto. Ahora puedes buscarlo en el menú de aplicaciones o directamente lanzarlo desde tu lanzador de aplicaciones preferido, ya sea Rofi o el que tu quieras.

Pon un pixel en el tu vida

Vamos de mas sencillo a mas complejo. A continuación te muestro el código, que tienes que escribir, y luego te explico que es cada parte, para que a partir de este punto podamos ir mas rápido.

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

from sense_emu import SenseHat

sense = SenseHat()
x = 3
y = 4
color = (255, 0, 0)
sense.set_pixel(x, y, color)

Como se que estás ansioso por probarlo, lo primero es que inicies el Sense Hat Emulator para que lo tengas en funcionamiento de aquí en adelante. El segundo paso es que pongas este código en un archivo, por ejemplo, prueba01.py. Y el tercer y último paso es que lo ejecutes con,

python3 prueba01.py

Si todo ha ido bien el pixel que se encuentra en las coordenadas (3,4), es decir, 3 desde la izquierda y cuatro desde la parte superior tiene que haberse puesto de color Rojo.

Pero ¿Que es todo esto?

Vamos por partes, línea a línea y te voy contando que es, y para que es cada una de las líneas que aparecen en esta pequeña aplicación.

  • La primera de las líneas indica con que se va a ejecutar la aplicación. En este caso he indicado python3. Esto es interesante para el caso de que marques el archivo donde se encuentra la aplicación como ejecutable.
  • La segunda de las líneas coding: utf-8 indica como está codificado el archivo en el que se encuentra tu aplicación.

De estas dos líneas en principio no te tienes que preocupar por el momento. Puedes dejarlas siempre igual.

  • Pero llega el momento importante from sense_emu import SenseHat. Aquí lo que estás haciendo es traerte SenseHat del módulo sense_emu. ¿A que me refiero con traerse? Me refiero a que en en el módulo sense_emu existen definidos una serie de clases, funciones, constantes, y para poder utilizarlos en tu aplicación, tu tienes que decirle a Python, que los quieres utilizar, porque se trata de elementos externos. Con elementos externos me refiero a que no forman parte del núcleo de Python.
  • Con la línea sense = SenseHat() declaro un objeto de la clase SenseHat que te has traído de la línea anterior del módulo sense_emu.

Si no sabes lo que es un objeto y una clase, decirte que una clase es un elemento que tiene atributos y métodos. Para que te hagas una idea, una clase podría ser un dado, un atributo del dado, sería el número de caras, y un método del dado sería lanzar dado. ¿Y un objeto? Una instancia de la clase… ¿instancia?. Digamos que una clase es una plantilla, donde defines atributos y acciones que puede realizar. Por otro lado, los objetos son implementaciones de esa clase. Es decir tienes la clase dado y has definido 3 objetos, uno de 6 caras, uno de 8 caras y otro de doce caras.

Así, en el caso del SenseHat, la clase SenseHat tiene muchas propiedades, como por ejemplo, el color de cada uno de los leds.

  • En las siguientes tres líneas de código defines tres variables. Por un lado la coordenada x, que la defines con el valor 3. La coordenada y que la defines con el valor 4. Estos son números enteros. Pero, la variable color lo defines como (255, 0, 0). Este tipo variable es del tipo tupla. Se trata de un tipo de variable que te permite guardar varios elementos dentro de una misma variable. Las tuplas, son inmutables, no se pueden modificar.
  • En la última línea de nuestra aplicación, utilizamos uno de los métodos que nuestro objeto sense de la clase SenseHat tiene definidos. Utilizamos el método set_pixel, que nos permite definir el color de un pixel.

Leer un pixel

¿Y si quisieras conocer el color de ese pixel? Para este caso, puedes utilizar otro método de la clase SenseHat, puedes utilizar el método get_pixel. Para probarlo, y siempre sin detener el emulador, crea otra aplicación, que puedes llamar prueba02.py. En este archivo tienes que poner el siguiente código,

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

from sense_emu import SenseHat

sense = SenseHat()
x = 3
y = 4
color = sense.get_pixel(x, y)
print(color)

De esta segunda aplicación casi todo es familiar para ti. Solo he cambiado las dos líneas de código. En estas dos líneas lo que hago es leer el color del píxel x,y del objeto sense de la clase SenseHat, y en la última línea, imprimir el valor obtenido por la consola con print(color).

Si todo ha ido bien, tienes que haber obtenido algo como [248, 0, 0]. Esto es un array. Si, tu le pasas una tupla y el te devuelve un array. Entre otras cosas, la diferencia de un array con una tupla es que, mientras que la tupla es inmutable como te decía, el array si que lo puedes modificar.

Pero, ¿porque te devuelve el componente R del color a 248 en lugar de a 255? Esto es algo que han introducido los desarrolladores del emulador para dotar a este emulador de realismo.

Apagar un pixel

Y llegados a este punto… ¿Como apagarías ese pixel? Efectivamente, tan sencillo como poner el color a (0, 0, 0).

sense.set_pixel(3, 4, (0, 0, 0))

Pongamos que estas toda la tarde del domingo entretenido poniendo colores a diferentes pixel. Tienes 64 pixel en total, 8 en filas y 8 en columnas. ¿Tienes que ir uno por uno? Pues es una opción. Pero, en lugar de repetir la misma línea 64 veces, puedes utilizar bucles. ¿Como?¿Bucles?. Fíjate,

color = (0, 0, 0)
for x in [0, 1, 2, 3, 4, 5, 6, 7]:
    for y in [0, 1, 2, 3, 4, 5, 6, 7]:
        sense.set_pixel(x, y, color)

Así mucho más rápido, sencillo y práctico. Mucho mejor que emular a Bart Simpson, escribiendo en su pizarra.

El bucle for x in [0, 1, 2, 3, 4, 5, 6, 7] lo que consigue es que x tome los valores del array y repita todo el código que hay dentro del bucle. Exactamente, lo mismo sucede para el siguiente bucle.

Ahora te tengo que contar un secreto, esto mismo de apagar todos los led, lo puedes hacer con sense.clear()

Pintando filas de colores

Y vamos un paso mas allá… ¿como harías para pintar una fila de un color y otra fila de otro?. Si, soluciones hay muchas, pero yo te propongo la siguiente,

for x in range(0, 8):
    for y in range(0, 8):
        if y % 2 == 0:
            color = (255, 0, 0)
        else:
            color = (0, 255, 0)
        sense.set_pixel(x, y, color)

Aquí introduje una nueva función, range. Esta función hace lo mismo que habíamos hecho hasta el momento con el [0, 1, 2, 3, 4, 5, 6, 7], pero de forma mas rápido y, probablemente, mas elegante.

Conclusión

Espero que estos pasos de iniciación, hayan servido de acicate para que te animes con esto de la programación con Python, porque como ves, no es nada, pero nada complejo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *