Índice:

Estação meteorológica Inky_pHAT: 5 etapas
Estação meteorológica Inky_pHAT: 5 etapas

Vídeo: Estação meteorológica Inky_pHAT: 5 etapas

Vídeo: Estação meteorológica Inky_pHAT: 5 etapas
Vídeo: MUITO CUIDADOS POIS ELES IMITAM TUDO 2024, Novembro
Anonim
Estação meteorológica Inky_pHAT
Estação meteorológica Inky_pHAT
Estação meteorológica Inky_pHAT
Estação meteorológica Inky_pHAT
Estação meteorológica Inky_pHAT
Estação meteorológica Inky_pHAT
Estação meteorológica Inky_pHAT
Estação meteorológica Inky_pHAT

Gostaria de descrever aqui uma estação meteorológica baseada em Raspberry Pi Zero muito simples e compacta, que exibe os valores medidos por um sensor de temperatura / pressão / umidade BME280 em um visor de papel eletrônico / tinta eletrônica Pimoroni Inky pHAT. Para permitir a conexão dos sensores e do pHAT ao GPIO do Pi, coloquei um hacker Pimorini Pico HAT com dois headers fêmeas presos entre o GPIO e a tela. O dispositivo foi usado para conectar vários sensores, portanto, a versão BME280 descrita aqui é apenas um exemplo.

Ao contrário dos visores LCD, os visores e-ink mantêm a imagem mesmo se a alimentação for desligada. Portanto, eles são uma solução muito boa se você deseja exibir informações que são atualizadas apenas de vez em quando, especialmente para construir dispositivos de baixo consumo de energia. O principal benefício da versão monocromática / preta do Inky pHAT é que a atualização do visor leva apenas cerca de um segundo, em vez dos dez a quinze segundos exigidos pelas versões de três cores. Veja o filme.

A biblioteca Blinka da Adafruit permite executar o código do Circuit Python no Raspberry Pi, e as amostras do Circuit Python para uma ampla variedade de sensores estão disponíveis na Adafruit. Uma descrição detalhada de como instalar o Blinka e os códigos Circuit Python pode ser encontrada no site da Adafruit. As bibliotecas que testei até agora (BMP280, BME280, TSL2591, TCS34785, VEML7065, …) estavam funcionando muito bem, embora houvesse pequenos problemas em alguns dos códigos de exemplo.

BME280 é um sensor para medir temperatura, umidade e pressão atmosférica. Os breakouts do BMP280 estão disponíveis em muitos fornecedores, incluindo Adafruit, mas eu aqui estava usando uma versão chinesa barata. Esteja ciente de que eles estão usando endereços i2c diferentes (Adafruit: 0x77, outros: 0x76).

O breakout é conectado ao Pi por i2c, e a leitura do sensor é muito simples usando a biblioteca e o código de exemplo.

Etapa 1: Materiais Usados

Materiais utilizados
Materiais utilizados
Materiais utilizados
Materiais utilizados
Materiais utilizados
Materiais utilizados
Materiais utilizados
Materiais utilizados

Um Raspberry Pi Zero, com um cabeçalho masculino anexado. Mas qualquer versão do Raspberry Pi serviria.

Um Pimoroni Inky pHAT, versão preto / monocromático, 25 € | 22 £ | 20US $, na Pimoroni.

Um hacker Pimoroni Pico HAT, 2,50 € | 2 £, com dois cabeçalhos fêmeas anexados, um deles um cabeçalho de reforço com pinos mais longos. Eu construí duas versões diferentes, veja a descrição abaixo.

A breakout BME280, entrega AZ via Amazon.de @ 7,50 €, com cabeçalho anexado.

Cabos de jumper de alongamento

Opcional:

Um power pack USB, para aplicativos móveis

Uma caixa para o Pi ou o dispositivo (não mostrado aqui)

Etapa 2: Montagem

conjunto
conjunto
conjunto
conjunto
conjunto
conjunto
  • Solda os cabeçalhos femininos para o hacker Pico HAT. Antes de soldar, verifique a orientação correta. Criei duas versões disso, para finalidades diferentes. Uma com a plataforma de reforço voltada para baixo colocada na linha da frente e uma plataforma normal, para cima / voltada para a linha de trás, e uma versão com a plataforma de reforço voltada para baixo na linha de trás, e uma plataforma de ângulo reto feminino na linha da frente. Veja as imagens. A primeira versão permite anexar e trocar sensores e cabos muito facilmente, enquanto a versão com o cabeçalho voltado para dentro permite encerrar Pi, sensor e Inky pHAT em um invólucro. Alternativamente, você pode soldar os cabos conectando GPIO e sensor diretamente ao hacker Pico HAT e / ou soldar o hacker Pico HAT diretamente aos pinos GPIO. Em qualquer caso, use a quantidade mínima de solda necessária.
  • Solde a plataforma ao sensor, se necessário.
  • Empilhe a unidade de hacker Pico HAT modificada no Pi e, em seguida, adicione o Inky pHAT. Se necessário, insira algum suporte, por exemplo Um bloco de espuma ou isolantes, para o Inky pHAT.
  • Conecte os cabos e o sensor, usando as portas 3V, GND, SDA e SCL. Nem todos os sensores sobreviverão a 5V, portanto, verifique antes de conectá-los às portas de 5V.
  • Instale a biblioteca Blinka e, em seguida, instale a biblioteca Circuit Python BME280 da Adafruit.
  • Instale a biblioteca Inky pHAT da Pimoroni.
  • Instale o código Python de exemplo descrito em uma etapa posterior e anexado a este instrutível.
  • Execute o código.

Etapa 3: usando o dispositivo

Usando o dispositivo
Usando o dispositivo

Existem duas opções de uso do dispositivo.

O código mostrado aqui deve ser iniciado usando uma tela anexada, mas pode ser executado sem.

Com pequenas modificações no código, você pode usar o crontab para realizar medições em pontos de tempo definidos. Isso permitiria reduzir ainda mais o consumo de energia. Excelentes descrições de como usar o crontab podem ser encontradas em outros lugares.

Em conjunto com um pacote de energia, você pode construir um dispositivo móvel e usá-lo para medir as condições internas ou externas, na geladeira, na sauna, no umidificador, na adega, em um avião,….

Usando um Zero W, você pode não apenas exibir os valores na tela, mas também enviá-los a um servidor ou ao seu site via WLAN, conforme descrito em outro lugar.

Etapa 4: O Script BME280

O Script BME280
O Script BME280

Como mencionado antes, você precisa instalar as bibliotecas Adafruit Blinka e Circuit Python BME280, bem como a biblioteca Pimoroni Inky pHAT.

O código inicializa primeiro o sensor e o Inky pHAT, depois lê os valores de temperatura, pressão e umidade do sensor e os exibe na tela e no visor do e-ink. Usando o comando time.sleep (), as medições são feitas a cada minuto. Ajuste conforme necessário. Ao definir um parâmetro de idioma, você pode alterar o idioma usado para exibir os resultados.

Usando o visor Inky pHAT e-ink, você primeiro constrói a imagem a ser exibida na memória antes de finalmente ser transferida para a tela usando o comando inkyphat.show (). A biblioteca Inky pHAT está simplificando o processo, oferecendo comandos para desenhar e formatar texto, linhas, retângulos, círculos ou usar imagens de fundo.

Além dos valores medidos, o tempo de medição também é exibido.

Lembre-se de que o script, assim como as bibliotecas, são escritos em Python 3, portanto, abra e execute usando Py3 IDLE ou equivalente.

