Estação meteorológica com ESP8266

Com o clima cada vez mais imprevisível, nunca sabemos se devemos sair de casa com um casaco ou guarda-chuvas, mesmo olhando para a janela e vendo um dia lindo sem nuvens. As vezes, por pura preguiça, não consultamos a previsão do tempo antes de sair de casa, costume que é bem comum em países com climas extremos.

Neste projeto, vou mostrar como acessar informações de clima e tempo diretamente pelo ESP8266, através de uma API, que irá trazer os dados meteorológicos em um formato JSON, que por sua vez será “parseado” para a extração dos dados.

Atenção, este projeto não é para a coleta de dados locais de sensores, e sim da base de dados de um sistema na Internet, podendo ser customizado para qualquer (se estiver na lista de cidades) lugar do mundo. Dá ainda para adicionar a coleta de dados locais para uma comparação ou mesmo monitoramento local, mas não iremos abordar essa parte neste projeto.

Primeiros passos

Para iniciar o projeto, o primeiro passo é conseguir uma API key no site openweathermap.org. A API key permite que você colete os dados do servidor deles, sem custo para até 60 requisições por minuto, mais que o suficiente para uma estação caseira.

Abaixo, segue a tela de onde a API key pode ser copiada:

Screenshot from 2016-05-22 22:28:04

Código

O código abaixo, foi desenvolvido baseado nas bibliotecas JsonTask deverá ser instalada no platformIO.

weather-station.ino

Instalação das bibliotecas

platformio lib install 64

platformio lib install 272

Troque os seguintes valores:

Coloque a chave, pela gerada no site openweathermap.org

Coloque o nome da cidade, sem espaços e acentuação:

 

Atenção! Os dados de temperatura são em unidade Kelvin, sendo necessária a conversão para Celsius. Para converter basta subtrair 273.15 do valor retornado pela API.

 

Se tudo correr bem, os valores do tempo serão “printados” no console da serial, da seguinte forma:

Temp: 22.20

Umidade: 83%

Temperatura Maxima: 26.11

Temperatura Minima: 21.00

Pressao Atm: 1020

Conclusão

O projeto acima, basicamente coleta os dados de um servidor de estações climáticas, espalhados pelo mundo, e disponibiliza para o uso das mais variadas formas, como por exemplo avisar qual a probabilidade de chuva no dia, através de um display LCD. As ações que estes dados podem gerar, são infinitas, até mesmo podemos deixar de irrigar o jardim por saber que, possivelmente irá chover, e assim economizar água.

 

Happy Hacking!

5 Comments

  1. rodolfo

    esta biblioteca funciona no nodemcu pela ide do arduino ?

    Reply
  2. Daniel Fernandes

    Saudações Pedro Minatel!

    Tenho uma Estação de trabalho com Matriz de LED e nodeMCU; o código está funcionando praticamente correto, com exceção de que o Horário está mostrando +4 horas, por exemplo, se são 19:00h, está mostrando 23:00h.

    Uma parte do código:

    // MUDE SUAS CONFIGURAÇÕES AQUI:
    // =======================================================================
    const char* ssid = “xxxxxxx”; // SSID de rede local
    const char* password = “xxxxxxxxx”; // Senha na rede
    String weatherKey = “c1fc5f2e5e1697b8f2b3e7c57ee61d0c”; // https://home.openweathermap.org/api_keys
    String weatherLang = “&lang=br”;
    String cityID = “3446500”; // Tijucas – SC
    // Leia a descrição em ‘OpenWeather > API’ para mais informações.

    Outra parte do código:

    WiFiClient client;

    String weatherMain = “”;
    String weatherDescription = “”;
    String weatherLocation = “”;

    Não sei onde está o erro; gostaria de uma ajuda, por gentileza – Muito obrigado

    Reply
    1. Pedro Minatel (Post author)

      Bom dia!

      Você precisa fazer a compensação do horário, baseado no GMT mais o horário de verão.

      Esses serviços dão o horário no GMT-0

      Reply
  3. Daniel Fernandes

    Já consegui, obrigado!

    Reply
  4. Fernando

    Ola
    Pode ajudar, não sei onde encontrar a biblioteca task.h

    Obrigado
    Abc

    Reply

Deixe seu comentário