Construa sua própria estação meteorológica de Raspberry Pi

Construa sua própria estação meteorológica de Raspberry Pi
Raspberry Pi Sense Hat é uma placa adicional que pode ser usada com computadores de placa única Raspberry Pi. O Raspberry Pi Sense Hat tem uma tela LED 8 × 8 e um joystick de 5 botões, e vem equipado com os seguintes sensores:
  1. Giroscópio
  2. Acelerômetro
  3. Magnetômetro
  4. Temperatura
  5. Pressão barométrica
  6. Umidade

Neste artigo, vou mostrar como criar um aplicativo da web da estação meteorológica baseada em Python API usando o temperatura, pressão barométrica, e umidade sensores do chapéu de senso de framboesa. Para acompanhar este artigo, você precisará do seguinte:

  1. A Raspberry Pi 3 ou Raspberry Pi 4 com conectividade de rede.
  2. Um módulo de chapéu de senso de framboesa.
  3. Um micro-USB (Raspberry Pi 3) ou USB Type-C (Raspberry Pi 4) Adaptador de energia.
  4. Um cartão microSD de 16 GB ou 32 GB com Raspberry Pi OS.
  5. Um laptop ou um computador de mesa para acesso a desktop remoto VNC ou acesso SSH ao Raspberry Pi.

OBSERVAÇÃO: Neste artigo, nos conectaremos ao Raspberry Pi remotamente via VNC ou SSH usando a configuração sem cabeça do Raspberry Pi. Se você não deseja acessar seu Raspberry Pi remotamente via SSH ou VNC, precisará conectar um monitor, um teclado e um mouse ao seu Raspberry Pi.

Para aprender a piscar a imagem do Raspberry Pi OS em um cartão microSD, faça referência a como instalar e usar o Raspberry Pi Imager. Se você precisar de ajuda para instalar o Raspberry Pi OS no seu Raspberry Pi, leia como instalar o Raspberry Pi OS no Raspberry Pi 4. Se você precisar de ajuda com a configuração sem cabeça do Raspberry Pi, confira como instalar e configurar o Raspberry Pi OS no Raspberry Pi 4 sem monitor externo.

Conectando Raspberry Pi Sense Hat ao Raspberry Pi

Raspberry Pi Sense Chap.

Antes que você possa anexar o quadro de chapéus dos sentidos ao Raspberry Pi, você deve conectar o cabeçalho de 40 pinos ao chapéu sentido. Conecte os pinos masculinos do cabeçalho masculino-feminino de 40 pinos ao chapéu sentido, como mostrado nas imagens abaixo.

Os computadores de placa única Raspberry Pi têm 4 orifícios que podem ser usados ​​para anexar placas de complemento ou um caso. Para anexar a placa complementar, insira os parafusos da parte de trás do Raspberry Pi, como mostrado nas imagens abaixo.

Em seguida, conecte um espaçador ao parafuso.

Depois de adicionar todos os quatro parafusos e espaçadores, seu Raspberry Pi deve se parecer com o mostrado na imagem abaixo.

Conecte o chapéu Raspberry Pi Sense ao cabeçalho masculino de 40 pinos do Raspberry Pi, como mostrado nas imagens abaixo.

OBSERVAÇÃO: Tenha cuidado ao desconectar o chapéu de Raspberry Pi Sense do cabeçalho GPIO de 40 pinos Raspberry Pi para evitar dobrar os pinos do Raspberry Pi GPio.

Com os quatro parafusos restantes, prenda o chapéu de Raspberry Pi Sense, como mostrado nas imagens abaixo.

Powering no Raspberry Pi

Agora que o chapéu Raspberry Pi Sense está conectado ao Raspberry Pi, insira o cartão microSD com o Raspberry Pi OS no slot para cartão microSD do Raspberry Pi, conecte o cabo de alimentação ao Raspberry Pi e liga -o para.

Instalando a Biblioteca Raspberry Pi Sense Hat Python

Para usar o chapéu de senso de Raspberry Pi no Raspberry Pi, o HAT DE SENTENDO A biblioteca Python deve ser instalada no Raspberry Pi OS. O HAT DE SENTENDO A biblioteca está disponível no repositório oficial do pacote do Raspberry Pi OS.

Para instalar o Raspberry Pi HAT DE SENTENDO Biblioteca Python no Raspberry Pi OS, primeiro atualize o cache do repositório de pacotes apt com o seguinte comando:

$ sudo apt update

Em seguida, execute o seguinte comando:

$ sudo apt install use -chat -y

Instalando o Flask Micro Web Framework Python Library

Usaremos a estrutura do Flask Python para criar nosso aplicativo climático. Você pode instalar o Flask a partir do repositório oficial do pacote do Raspberry Pi OS com o seguinte comando:

$ sudo apt install python3 -flask -y

Criando um diretório de projeto

É uma boa ideia criar um diretório de projeto para organizar seus arquivos de projeto. Para criar um diretório de projeto ~/trabalho, Use o seguinte comando:

$ mkdir ~/trabalho

Depois que o diretório do projeto for criado, navegue até o diretório do projeto da seguinte forma:

$ cd ~/trabalho

Testando o chapéu Raspberry Pi Sense

Para testar se o chapéu de Raspberry Pi Sense está funcionando, podemos escrever um script de python de teste simples. Você pode criar um novo script python chamado teste.py com o Nano Editor de texto da seguinte forma:

$ nano teste.py

Insira o seguinte código no teste.py arquivo. Linha 1 importações Sensehat de Sense_hat módulo, linha 3 cria um Sensehat objeto e armazena uma referência no senso variável e linhas 5-6 Defina a cor de todos os LEDs 8 × 8 como vermelho. Depois de terminar, pressione + X seguido pela Y e .

Você pode executar o teste.py Script Python com o seguinte comando:

Teste $ python3.py

A matriz LED 8 × 8 deve brilhar em cor vermelha, como mostrado na imagem abaixo.

Para desligar os LEDs do chapéu sentido, execute o claro() método sem qualquer valor de cor no teste.py Script python, como mostrado na captura de tela abaixo, e execute o teste.py Script Python novamente.

Os LEDs do sentido do sentido devem agora ser desligados, como mostrado na imagem abaixo.

Se o chapéu de sentido estiver funcionando corretamente, passe para a próxima seção.

Obtendo dados climáticos do sentido do sentido

Você pode obter dados do sensor do sentido do sentido, usando o uso do HAT DE SENTENDO Biblioteca Python. Para recuperar os dados do sensor do sentido do sentido, você pode criar um novo script python read_sensor_data.py do seguinte modo:

$ nano read_sensor_data.py

Insira o seguinte código no read_sensor_data.py Arquivo python.

De Sense_hat Import Sensehat
Desde o tempo de importação do sono
Sense = SenseHat ()
senso.claro()
enquanto é verdade:
tempc = sentido.get_temperature ()
tempf = tempc * (9/5) + 32
pressão = sentido.get_pressure ()
umidade = sentido.get_humidity ()
Imprimir ("Temperatura: %.2f ° C/%.2f ° f \ n " % (tempc, tempf))
Imprimir ("Pressão: %.2f mb \ n " % (pressão))
print ("umidade: %.2f %% \ n \ n "%(umidade))
sono (5)

Depois de terminar, pressione + X seguido pela Y e .

No código acima, as linhas 1 e 2 importam todas as bibliotecas necessárias, a linha 4 cria um Sensehat objeto, e a linha 5 desligam todos os LEDs do sentido do sentido usando o claro() método. O loop while na linha 7 é um loop infinito que executará o código nas linhas 8-16 para sempre.

Na linha 8, o get_temperature () O método é usado para ler os dados de temperatura (em graus Celsius) do sensor de umidade do sentido do sentido. Na linha 9, os dados de temperatura são convertidos de graus Celsius em graus Fahrenheit. Na linha 10, o get_pressure () O método é usado para ler os dados de pressão do ar (em Millibars) a partir do sensor de pressão do sentido do sentido. Na linha 11, o get_humidity () O método é usado para ler os dados de umidade (em %) do sensor de umidade do sentido do sentido.

As linhas 13-15 são usadas para imprimir os dados do sensor no console e a linha 16 é usada para esperar 5 segundos antes de ler os dados do sensor novamente.

Você pode executar o read_sensor_data.py Script Python da seguinte maneira:

$ python3 read_sensor_data.py

Depois que o script for executado, os dados do sensor serão impressos no console.

Agora que podemos ler os dados do sensor do sentido do sentido, pressione + C Para parar o programa.

Criando um aplicativo da web em estação meteorológica

Nesta seção, mostraremos como usar a estrutura da web do Flash Python para criar uma API climática e um aplicativo climático. O aplicativo climático acessará a API de dados climáticos e mostrará os dados climáticos em tempo real. Todo o código discutido nesta seção está disponível no Github em Shovon8/Raspberry-Pi-sens-Hat-Weather-App.

Primeiro, crie um servidor.py Script Python no diretório do projeto da seguinte forma:

$ Nano Server.py

Insira o seguinte código no servidor.py Arquivo python.

do frasco de importação de frascos
De Flask Import Jsonify
De Flask Import render_template
de Flask Importar url_for
De Sense_hat Import Sensehat
App = Flask (__ nome__)
aplicativo.config ['send_file_max_age_default'] = 0
Sense = SenseHat ()
senso.claro()
com aplicativo.test_request_context ():
url_for ('static', nome do arquivo = 'estilo.CSS ')
url_for ('static', nome do arquivo = '.JS ')
@aplicativo.Rota ('/API')
Def Api ():
tempc = sentido.get_temperature ()
tempf = tempc * (9/5) + 32
pressão = sentido.get_pressure ()
Pressurepsi = Pressão * 0.0145038
Pressão = Pressão * 100
umidade = sentido.get_humidity ()
Retornar Jsonify (
"Temperatura": "c": tempc, "f": tempf,
"Pressão": "mb": pressão, "hpa": pressão,
"PSI": Pressurepsi, "P": Pressão,
"umidade": umidade
)
@aplicativo.rota('/')
def home ():
retornar render_template ('./lar.html ')

Então aperte + X seguido pela Y e Para salvar o servidor.py Script Python.

No código acima, as linhas 1-5 importam todas as bibliotecas necessárias, a linha 7 cria um aplicativo de frasco, a linha 11 cria um objeto Sensehat e a linha 12 desligar todos os LEDs do sentido do sentido. Linha 8 desativa o cache na web para o aplicativo Flask. Como este aplicativo é leve, não há necessidade de armazenamento em cache. Se você deseja modificar o aplicativo, ter o cache da web desativado facilitará muito o teste.

Linhas 18-31 Leia os dados do sensor do sentido do sentido e retorne os dados da API no formato JSON no http get solicitação no /API terminal do servidor da web. Linhas 37-39 Retorne a página inicial do Weather Web App na / terminal do servidor da web. A página inicial é renderizada do lar.html arquivo, que deve estar no modelos/ Diretório do diretório do projeto.

As linhas 14-16 são usadas para permitir o acesso ao estilo.CSS e aplicativo.JS arquivos estáticos. Esses arquivos devem estar no estático/ Diretório do diretório do projeto. O estilo.CSS O arquivo é usado para estilizar o lar.html página inicial e o aplicativo.JS O arquivo é usado para solicitar os dados da API do /API endpoint e atualize os dados climáticos sobre o lar.html página a cada 5 segundos.

Crie o estático/ e modelos/ Diretório no diretório do projeto da seguinte forma:

$ mkdir -v static, modelos

Criar uma lar.html arquivo no modelos/ diretório da seguinte maneira:

$ nano modelos/casa.html

Insira o seguinte código no lar.html arquivo.





Estação meteorológica de Raspberry Pi
href = "url_for ('static', filename =" estilo.css ")"/>



Estação meteorológica de Raspberry Pi



Temperatura




..


..




Pressão




..


..




..


..




Umidade




..






Então aperte + X seguido pela Y e Para salvar o lar.html arquivo.

Criar uma estilo.CSS arquivo no estático/ diretório da seguinte maneira:

$ nano estático/estilo.CSS

Insira os seguintes códigos no estilo.CSS arquivo.

@import url ('https: // fontes.googleapis.com/css2?família = roboto & display = swap ');
*
preenchimento: 0;
margem: 0;
Fonte-família: 'Roboto', sem serrif;

corpo
Antecedentes: #737373;

H1
exibição: bloco;
Cor: #79DC7B;
Alinhamento de texto: centro;
peso-fonte: 400;
Antecedentes: #000;
preenchimento: 0.5em 0;

H2
exibição: bloco;
Antecedentes: #000;
Cor: #FFF;
Alinhamento de texto: centro;
peso-fonte: 400;
tamanho da fonte: 1em;

.conteúdo de dados
margem: 10px;
borda: 2px preto sólido;
Radio de fronteira: 5px;
Background-Color: #79DC7B;

.Data-ROW
exibição: flex;
Direcção flexível: Linha;

.célula de dados
largura: 100%;
Altura: 80px;
exibição: flex;
alinhado-itens: centro;
Justify-Content: Center;
intensidade da fonte: Negrito;
Size da fonte: 1.5em;
Cor: #006902;

.Células de dados: Hover
Antecedentes: #ffe891;
Cor: #AA8600;
Cursor: Ponteiro;

Então aperte + X seguido pela Y e Para salvar o estilo.CSS arquivo.

Criar um aplicativo.JS arquivo no estático/ diretório da seguinte maneira:

$ nano estático/aplicativo.JS

Insira o seguinte código no aplicativo.JS arquivo.

janela.addEventListener ('carga', principal);
função main ()
função getapidata ()
var http = novo xmlHttPrequest ();
http.ONREADESTATECHANGE = function ()
se este.ReadyState === 4 && este.status === 200)
Atualização (JSON.analisar (isso.responseText));


http.aberto ("get", "/api", verdadeiro);
http.enviar();

Função Update (Apidata)
var tempc = documento.getElementById ("tempc");
var tempf = documento.getElementById ("tempf");
var pressuremb = documento.getElementById ("PressureRemb");
var pressãopsi = documento.getElementById ("Pressurepsi");
var pressãohpa = documento.getElementById ("PressureHpa");
var pressãop = documento.getElementById ("Pressurep");
var umidade = documento.getElementById ("umidade");
tempc.inerhtml = parsefloat (apidata.temperatura.C).tofixado (2) + "° C";
tempf.inerhtml = parsefloat (apidata.temperatura.F).tofixado (2) + "° F";
PressureMb.inerhtml = parsefloat (apidata.pressão.mb).tofixado (2) + "mb";
Pressurepsi.inerhtml = parsefloat (apidata.pressão.psi).tofixado (2) + "psi";
Pressãohpa.inerhtml = parsefloat (apidata.pressão.hpa).tofixado (2) + "hpa";
Pressão.inerhtml = parsefloat (apidata.pressão.P).tofixado (2) + "p";
umidade.inerhtml = parsefloat (apidata.umidade).tofixado (2) + " %";

função app ()
janela.setInterval (function ()
getapidata ();
, 5000);

aplicativo();

Então aperte + X seguido pela Y e Para salvar o aplicativo.JS arquivo.

Aqui, a linha 1 executa o principal() função quando a página da web terminar de carregar. No principal() função, o getapidata () A função busca os dados da API climática usando o Ajax e chama o atualizar() função (na linha 10) depois que os dados foram buscados com sucesso. O atualizar() A função atualiza o elemento da página da web usando os dados da API.

Na linha 20, o documento.getElementById () O método é usado para obter a referência do elemento da página da web com o ID tempc. A linha 28 é usada para substituir o conteúdo do elemento da página da web que possui o ID tempc com a temperatura (em Celsius) da API. Da mesma forma, o conteúdo de todos os elementos da Web (linhas 21-26) são substituídos por seus respectivos dados da API.

No aplicativo() função, o getapidata () é chamado a cada 5 segundos (5000 milissegundos) para manter os dados climáticos atualizados no aplicativo meteorológico. Finalmente, na linha 46, o aplicativo() A função é executada.

Para testar o aplicativo da web, insira o seguinte comando:

$ Flask_app = servidor.Flask Py Run -Host = 0.0.0.0

O aplicativo meteorológico deve ser executado na porta 5000 (por padrão).

Para testar se a API meteorológica está funcionando, execute o seguinte comando:

$ CURL -S http: // localhost: 5000/API | json_pp

Como você pode ver, os dados da API climática são impressos no console. Portanto, a API está funcionando.

Para testar o aplicativo meteorológico, visite http: // localhost: 5000 de um navegador da Web Chromium. O aplicativo meteorológico deve ser carregado no navegador da web, mas nenhum dado climático deve ser exibido no início.

Depois de alguns segundos, o aplicativo meteorológico deve terminar de buscar os dados climáticos da API e exibi -los.

Em qualquer momento, você pode pressionar + C Para parar o servidor da web.

Criação de serviço Systemd para o aplicativo Weather web

Nesta seção, mostraremos como criar um arquivo de serviço Systemd para o aplicativo meteorológico para que ele comece automaticamente ao inicializar.

Primeiro, crie um Estação meteorológica.serviço Arquivo no diretório do seu projeto da seguinte forma:

$ nano-estação meteorológica.serviço

Insira as seguintes linhas de código no Estação meteorológica.serviço arquivo.

[Unidade]
Descrição = aplicativo da estação meteorológica Raspberry Pi usando Raspberry Pi Sense Hat
Depois = rede.alvo
[Serviço]
WorkingDirectory =/Home/Pi/Trabalho
Ambiente = Flask_App = servidor.py
Ambiente = Flask_env = Produção
ExecStart =/usr/bin/Flask Run - -host = 0.0.0.0
StandardOutput = herdar
StandardError = herdado
Reinicie = sempre
Usuário = pi
[Instalar]
WantedBy = MultiUser.alvo

Então aperte + X seguido pela Y e Para salvar o Estação meteorológica.serviço arquivo.

Copie o Estação meteorológica.serviço arquivo para o /etc/Systemd/System/ Diretório com o seguinte comando:

$ sudo cp -v estação meteorológica.Serviço/etc/Systemd/System/

Recarregue os daemons Systemd para que as mudanças entrem em vigor da seguinte forma:

$ sudo systemctl daemon -load

O Estação meteorológica O serviço Systemd deve estar inativo no momento, como mostrado na captura de tela abaixo.

$ sudo systemctl status meteorológico.serviço

Comece o Estação meteorológica Serviço com o seguinte comando:

$ sudo SystemCtl Start Weather-Station.serviço

Como você pode ver, o Estação meteorológica O serviço agora está em execução.

$ sudo systemctl status meteorológico.serviço

Agora que o Estação meteorológica O serviço está funcionando, você pode adicioná -lo à inicialização do sistema do Raspberry Pi OS com o seguinte comando:

$ sudo systemctl Ativar estação meteorológica.serviço

Reinicie seu Raspberry Pi com o seguinte comando:

$ sudo reiniciar

Uma vez que suas botas Raspberry Pi, as Estação meteorológica O serviço deve estar em execução, conforme mostrado na captura de tela abaixo.

$ sudo systemctl status meteorológico.serviço

Acessando o aplicativo meteorológico de outros dispositivos

Para acessar o aplicativo meteorológico de outros dispositivos em sua rede doméstica, você precisa conhecer o endereço IP do seu Raspberry Pi. Você pode encontrar o endereço IP do seu Raspberry Pi 4 na interface de gerenciamento da web do seu roteador doméstico. No nosso caso, o endereço IP é 192.168.0.103, mas esse endereço será diferente para você, portanto, substitua este endereço pelo seu em todas as etapas subsequentes.

Se você tiver acesso ao console Raspberry Pi, poderá executar o seguinte comando para encontrar o endereço IP também.

$ hostname -i

Depois de conhecer o endereço IP do seu Raspberry Pi, você pode acessá -lo de qualquer dispositivo em sua rede doméstica. Conforme mostrado na captura de tela abaixo, acessamos o aplicativo meteorológico de um smartphone Android.

Conclusão

Neste artigo, mostramos como usar o Raspberry Pi Sense Hat para construir uma estação meteorológica Raspberry Pi. Usamos o HAT DE SENTENDO Biblioteca Python para extrair dados climáticos do Raspberry Pi Sense Hat. Em seguida, usamos a estrutura da Web Micro Python Flask para criar uma API meteorológica e um aplicativo da Web. O aplicativo da web obtém os dados climáticos da API climática a cada 5 segundos para manter o aplicativo da web atualizado com os últimos dados climáticos.