Como desenvolvedores, temos algumas vantagens nesse domínio, pois podemos criar nossos próprios dispositivos domésticos inteligentes.

Não são apenas os dispositivos que tiveram rápido desenvolvimento. As placas de desenvolvimento usadas para eles começaram a se tornar cada vez mais comerciais e acessíveis.

Neste artigo, veremos como podemos usar um Raspberry Pi, uma tela LCD e algumas linhas de código para monitorar o clima fora ou para um local específico.

ezgif 6 8af115ff0d25

Como este é um projeto Faça Você Mesmo (DIY), existem alguns pré-requisitos necessários para este dispositivo.

Pré-requisitos

  • Raspberry Pi 3 (ou superior)
  • Ecrã LCD
  • Fios de conexão
  • Potenciômetro (opcional)
  • Tábua de pão (opcional)

Assim que tivermos tudo o que precisamos, podemos começar. Vamos dar um passo a passo.

Etapa I – Configuração Base

O primeiro passo consiste na configuração básica e na verificação de todos os componentes.

Para esta demonstração, usaremos API de clima do ClimaCell como provedor de dados climáticos, pois eles têm um grande número de indicadores, incluindo indicadores de qualidade do ar, para usarmos.

Para usar sua API, precisamos abrir uma conta em sua plataforma e obter uma chave de API, que usaremos para assinar nossos pedidos.

bQHbP2FU
Limite da API do ClimaCell

A conta é livre para abrir e vem com um limite de 100 horas de chamadas à API, o que é mais que suficiente para o nosso projeto.

Assim que tivermos essa chave de API, podemos mudar para a configuração de hardware e conectar a tela LCD ao nosso Raspberry Pi. Você deve desligar o Raspberry Pi enquanto faz a conexão do fio.

O layout dos pinos do Raspberry Pi 3 pode ser visto na próxima imagem.

emiVLiHU
Raspberry Pi 3 Pins

A conexão do fio entre o LCD e a placa de desenvolvimento é a seguinte:

WWjB6lbg
Conexão entre Raspberry PI e LCD

Essa conexão de hardware fará com que a tela LCD fique com brilho total e contraste total. O nível de brilho não é um problema, mas o contraste é porque não conseguiremos ver os caracteres na tela.

É por isso que precisamos introduzir pelo menos um potenciômetro para definir o nível de contraste.

DFu8N63z
Esquemático

Nesse ponto, podemos ativar o Raspberry Pi e ver a tela LCD viva. Com a ajuda da resistência variável, poderemos controlar o contraste.

Etapa II – Configuração do Projeto

Como linguagem de programação, usaremos NodeJS para escrever o código. Se você ainda não possui o NodeJS instalado no seu Raspberry, siga estas instruções instruções simples.

Em uma nova pasta, execute o comando npm init -y para configurar um novo pacote npm, seguido pelo comando npm install lcd node-fetch para instalar essas 2 dependências necessárias.

  • lcd será usado para se comunicar com a tela LCD
  • node-fetch será usado para fazer HTTP solicitações à API do ClimaCell.

Dissemos que precisamos de uma chave de API para se comunicar com o provedor de dados meteorológicos. Você coloca sua chave secreta da API diretamente no código principal ou pode criar um config.json arquivo no qual você pode colocar essa chave e qualquer outra configuração relacionada ao código que você possa ter.

config.json

{  "cc_key": ""}

Por fim, vamos criar o arquivo principal do nosso projeto e incluir todas essas coisas de que falamos.

// * Dependenciesconst Lcd = require("lcd");const fs = require("fs");const fetch = require("node-fetch");// * Globalsconst { cc_key } = JSON.parse(fs.readFileSync("./config.json"));

Etapa III – O LCD

Escrever na tela é um pedaço de bolo usando o módulo lcd. Essa biblioteca atua como uma camada de abstração sobre como nos comunicamos com o dispositivo. Dessa forma, não precisamos gerenciar cada comando individualmente.

O código inteiro da nossa tela LCD é o seguinte:

MidH14Tk
CRU

O primeiro passo foi criar um novo lcd objeto e passar como argumento os pinos que usamos.

As chaves cols e rows representam o número de colunas e linhas de nossa tela LCD. 16×2 é o que eu usei neste exemplo. Se o seu LCD tiver apenas 8 colunas e 1 linha, substitua 16 e 2 pelos seus valores.

Para escrever algo na tela, precisamos usar esses dois métodos sucessivamente:

  • lcd.setCursor () – seleciona a posição a partir da qual começar a escrever
  • lcd.print ()

Ao mesmo tempo, reunimos essas duas funções na promessa de fazer uso de async/away palavras-chave.

Nesse ponto, você pode usar esta função e imprimir algo no visor. writeToLcd(0,0,'Hello World') deve imprimir a mensagem Hello World na primeira linha, começando na primeira coluna.

Etapa IV – Os dados meteorológicos

O próximo passo é obter os dados meteorológicos e imprimi-los no visor.

O ClimaCell fornece muitos informações de dados meteorológicos, mas também qualidade do ar e pólen, fogo e outras informações. Os dados são vastos, mas lembre-se de que sua tela LCD possui apenas 16 colunas e 2 linhas – isso significa apenas 32 caracteres.

Se você deseja exibir mais tipos de dados e esse limite é muito pequeno para você, use um efeito de rolagem.

81w9nkUg

Para esta demonstração, vamos mantê-lo simples e imprimir na tela LCD os seguintes dados:

  • data atual (hora, minutos, segundos)
  • temperatura
  • intensidade de precipitação

zj8FQisB
CRU

Para obter dados do ClimaCell para um local específico, é necessário enviar suas coordenadas geográficas, latitude e longitude.

Para encontrar as coordenadas da sua cidade, você pode usar uma ferramenta gratuita como latlong.net e então você pode salvá-los em config.json junto com sua chave de API ou você pode escrevê-los diretamente no código.

Neste ponto, o formato de dados retornado pela chamada da API é o seguinte:

{  lat: 45.658,  lon: 25.6012,  temp: { value: 17.56, units: 'C' },  precipitation: { value: 0.3478, units: 'mm/hr' },  observation_time: { value: '2020-06-22T16:30:22.941Z' }}

Podemos desconstruir esse objeto e obter os valores de temperatura e precipitação e imprimi-los na primeira e na segunda linha.

Etapa V – Embrulhe

Tudo o que precisamos fazer agora é escrever a lógica do nosso script e atualizar a tela LCD quando novos dados chegarem.

oeM4lSfQ
CRU

Os dados meteorológicos são atualizados a cada 5 minutos. Mas como temos um limite de 100 chamadas / hora de API impostas pelo ClimaCell, podemos ir ainda mais longe e atualizar os dados climáticos a cada minuto.

Para a data atual, temos duas opções:

  • nós podemos usar a propriedade observation_time e exiba a data em que os dados foram recebidos, ou
  • podemos fazer um relógio real e exibir a hora atual.

Eu escolhi a segunda opção, mas fique à vontade para fazer o que quiser.

Para imprimir a hora no canto superior direito, devemos primeiro calcular a coluna inicial para que o texto caiba perfeitamente. Para isso, podemos usar a próxima fórmula total columns number menos text to display length

A data tem 8 caracteres e, como ele tem 16 colunas, devemos começar a partir da coluna número 8.

A configuração do LCD é assíncrona, portanto, devemos usar o método lcd.on() fornecidos pela biblioteca relacionada, para que possamos saber quando o LCD foi inicializado e está pronto para ser usado.

Outra prática recomendada em sistemas embarcados é fechar e liberar os recursos que você usa. É por isso que usamos o SIGNINT evento para fechar a tela LCD quando o programa for parado. Outros eventos como este incluem:

  • SIGUSR1 e SIGUSR2 – para pegar “kill pid” como nodemon restart
  • uncaughtException – capturar exceções não capturadas

Etapa VI – Execute-o para sempre

O script está completo e, neste ponto, podemos executar nosso programa. Só temos mais uma coisa que devemos fazer antes de terminar.

Neste ponto, você provavelmente está conectado ao seu Raspberry Pi usando SSH ou diretamente com um cabo HDMI e um monitor. Não importa o quê, quando você fechar o terminal, o programa será interrompido.

Ao mesmo tempo, se você desligar o dispositivo e depois de algum tempo ou ligá-lo imediatamente novamente, o script não será iniciado e você precisará fazê-lo manualmente.

Para resolver esse problema, podemos usar um gerenciador de processos como pm2.

Aqui estão os passos:

  1. sudo npm install pm2 -g – instale o pm2
  2. sudo pm2 startup – crie um script de inicialização para o gerenciador de pm2
  3. pm2 start index.js – iniciar uma aplicação
  4. pm2 save – salve sua lista de processos na reinicialização do servidor

Agora você pode reiniciar sua placa e o script será iniciado automaticamente quando o dispositivo estiver pronto.

A partir deste ponto, você pode personalizar seu novo dispositivo da maneira que desejar. Se você achar esses dados climáticos importantes para você (ou quaisquer outros dados do ClimaCell, como poluição do ar, pólen, índice de incêndios ou risco de estradas), poderá criar um caso personalizado para colocar o Raspberry Pi e o monitor LCD nele. Depois de adicionar uma bateria, você pode colocar o dispositivo em sua casa.

Raspberry Pi é como um computador pessoal, para que você possa fazer muito mais do que faria normalmente em um microcontrolador como Arduino. Por isso, é fácil combiná-lo com outros dispositivos que você tem em sua casa.