Tabla de contenido:

RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth: 3 pasos (con imágenes)
RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth: 3 pasos (con imágenes)

Video: RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth: 3 pasos (con imágenes)

Video: RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth: 3 pasos (con imágenes)
Video: Schrämper Tobias: Grundinstallation und Einbau eines Raspberry Pi ins Wohnmobil 2024, Noviembre
Anonim
RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth
RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth
RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth
RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth
RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth
RuuviTag y PiZero W y Blinkt! un termómetro basado en baliza Bluetooth

Este instructivo describe un enfoque para leer datos de temperatura y humedad de un RuuviTag usando Bluetooth con una Raspberry Pi Zero W y para mostrar los valores en números binarios en un Pimoroni blinkt. pHAT. O, en pocas palabras: cómo construir un termómetro de vanguardia y un poco nerd.

El RuuviTag es una baliza bluetooth con sensor de código abierto que viene con sensores de temperatura / humedad / presión y de aceleración, pero también puede actuar como una baliza de proximidad estándar Eddystone ™ / iBeacon. Fue un proyecto de Kickstarter con mucho éxito y obtuve el mío hace unas semanas. Hay un Github con software python para leer el RuuviTag usando una frambuesa, y he usado uno de sus ejemplos, con algunas adiciones.

La Raspberry Pi Zero W es el último miembro de la familia RPi, básicamente un Pi Zero con Bluetooth y WLAN agregados.

¡El blinkt! pHAT de Pimoroni es básicamente una tira de ocho LED RBG configurados como HAT para Raspberry Pi. Es muy fácil de usar y viene con una biblioteca de Python. La idea era leer los datos del RuuviTag y mostrarlos usando el blinkt! SOMBRERO. Los valores se muestran como números binarios usando 7 de los LED, mientras que el ocho se usa para indicar si se muestran los valores de humedad o temperatura (+ / - / 0).

Paso 1: configurar el sistema

Configurar el sistema es fácil: - Encienda el RuuviTag (versión con sensor de temperatura RuuviTag).

- Configure su RPi Zero W, RPi3 o cualquier otro RPi con capacidad bluetooth agregada, siguiendo las instrucciones en www.raspberrypi.org.

- ¡Coloca el blinkt! SOMBRERO en el RPi (mientras está apagado).

- Instale el blinkt! y el software RuuviTag, como se indica en las páginas de GitHub correspondientes.

- Ahora tiene que identificar la dirección MAC de su RuuviTag

- copie el programa Python adjunto, ábralo con IDLE para Python 3

- cambie la dirección MAC del RuuviTag por la suya, luego guarde y ejecute el programa.

- no dude en modificar y optimizar el programa. El programa viene como está, para ser utilizado bajo su propio riesgo, no se asume ninguna responsabilidad por daños.

Paso 2: el dispositivo y el programa

El dispositivo y el programa
El dispositivo y el programa
El dispositivo y el programa
El dispositivo y el programa
El dispositivo y el programa
El dispositivo y el programa
El dispositivo y el programa
El dispositivo y el programa

Como se mencionó anteriormente, la idea era construir un sistema simple y económico para leer datos de la baliza y mostrar valores numéricos en el blinkt. HAT, o una tira de LED similar.

El rango de valores de temperatura a medir con un sistema basado en RPi estará en la mayoría de los casos entre - 50 ° C y + 80 ° C, para humedad entre 0 y 100%. Por tanto, una pantalla que pueda dar valores de -100 a +100 será suficiente para la mayoría de las aplicaciones. Los números decimales más pequeños como 128 se pueden mostrar como números binarios con 7 bits (o LED). Entonces, el programa toma los valores de temperatura y humedad del RuuviTag como números "flotantes" y los transforma en números binarios, que luego se muestran en el blinkt !.

Como primer paso, el número se redondea, se analiza si es positivo, negativo o cero, y luego se transforma en un número positivo usando "abs". Luego, el número decimal se convierte en un número binario de 7 dígitos, básicamente una cadena de 0 y 1, que se analiza y se muestra en los últimos 7 píxeles del blinkt !.

Para los valores de temperatura, el primer píxel indica si el valor es positivo (rojo), cero (magenta) o negativo (azul). Al mostrar los valores de humedad, se establece en verde. Para simplificar la discriminación entre los valores de temperatura y humedad, los píxeles binarios se establecen en blanco para la temperatura y en amarillo para la humedad. Para mejorar la legibilidad de los números binarios, los píxeles "0" no se desactivan por completo, sino que se configuran mucho más débiles que en el estado "1". ¡Como blinkt! los píxeles son muy brillantes, puede configurar el brillo general cambiando el parámetro "brillante"

