É possível atualizar o clima em um dispositivo incorporado ou vestível sem interface com nenhum sensor de temperatura ou umidade? Com o acesso à Internet das Coisas (IoT), os dispositivos podem se conectar a uma variedade de serviços da web com a ajuda de APIs e extrair diversos insights e informações úteis por meio de solicitações HTTP simples. Em resposta, os dispositivos recebem um cabeçalho HTTP ou dados JSON (JavaScript Object Notation) que podem ser interpretados no código do firmware para extrair informações úteis.
Neste projeto, projetaremos uma estação meteorológica sem sensor em ESP8266/ESP32 sem interface com um único sensor. Seremos capazes de extrair várias atualizações meteorológicas úteis, como atualizações de temperatura, pressão, umidade e velocidade do vento – para qualquer local do planeta.
Faremos tudo isso acessando o serviço web gratuito do OpenWeatherMap, um serviço baseado em assinatura que fornece atualizações meteorológicas, dados meteorológicos históricos, previsões meteorológicas para análise de risco rodoviário e análises agrícolas. Com uma inscrição gratuita, é possível obter atualizações meteorológicas para qualquer cidade do mundo. Após cadastrar-se na API, implementamos uma solicitação HTTP por meio do código MicroPython no ESP8266/ESP32 para obter atualizações meteorológicas para uma cidade ou local específico. O código MicroPython foi criado para extrair insights específicos dos dados JSON recebidos como resposta da plataforma OpenWeather. Então vamos começar.
Componentes necessários
- ESP8266/ESP32 x1
- Cabo micro USB x1
Conexões de circuito
Anteriormente, você pode ter construído uma estação meteorológica baseada em MicroPython conectando um sensor de temperatura e/ou umidade como a estação meteorológica MicroPython baseada em DHT-11. Para construir esta estação meteorológica, você literalmente não precisa conectar nenhum sensor à placa ESP. Você só precisa ter o MicroPython carregado na placa ESP e ter um IDE como uPyCraft ou Thonny pronto para começar a codificar o MicroPython. O resto será feito dentro do script MicroPython. A placa ESP deve ter acesso à internet através de uma rede WiFi.
Inscrição gratuita com OpenWeatherMap
Em primeiro lugar, você precisa se inscrever na API OpenWeatherMap. Visite o seguinte link para inscrição – A página oferece diferentes opções e planos para usar o serviço OpenWeatherMap. Clique na primeira opção de inscrição.
Em seguida, você será redirecionado para um formulário “Criar nova conta”. Preencha seus dados, marque as caixas de seleção apropriadas e clique no botão “Criar conta”.
Por fim, você verá um pop-up solicitando o nome e a finalidade da empresa. Você pode colocar seu próprio nome ou o nome da sua organização e escolher educação/ciência como objetivo.
Um e-mail de confirmação será recebido na conta de e-mail cadastrada. Abra sua conta de e-mail e verifique seu e-mail.
Ao concluir a verificação da sua conta de e-mail, você será redirecionado para o console do OpenWeatherMap.
Obtenha a chave API
No console OpenWeatherMap, navegue até a guia “Chaves de API”. Aqui, você já verá uma chave de API gerada com inscrição gratuita. Você pode até criar mais chaves de API para usar em diferentes dispositivos ou obter acesso a serviços baseados em assinatura.
Como só precisamos de atualizações meteorológicas diárias para um local específico, a chave API para inscrição gratuita é suficiente. A chave API é obrigatória para acesso e autenticação com a API OpenWeatherMap.
Chamada de API para API OpenWeatherMap
Para fazer uma chamada de API para obter atualizações meteorológicas para um local específico, você precisa invocar uma solicitação HTTP via URL HTTP. A chamada da API tem o formato a seguir.
chave}
Para obter atualizações meteorológicas para sua localização, você só precisa da latitude e longitude e da chave API. Você pode encontrar a atualização do tempo atual junto com as coordenadas geográficas de sua cidade pesquisando no seguinte link –
Observe que o hemisfério sul é representado por latitudes negativas e o hemisfério ocidental é representado por longitudes negativas. Por exemplo, a latitude e longitude de São Francisco, EUA, é 37.7749N, 122.4194W. Na chamada da API, a latitude será 37,7749, mas a longitude será -122,4194. Você pode verificar a exatidão da chamada de API substituindo a latitude, longitude e chave de API pela latitude e longitude de sua localização e sua chave de API, respectivamente, e visitando o link em um navegador da web. Uma resposta retornará contendo dados JSON representando as informações meteorológicas para um determinado local, conforme mostrado na imagem abaixo.
Lendo dados JSON com MicroPython
Como você pode ver que ao fazer uma chamada de API para um local específico, os dados meteorológicos são retornados no formato JSON. JSON é o formato universal aceito pelas APIs da web. Em JSON, os dados são representados como pares nome/valor. O nome e o valor são separados por dois pontos (:). Os pares nome/valor são separados por vírgulas. As matrizes são colocadas entre colchetes ( ), enquanto os objetos são colocados entre chaves ({}). MicroPython fornece um módulo JSON integrado para extrair nomes e valores de dados JSON.
Módulo de urequests do MicroPython
A chamada da API para OpenWeatherMap nada mais é do que uma solicitação HTTP via URL HTTP. MicroPython fornece módulo urequests para fazer solicitações HTTP online. O módulo pode não estar integrado ao firmware MicroPython carregado na placa ESP; nesse caso, você precisará carregar o módulo na placa separadamente. No uPyCraft IDE, navegue até arquivo-> Novo. No editor de código, cole o seguinte código-fonte de urequests.py.
Salve o script como urequests.py e carregue-o na placa ESP clicando no botão “Baixar e Executar”. Agora, o módulo urequests foi carregado com sucesso na placa ESP.
Script MicroPython
Exclua o código atual do Boot.py e copie o seguinte script para Boot.py.
Carregue o Boot.py atualizado para a placa ESP clicando no botão “DownloadAndRun”. Lembre-se de substituir SSID e NETWORK_KEY pelo SSID e chave de rede da sua própria rede WiFi. Além disso, substitua {latitude}, {longitude} e {APIKey} pela latitude e longitude da sua localização e pela sua própria chave de API recebida na inscrição.
O código
O código começa com a importação dos módulos MicroPython necessários. O módulo urequests é importado para fazer solicitações HTTP e o módulo UJSON é importado para interpretar dados JSON. A biblioteca de rede é importada para conectar-se à rede WiFi.
Em seguida, a conexão com uma rede WiFi é configurada usando o SSID e a chave de rede fornecidos. A placa ESP é configurada em modo estação e a conexão com a rede WiFi é iniciada chamando o método station.connect . A conectividade com a rede WiFi é verificada pelo método de chamada station.isconnected . Assim que a placa ESP for conectada com sucesso a uma rede WiFi, os parâmetros de rede são impressos no console do IDE chamando o método station.ifconfig .
O URL HTTP para a chamada da API para a API OpenWeatherMap é armazenado em uma variável “open_weather_map_url”. A solicitação HTTP GET é iniciada chamando o método requests.get . A resposta JSON da chamada de API é impressa no console. Por fim, usando o método json .get , valores específicos acessados por seus nomes são extraídos em diferentes variáveis e impressos no console do IDE.
Resultado
Depois de carregar e executar o Boot.py na placa ESP, a atualização do clima para o local escolhido, incluindo temperatura, pressão, umidade e velocidade do vento, será impressa no console conforme mostrado na imagem abaixo.
\