Índice:

RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth: 3 etapas (com imagens)
RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth: 3 etapas (com imagens)

Vídeo: RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth: 3 etapas (com imagens)

Vídeo: RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth: 3 etapas (com imagens)
Vídeo: Schrämper Tobias: Grundinstallation und Einbau eines Raspberry Pi ins Wohnmobil 2024, Novembro
Anonim
RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth
RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth
RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth
RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth
RuuviTag e PiZero W e Blinkt! um termômetro Bluetooth Beacon
RuuviTag e PiZero W e Blinkt! um termômetro Bluetooth Beacon

Este instrutível descreve uma abordagem para ler dados de temperatura e umidade de um RuuviTag usando Bluetooth com Raspberry Pi Zero W e para exibir os valores em números binários em um blinkt Pimoroni! pHAT. Ou resumindo: como construir um termômetro de última geração e um pouco nerd.

O RuuviTag é um beacon de sensor de código aberto que vem com sensores de temperatura / umidade / pressão e aceleração, mas também pode atuar como um beacon de proximidade Eddystone ™ / iBeacon padrão. Foi um projeto Kickstarter com muito sucesso e eu ganhei o meu há algumas semanas. Existe um Github com software python para ler o RuuviTag usando uma framboesa, e usei um de seus exemplos, com alguns acréscimos.

O Raspberry Pi Zero W é o mais recente membro da família RPi, basicamente um Pi Zero com Bluetooth e WLAN adicionados.

O blinkt! O pHAT da Pimoroni é basicamente uma faixa de oito LEDs RBG configurados como um HAT para o Raspberry Pi. É muito fácil de usar e vem com uma biblioteca python. A ideia era ler os dados do RuuviTag e exibi-los usando o blinkt! CHAPÉU. Os valores são exibidos como números binários usando 7 dos LEDs, enquanto o oito é usado para indicar se os valores de umidade ou temperatura (+ / - / 0) são exibidos.

Etapa 1: Configurando o sistema

A configuração do sistema é fácil: - Ligue o RuuviTag (versão com sensor de temperatura RuuviTag).

- Configure seu RPi Zero W, RPi3 ou qualquer outro RPi com capacidade bluetooth adicionada, seguindo as instruções em www.raspberrypi.org.

- Coloque o blinkt! HAT no RPi (enquanto desligado).

- Instale o blinkt! e o software RuuviTag, conforme indicado nas páginas do GitHub correspondentes.

- Agora você deve identificar o endereço MAC do seu RuuviTag

- copie o programa Python anexado, abra-o com IDLE para Python 3

- mude o endereço MAC do RuuviTag para o seu, depois salve e execute o programa.

- sinta-se à vontade para modificar e otimizar o programa. O programa vem como está, para ser usado por sua própria conta e risco, nenhuma responsabilidade é assumida por quaisquer danos.

Etapa 2: o dispositivo e o programa

O Dispositivo e o Programa
O Dispositivo e o Programa
O Dispositivo e o Programa
O Dispositivo e o Programa
O Dispositivo e o Programa
O Dispositivo e o Programa
O Dispositivo e o Programa
O Dispositivo e o Programa

Como mencionado acima, a ideia era construir um sistema simples e barato para ler os dados do beacon e exibir valores numéricos no blinkt! HAT ou uma faixa de LED semelhante.

A faixa de valores para a temperatura a ser medida com um sistema baseado em RPi estará, na maioria dos casos, em algum lugar entre - 50 ° C e + 80 ° C, para umidade entre 0 e 100%. Portanto, um display que pode fornecer valores de -100 a +100 será suficiente para a maioria das aplicações. Números decimais menores como 128 podem ser exibidos como números binários com 7 bits (ou LEDs). Assim, o programa pega os valores de temperatura e umidade do RuuviTag como números "flutuantes" e os transforma em números binários, que são exibidos no blinkt !.

Em uma primeira etapa, o número é arredondado, analisado se for positivo, negativo ou zero e, em seguida, transformado em um número positivo usando "abs". Em seguida, o número decimal é convertido em um número binário de 7 dígitos, basicamente uma string de 0s e 1s, que é analisada e exibida nos últimos 7 pixels do blinkt !.

Para valores de temperatura, o primeiro pixel indica se o valor é positivo (vermelho), zero (magenta) ou negativo (azul). Exibindo os valores de umidade, é definido como verde. Para simplificar a discriminação entre os valores de temperatura e umidade, os pixels binários são definidos como branco para temperatura e amarelo para umidade. Para melhorar a legibilidade dos números binários, os pixels "0" não são desligados completamente, mas em vez disso são configurados muito mais fracos do que no estado "1". Como blinkt! pixels são muito brilhantes, você pode definir o brilho geral alterando o parâmetro "brilhante"

O programa exibe os valores e partes do processo também na tela. Além disso, você encontrará várias instruções de impressão sem áudio (#). Eu os deixei, pois você pode considerá-los úteis para entender o processo, se não silenciado.

Os valores também podem ser armazenados em um arquivo de log.

Etapa 3: Código do programa

O código foi um pouco depurado e otimizado. Agora você pode encontrar a versão 3 (20_03_2017).

'Este programa se destina a ler os valores de temperatura, umidade e pressão de um RuuviTag' 'e exibir os valores de temperatura e umidade como números binários em um piscar Pimorini! CHAPÉU. '' '' É baseado no exemplo print_to_screen.py da biblioteca ruuvitag no github. '' Requer um Pi Zero W, Pi 3 ou qualquer outro RPi equipado com bluetooth e todas as bibliotecas necessárias instaladas. '

tempo de importação

import os from datetime import datetime

de ruuvitag_sensor.ruuvi import RuuviTagSensor

from blinkt import set_clear_on_exit, set_pixel, clear, show

def temp_blinkt (bt):

# esta rotina pega o valor da temperatura e o exibe como um número binário em intermitente!

Claro ()

# cor e intensidade de "1" pixels: branco

r1 = 64 g1 = 64 b1 = 64

#cor e intensidade de "0" pixels: branco

r0 = 5 g0 = 5 b0 = 5

# Arredonda e converte em inteiro

r = redondo (bt)

# vz representa o sinal algébrico para o pixel indicador

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

# transforma em número binário absoluto de 7 dígitos

i1 = i + 128 # para i resulta em um número binário de 8 dígitos começando com 1 # print (i1)

b = "{0: b}". formato (i1) # converter para binário

# impressão (b)

b0 = str (b) # converter em string

b1 = b0 [1: 8] #truncar primeiro bit

imprimir ("número binário:", b1)

# Defina pixels em blinkt!

# definir número binário

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

# Definir pixel indicador

if (vz == 1): set_pixel (0, 64, 0, 0) # red para valores positivos elif (vz == 2): set_pixel (0, 0, 0, 64) # blue para valores negativos else: set_pixel (0, 64, 0, 64) # magenta se zero

exposição()

# fim de temp_blinkt ()

def hum_blinkt (bh):

# isso pega o valor de umidade e o exibe como um número binário em intermitência!

Claro()

# cor e intensidade de "1" pixels: amarelo

r1 = 64 g1 = 64 b1 = 0

#cor e intensidade de "0" pixels:

r0 = 5 g0 = 5 b0 = 0

# Arredonda e transforma em inteiro

r = redondo (bh)

# transforma em absoluto, número binário de 7 dígitos i = abs (r) #print (i)

i1 = i + 128 # para i dá um número binário de 8 dígitos começando com 1

# imprimir (i1)

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

# impressão (b)

b0 = str (b)

b1 = b0 [1: 8] #truncar primeiro bit

imprimir ("número binário:", b1)

# Defina os pixels em blinkt!

# define o número binário em pixels

para h no intervalo (0, 7): f = (h + 1) if (b1 [h] == "1"): set_pixel (f, r1, g1, b1) else: # mudo para LEDs em branco set_pixel (f, r0, g0, b0) # mudo para LEDs em branco

# Definir pixel indicador

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

exposição()

# fim de hum_blinkt ()

set_clear_on_exit ()

# Lendo dados do RuuviTag

mac = 'EC: 6D: 59: 6D: 01: 1C' # Mude para o endereço mac do seu próprio dispositivo

imprimir ('Iniciando')

sensor = RuuviTagSensor (mac)

enquanto verdadeiro:

data = sensor.update ()

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

line_tem = str.format ('Temperatura: {0} C', data ['temperatura']) line_hum = str.format ('Umidade: {0}%', data ['umidade']) line_pre = str.format ('Pressão: {0}', dados ['pressão'])

imprimir()

# exibir temperatura em piscar! ba = str.format ('{0}', data ['temperatura']) bt = float (ba) print (bt, "Â ° C") temp_blinkt (bt) print ()

time.sleep (10) # exibe a temperatura por 10 segundos

# exibir umidade em piscar!

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

# Limpe a tela e imprima os dados do sensor na tela

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

# Espere alguns segundos e comece de novo

try: time.sleep (8) except KeyboardInterrupt: # Quando Ctrl + C é pressionado, a execução do loop while é interrompido print ('Exit') clear () show () break

Recomendado: