Índice:
Vídeo: RuuviTag e PiZero W e Blinkt! um termômetro baseado em Beacon Bluetooth: 3 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
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
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:
Usar smartphone como termômetro sem contato / termômetro portátil: 8 etapas (com fotos)
Use Smartphone como termômetro sem contato / termômetro portátil: Medir a temperatura corporal com sem contato / sem contato como uma pistola térmica. Eu criei este projeto porque o Thermo Gun agora é muito caro, então preciso encontrar uma alternativa para fazer DIY. E o objetivo é fazer com a versão de baixo orçamento.SuppliesMLX90614Ardu
Controle remoto IR baseado em Arduino automático baseado em temperatura: 7 etapas
Controle remoto IR baseado em Arduino automático baseado em temperatura: Ei, e aí, pessoal! Akarsh aqui da CETech. Cansado de acordar no meio de um sono profundo só porque a temperatura ambiente está muito baixa ou muito alta por causa do seu AC mudo. Então este projeto é para você. Neste projeto, vamos fazer o nosso
Termômetro digital baseado em Arduino: 3 etapas
Termômetro digital baseado em Arduino: neste projeto, um termômetro digital baseado em Arduino é projetado para ser usado para analisar a temperatura da sala. O termômetro é geralmente usado como um instrumento de medição de temperatura. Existem vários princípios que podem ser usados para medir
Termômetro infravermelho sem contato baseado em Arduino - Termômetro baseado em IR usando Arduino: 4 etapas
Termômetro infravermelho sem contato baseado em Arduino | Termômetro baseado em IR usando Arduino: Olá pessoal, neste instructables faremos um termômetro sem contato usando arduino. Já que às vezes a temperatura do líquido / sólido é muito alta ou muito baixa e então é difícil fazer contato com ele e ler sua temperatura então naquele cenário
Termômetro digital baseado em Picaxe com máximo e mínimo: 13 etapas
Termômetro Digital Baseado em Picaxe Com Máx e Mín: (Por favor, deixe uma mensagem, mas não seja muito crítico, este é meu primeiro instrutível !!) Este é um termômetro que fiz para nossa van, para mostrar a temperatura externa. É baseado em um chip Picaxe, pois são baratos e fáceis de usar. Se isso for para