# Um script para o sensor de temperatura / pressão / umidade bme280 (versão não Adafruit) # e o pHAT inky - versão preta # # versão 01 de dezembro de 2018, Dr H # # Requer as bibliotecas Adafruit Blinka e Circuit Python BME280 # e Pimoroni Inky pHAT library import time import datetime import board import busio from adafruit_bme280 import Adafruit_BME280 from adafruit_bme280 import Adafruit_BME280_I2C import inkyphat import sys from PIL import ImageFont inkyphat.set_colour ('black') # for b / w inky phat inky display 180 ° font1 = ImageFont.truetype (inkyphat.fonts. FredokaOne, 27) # Selecione a fonte padrão font2 = ImageFont.truetype (inkyphat.fonts. FredokaOne, 19) # Selecione os dados da fonte padrão # lang = "DE" # definir o parâmetro de idioma, default ("") -> english lang = "EN" i2c = busio. I2C (board. SCL, board. SDA) bmp = Adafruit_BME280_I2C (i2c, endereço = 0x76) # endereço i2c padrão (para Adafruit BMP280) 0x77 (padrão), 0x76 para fuga chinesa) # definir pressão de referência # necessária para al cálculo tituto, por favor ajuste. Valor padrão 1013,25 hPa # entrada manual: #reference_hPa = input ("Insira a pressão de referência em hPa:") # ou # definir a pressão no momento inicial como referência, por exemplo, para medições de altura relativa time.sleep (1) # espere um segundo antes da 1ª medição j = 0 pres_norm_sum = 0 enquanto j no intervalo (5): # faça cinco medições para definir o valor de referência pres_norm_sum = pres_norm_sum + bmp.pressure j = j + 1 time.sleep (1) reference_hPa = (pres_norm_sum / j) # define medição inicial como ponto de referência para habilitar medições de altura bmp.sea_level_pressure = float (reference_hPa) print () while True: # executa para sempre, modifique para versão crontab # medido valores t = bmp.temperature p = bmp.pressure h = bmp.humidity a = bmp.altitude # calculado pela biblioteca adafruit da pressão #timestamp ts = datetime.datetime.now () # timestamp ts0_EN = '{:% Y-% m-% d} '. format (ts) # timestamp - data, formato EN ts0_DE =' {:% d.% m.% Y} '. format (ts) # timestamp - data, formato alemão ts1 =' {: % H:% M:% S} '. Format (ts) # timestamp - time tmp = "{0: 0.1f}". Format (t) pre = "{0: 0.1f}". Format (p) hig = "{0: 0.1f}". Format (h) alt="{0: 0.1f}". Format (a) tText = "Temp.:" pText_EN = "Pressão:" pText_DE = "Luftdruck:" h Text_EN = "Umidade:" hText_DE = "rel. LF: "aText_EN =" Altitude: "aText_DE =" Höhe üNN: "# exakt: ü. NHN, über Normal Höhen Null if (lang ==" DE "): ts0 = ts0_DE aText = aText_DE pText = pText_DE hText = hText_DE: # padrão inglês ts0 = ts0_EN aText = aText_EN pText = pText_EN hText = hText_EN # imprime valores para exibir print (ts) print (tText, tmp, "° C") print (pText, pre, "hPa") print (hText, hig, "%") print (aText, alt, "m") print () # imprime valores para Inky pHAT t1 = 5 # tab 1, primeira coluna, simplifica a otimização do layout t2 = 110 # tab 2, segunda coluna inkyphat. clear () inkyphat.text ((t1, 0), ts0, inkyphat. BLACK, font2) # write timestamp date inkyphat.text ((t2, 0), ts1, inkyphat. BLACK, font2) # write timestamp time inkyphat.line ((t1, 25, 207, 25), 1, 3) # desenha uma linha inkyphat.text ((t1, 30), tText, inkyphat. BLACK, font2) inkyphat.text ((t2, 30), (tmp + "° C"), inkyphat. BLACK, font2) inkyphat.text ((t1, 55), pText, inkyphat. BLACK, font2) inkyphat.text ((t2, 55), (pre + "hPa"), inkyphat. PRETO, fonte2) inkyphat.text ((t1, 80), hText, inkyphat. BLACK, font2) inkyphat.text ((t2, 80), (hig + "%"), inkyphat. BLACK, font2) # exibir alternativamente a altura calculada # inkyphat.text ((t1, 80), aText, inkyphat. BLACK, font2) # inkyphat.text ((t2, 80), (alt + "m"), inkyphat. BLACK, font2) inkyphat.show () time.sleep (51) # aguarde alguns segundos antes das próximas medições, +19 segundos por ciclo inkyphat.clear () # vazio Procedimento de exibição Inky pHAT, inkyphat.show () # silêncio para a versão crontab

Etapa 5: o script BMP280

O BMP280 é muito semelhante ao sensor BME280, mas mede apenas temperatura e pressão. Os scripts são muito semelhantes, mas você precisa de diferentes bibliotecas Circuit Python. Aqui, em vez da umidade, uma altura calculada, com base em uma pressão de referência, é exibida.

Em anexo você encontra o script.

Recomendado: