Jugando con el Sense HAT, la Raspberry y Telegram

Raspberry Pi 400Raspberry 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.

En los capítulos anteriores del tutorial has jugar con el emulador de Sense HAT. Pero, yo en particular, no he podido resistirme a probar y jugar con el Sense HAT, para ver que se podía hacer con él, y la posible dificultad que pudiera tener a la hora de instalarlo y ponerlo en marcha. Así, de paso, he estado una tarde jugando con el Sense HAT. Un dispositivo con el que puedes pasar una buena tarde en familia.

La cuestión es que un dispositivo de este estilo te permite materializar todo aquello que probaste con el emulador. Pero como de costumbre, esto del Sense HAT, al igual que con cualquier otro dispositivo, tiene el problema del empezar. Porque una vez lo pruebas esto es un no parar, tienes que tranquilizar a tu imaginación.

Jugando con el Sense HAT, la Raspberry y Telegram

Que es el Sense HAT

Aunque en el capítulo en el que te hablé sobre el Sense HAT emulator, te hablé sobre el propio Sense HAT, y de hecho, me remito a este capítulo para que veas las posibilidades que este dispositivo te ofrece.

En particular, en este capítulo del tutorial, quiero comentarte como configurarlo, y como sacarle partido… Aunque como te he comentado anteriormente, aquí el límite lo pones tu, en el sentido de que tendrás que ponerle freno a tu imaginación.

Instalación

En mi caso, y aunque el tutorial está centrado en la Pi 400, lo cierto es que este dispositivo lo he montado sobre una Pi 4. Esto lo he hecho así para poder redactar este capítulo del tutorial a la vez que veía que estaba sucediendo.

A la hora de montarlo no tendrás ningún problema. Sin embargo, si que he tenido problemas a la hora de ponerlo en marcha. Aunque desde luego, te recomiendo que pruebes a ponerlo en funcionamiento sin aplicar lo que te comentaré a continuación.

Al iniciar la Raspberry se debería encender todos los leds en forma de arco iris o algo similar. Si esto no sucede, prueba a ejecutar la siguiente instrucción,

sudo i2cdetect -y 1

Esto te debería devolver un resultado como el que te muestro a continuación,

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- 1a -- 1c -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- UU -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- 5c -- -- 5f 
60: -- -- -- -- -- -- -- -- -- -- 6a -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

En caso que no te funcione ejecuta la siguiente instrucción y reinicia tu Raspberry,

echo "dtoverlay=rpi-sense" | sudo tee -a /boot/config.txt

Puedes reiniciar la Raspberry ejecutando,

sudo reboot now

Una vez reiniciada todo debería funcionar correctamente.

Jugando con Sense HAT y la Raspberry

Para comenzar a disfrutar, lo vas a hacer directamente desde la línea de comandos sin necesidad de hacer ningún script. Simplemente ejecuta python3. Cuando lo hagas entrarás en la shell de Python.

El primer paso que tienes que hacer es importarte el módulo que te permite gestionar el Sense HAT, para ello, ejecuta las siguientes instrucciones,

>>> from sense_hat import SenseHat
>>> sense = SenseHat()
>>> sense.clear()

Y ahora simplemente escribe un texto para ver como se muestra en el Sense HAT, por ejemplo,

>>> sense.show_message("Hola mundo")

Si te parece que va muy deprisa, simplemente puedes modificar la velocidad utilizando sense.show_message("Hola mundo", scroll_speed=0.5). Si quisieras aumentar la velocidad, en lugar de utilizar 0.5 puedes utilizar 0.05.

De la misma manera, también puedes cambiar el color, tanto del texto como del fondo del mensaje, de la siguiente forma,

>>> sense.show_message("Hola mundo", scroll_speed=0.01, text_colour=(255,0,0), back_colour=(0,255,0))

Si quisieras mostrar continuamente el mismo mensaje, podrías hacerlo de la siguiente forma,

import time
while True:
    sense.show_message("Hola mundo", scroll_speed=0.05)
    time.sleep(1)

El time.sleep(1) simplemente es para que entre mensaje y mensaje descanse 1 segundo.

En momento, recuerda que para limpiar la pantalla simplemente tienes que ejecutar,

sense.clear()

Sensores

Una de las características mas interesantes que aporta Sense HAT son los sensores. En este sentido, tienes diferentes sensores que te permiten medir la temperatura, presión, humedad relativa. Además tienes un giroscopio, acelerómetro y un magnetómetro.

Como te digo tienes un buen conjunto de herramientas con los que entretenerte. Así por ejemplo, podrías llevar un control de temperatura y humedad relativa, y en el caso de que se superen determinados valores, tu Raspberry te mande un mensaje de Telegram, podrías hacerlo siguiendo estos pasos.

Si quieres conocer mas sobre la programación de bots de Telegram, te recomiendo que le des un repaso al tutorial sobre como crear tu propio bot de Telegram.

Para leer la temperatura solo tienes que utilizar,

temperatura = sense.get_temperature()
print(temperatura)

Crea un sencillo script como el que te muestro a continuación,

#!/usr/bin/env python3
import requests
from sense_hat import SenseHat
from time import sleep

TOKEN = "XXXXXXXXXXXXXXXXXXXX"
CHAT_ID = "XXXXXXXXXXXXXXXX"
TEMPERATURE_MAX = 35
MSG = "Se ha superado los {} con un valor de {}"
URL = "https://api.telegram.org/bot{}/sendMessage".format(TOKEN)

def send_message(message):
    data = {'chat_id': CHAT_ID, 'text': message}
    requests.post(URL, data)

def bucle():
    sense = SenseHat()
    sense.clear()
    while True:
        temperature = sense.get_temperature()
        if temperature > TEMPERATURE_MAX:
            msg = MSG.format(TEMPERATURE_MAX, temperature)
            send_message(msg)
        sleep(5)

if __name__ == '__main__':
    bucle()

He añadido un tiempo de espera, sleep(5), entre cada lectura, pero entiendo que podrías aumentarlo para que fuese cada 5 minutos por ejemplo, que creo que es un tiempo suficientemente considerable. Además podrías hacer que cuando sucediera esto además hiciera tipo luz destelleante,

Para esto añade la siguiente función,

def luz():
    for i in range(0, 5):
        sense.clear()
        sleep(1)
        sense.clear((255, 0, 0))
        sleep(1)
        sense.clear((0, 255, 0))
        sleep(1)
        sense.clear((0, 0, 255))

Esta función la podrías añadir inmediatamente después de enviar el mensaje, de esta forma la condición quedaría de la siguiente forma,

temperature = sense.get_temperature()
if temperature > TEMPERATURE_MAX:
    msg = MSG.format(TEMPERATURE_MAX, temperature)
    send_message(msg)
    luz()

Para la presión y la humedad relativa, el procedimiento es similar al que te he mostrado aquí. Tan solo tienes que seleccionar el parámetro o parámetro que quieres tener vigilado, y ponerlo en marcha.

El sensor IMU

En el caso del caso del sensor IMU, indicarte que se trata de tres sensores en uno,

  • giroscopio
  • acelerómetro
  • magnetómetro

Para habilitarlos o deshabilitarlos tienes que utilizar el método set_imu_config. Por ejemplo si quisieras conocer donde está el norte, tendrías que habilitar únicamente el magnetómetro y realizar la medición,

>>> sense.set_imu_config(True, False, False)
>>> print(sense.get_compass())

Más información,

Deja una respuesta

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