El programa muestra los valores y partes del proceso también en pantalla. Además, encontrará varias instrucciones de impresión silenciadas (#). Los dejé, ya que pueden resultarle útiles para comprender el proceso si no están silenciados.

Los valores también pueden almacenarse en un archivo de registro.

Paso 3: Código de programa

El código fue un poco depurado y optimizado. Ahora puede encontrar la versión 3 (20_03_2017).

'¡Este programa está diseñado para leer los valores de temperatura, humedad y presión de un RuuviTag' 'y mostrar los valores de temperatura y humedad como números binarios en un parpadeo de Pimorini! SOMBRERO. '' '' Se basa en el ejemplo print_to_screen.py de la biblioteca ruuvitag en github. '' Requiere un Pi Zero W, Pi 3 o cualquier otro RPi equipado con bluetooth y todas las bibliotecas necesarias instaladas. '

tiempo de importación

importar sistema operativo desde fecha y hora importar fecha y hora

de ruuvitag_sensor.ruuvi importar RuuviTagSensor

de blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# ¡esta rutina toma el valor de temperatura y lo muestra como un número binario en blinkt!

claro ()

# color e intensidad de "1" píxeles: blanco

r1 = 64 g1 = 64 b1 = 64

#color e intensidad de "0" píxeles: blanco

r0 = 5 g0 = 5 b0 = 5

# Redondea y convierte en entero

r = redondo (bt)

# vz representa el signo algebraico del píxel indicador

if (r> 0): vz = 1 # positivo elif (r <0): vz = 2 # negativo else: vz = 0 # cero # print (vz) i = abs (r) #print (i)

# transformar en número binario absoluto de 7 dígitos

i1 = i + 128 # para i da como resultado un número binario de 8 dígitos que comienza con 1 # print (i1)

b = "{0: b}". formato (i1) # convertir a binario

# imprimir (b)

b0 = str (b) # convertir a cadena

b1 = b0 [1: 8] #truncar el primer bit

print ("número binario:", b1)

# ¡Establecer píxeles en blinkt!

# establecer número binario

para h en el rango (0, 7): f = (h + 1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " es 1, pixel ", f) else: set_pixel (f, r0, g0, b0) # print (" nil ")

# Establecer píxel indicador

if (vz == 1): set_pixel (0, 64, 0, 0) # rojo para valores positivos elif (vz == 2): set_pixel (0, 0, 0, 64) # azul para valores negativos else: set_pixel (0, 64, 0, 64) # magenta si es cero

show()

# final de temp_blinkt ()

def hum_blinkt (bh):

# ¡Esto toma el valor de humedad y lo muestra como un número binario en blinkt!

claro()

# color e intensidad de "1" píxeles: amarillo

r1 = 64 g1 = 64 b1 = 0

#color e intensidad de "0" píxeles:

r0 = 5 g0 = 5 b0 = 0

# Redondea y transforma en entero

r = redondo (bh)

# transformar a un número binario absoluto de 7 dígitos i = abs (r) #print (i)

i1 = i + 128 # para i da un número binario de 8 dígitos que comienza con 1

# imprimir (i1)

b = "{0: b}". formato (i1)

# imprimir (b)

b0 = str (b)

b1 = b0 [1: 8] #truncar el primer bit

print ("número binario:", b1)

# ¡Establecer píxeles en blinkt!

# establecer el número binario en píxeles

para h en el rango (0, 7): f = (h + 1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # mute to blank LED set_pixel (f, r0, g0, b0) # silenciar a LED en blanco

# Establecer píxel indicador

set_pixel (0, 0, 64, 0) # verde para humedad

show()

# final de hum_blinkt ()

set_clear_on_exit ()

# Leer datos de RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Cambie a la dirección mac de su propio dispositivo

print ('Comenzando')

sensor = RuuviTagSensor (mac)

mientras que es cierto:

datos = sensor.update ()

line_sen = str.format ('Sensor - {0}', mac)

line_tem = str.format ('Temperatura: {0} C', datos ['temperatura']) line_hum = str.format ('Humedad: {0}%', datos ['humedad']) line_pre = str.format ('Presión: {0}', datos ['presión'])

impresión()

# muestra la temperatura en blinkt! ba = str.format ('{0}', data ['temperatura']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

time.sleep (10) # muestra la temperatura durante 10 segundos

# mostrar la humedad en blinkt!

bg = str.format ('{0}', data ['humedad']) bh = float (bg) print (bh, "%") hum_blinkt (bh) print ()

# Limpiar la pantalla e imprimir los datos del sensor en la pantalla

os.system ('clear') print ('Presiona Ctrl + C para salir. / n / n') print (str (datetime.now ())) print (line_sen) print (line_tem) print (line_hum) print (line_pre) imprimir ('\ n / n / r …….')

# Espere unos segundos y comience de nuevo

try: time.sleep (8) excepto KeyboardInterrupt: # Cuando se presiona Ctrl + C, la ejecución del ciclo while se detiene print ('Exit') clear () show () break

Recomendado: