Índice:
- Etapa 1: Obtenha a chave API e o URL do Openweather.org
- Etapa 2: Diagrama de conexão
- Etapa 3: Código Arduino
- Etapa 4: Código de processamento
Vídeo: (Projeto IOT) Obter dados meteorológicos usando ESP8266 e API Openweather: 5 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:34
Neste instrutível, vamos construir um projeto IOT simples no qual buscar os dados meteorológicos de nossa cidade em openweather.com/api e exibi-los usando o software de processamento.
Suprimentos:
- Arduino
- ESP8266 ou qualquer outro módulo esp
- IDE Arduino
- Software de processamento
- Tábua de pão
- Jumperwires Masculino para Masculino e Masculino para Feminino
Etapa 1: Obtenha a chave API e o URL do Openweather.org
- Crie uma conta em https://openweathermap.org (Imagem 1)
- Depois de fazer o login, vá para as chaves API e você obterá a chave API conforme mostrado na imagem. (Imagem 2)
- Copie a chave API e salve-a em um arquivo de bloco de notas. (Imagem 3)
- Vá para a opção API (Imagem 4)
- Vá para a opção API doc conforme mostrado na imagem (Imagem 5)
- Copie o url do e mostrado e salve-o em um arquivo de bloco de notas (Imagem 6)
Etapa 2: Diagrama de conexão
Etapa 3: Código Arduino
Antes de copiar este código para o Arduino, certifique-se de ter baixado a placa ESP8266 para o ide do arduino usando o gerenciador de placas.
#incluir
#include #include #include const char * ssid = "Seu SSID"; const char * password = "Sua senha SSID"; // Seu nome de domínio com caminho de URL ou endereço IP com caminho String openWeatherMapApiKey = "Cole sua chave de API aqui"; // Substitua pelo código do seu país e cidade String city = "Mumbai"; String countryCode = "IN"; Dados de string [16]; // O TEMPORIZADOR PADRÃO ESTÁ DEFINIDO EM 10 SEGUNDOS PARA FINS DE TESTE // Para uma aplicação final, verifique os limites de chamada de API por hora / minuto para evitar ser bloqueado / banido unsigned long lastTime = 0; // Timer definido para 10 minutos (600000) // unsigned long timerDelay = 600000; // Define o cronômetro para 10 segundos (10000) unsigned long timerDelay = 10000; String jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, senha); //Serial.println("Connecting "); while (WiFi.status ()! = WL_CONNECTED) {delay (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Conectado à rede WiFi com endereço IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Timer definido para 10 segundos (variável timerDelay), levará 10 segundos antes de publicar a primeira leitura."); } void loop () {// Enviar uma solicitação HTTP GET if ((millis () - lastTime)> timerDelay) {// Verificar o status da conexão WiFi if (WiFi.status () == WL_CONNECTED) {String serverPath = "https://api.openweathermap.org/data/2.5/weather?q= "+ city +", "+ countryCode +" & APPID = "+" d5b56fd07988143ae141503ed9d81742 "+" & units = metric "; jsonBuffer = httpGETRequest (serverPath.c_str ()); //Serial.println(jsonBuffer); JSONVar meuObjeto = JSON.parse (jsonBuffer); // JSON.typeof (jsonVar) pode ser usado para obter o tipo de var if (JSON.typeof (myObject) == "undefined") {//Serial.println("Parsing input failed! "); Retorna; } // Serial.print ("objeto JSON ="); // Serial.println (meuObjeto); // Serial.print ("Temperatura:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Pressão:"); // Serial.println (myObject ["main"] ["pressure"]); // Serial.print ("Umidade:"); // Serial.println (meuObjeto ["principal"] ["umidade"]); // Serial.print ("Velocidade do vento:"); // Serial.println (meuObjeto ["vento"] ["velocidade"]); int temp = meuObjeto ["principal"] ["temp"]; pressão longa = meuObjeto ["principal"] ["pressão"]; int úmido = meuObjeto ["principal"] ["umidade"]; int vento = meuObjeto ["vento"] ["velocidade"]; String country = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (meuObjeto ["nome"]); String weather = JSON.stringify (meuObjeto ["clima"] [0] ["descrição"]); String icon = JSON.stringify (myObject ["weather"] [0] ["icon"]); dados [0] = String (temp); dados [1] = "/"; dados [2] = String (pres); dados [3] = "/"; dados [4] = String (úmido); dados [5] = "/"; dados [6] = String (vento); dados [7] = "/"; dados [8] = país; dados [9] = "/"; dados [10] = cidade1; dados [11] = "/"; dados [12] = clima; dados [13] = "/"; dados [14] = ícone; dados [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Código de resposta HTTP:"); // Serial.println (httpResponseCode); carga útil = http.getString (); } else {Serial.print ("Código de erro:"); Serial.println (httpResponseCode); } // Recursos livres http.end (); carga útil de retorno; }
Etapa 4: Código de processamento
Antes de executar este código, baixe as imagens de ícone fornecidas que serão usadas para mostrar o tempo. E mantenha as imagens e o código na mesma pasta.
import processing.serial. *;
Serial myPort; PImage img; PImage img2; PImage img3; PImage img4; PImage img5; PImage img6; PImage img7; PImage img8; PImage img9; PImage img10; PImage img11; PImage img12; PImage img13; PImage img14; PImage img15; PImage img16; PImage img17; PImage img18; int temp; int pres; int úmido; vento interno; String city = ""; String country = ""; Tempo da string = ""; Ícone de string = ""; configuração vazia () {tamanho (500, 500); myPort = novo Serial (este, "COM3", 115200); img = loadImage ("01d.png"); img2 = loadImage ("01n.png"); img3 = loadImage ("02d.png"); img4 = loadImage ("02n.png"); img5 = loadImage ("03d.png"); img6 = loadImage ("03n.png"); img7 = loadImage ("04d.png"); img8 = loadImage ("04n.png"); img9 = loadImage ("09d.png"); img10 = loadImage ("09n.png"); img11 = loadImage ("10d.png"); img12 = loadImage ("10n.png"); img13 = loadImage ("11d.png"); img14 = loadImage ("11n.png"); img15 = loadImage ("13d.png"); img16 = loadImage ("13n.png"); img17 = loadImage ("50d.png"); img18 = loadImage ("50n.png"); } void draw () {background (72, 209, 204); textSize (22); encher (54, 69, 79); texto ("Temperatura:", 25, 100); texto (temp + "° C", 200, 100); texto ("Pressão:", 25, 150); texto (pres + "hpa", 200, 150); texto ("Umidade:", 25, 200); texto (úmido + "%", 200, 200); texto ("Vento:", 25, 250); texto (vento + "m / s", 200, 250); texto ("País / Cidade:", 25, 300); texto (país + "-" + cidade, 200, 300); texto ("Tempo:", 25, 350); texto (clima, 200, 350); if (icon.contains ("01d")) {imagem (img, 380, 15); } else if (icon.contains ("01n")) {imagem (img2, 380, 15); } else if (icon.contains ("02d")) {imagem (img3, 380, 15); } else if (icon.contains ("02n")) {imagem (img4, 380, 15); } else if (icon.contains ("03d")) {imagem (img5, 380, 15); } else if (icon.contains ("03n")) {imagem (img6, 380, 15); } else if (icon.contains ("04d")) {imagem (img7, 380, 15); } else if (icon.contains ("04n")) {imagem (img8, 380, 15); } else if (icon.contains ("09d")) {imagem (img9, 380, 15); } else if (icon.contains ("09n")) {imagem (img10, 380, 15); } else if (icon.contains ("10d")) {imagem (img11, 380, 15); } else if (icon.contains ("10n")) {imagem (img12, 380, 15); } else if (icon.contains ("11d")) {imagem (img13, 380, 15); } else if (icon.contains ("11n")) {imagem (img14, 380, 15); } else if (icon == "13d") {imagem (img15, 380, 15); } else if (icon.contains ("13n")) {imagem (img16, 380, 15); } else if (icon.contains ("50d")) {imagem (img17, 380, 15); } else if (icon.contains ("50n")) {imagem (img18, 380, 15); }} void serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n'); if (dados! = nulo) {dados = trim (dados); Itens de string = divisão (dados, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (itens [1]); úmido = int (itens [2]); vento = int (itens [3]); cidade = itens [4].replace ("\" "," "); país = itens [5].replace (" / "", ""); tempo = itens [6].replace ("\" "," "); ícone = itens [7].replace (" / "", ""); }}}}
Recomendado:
Dados meteorológicos usando planilhas e script do Google: 7 etapas
Dados meteorológicos usando planilhas do Google e Google Script: neste Blogtut, enviaremos as leituras do sensor SHT25 para planilhas do Google usando Adafruit huzzah ESP8266 que ajuda a enviar os dados para a internet. O envio de dados para a célula da planilha do Google é muito útil e forma básica que salva os dados em
Uma maneira fácil de obter dados do seu veículo: 4 etapas
Uma maneira fácil de obter dados do seu veículo: Apresentamos aqui uma maneira fácil de obter dados do conector OBD-II do seu veículo, bem como dados de GPS. OBD-II, o segundo diagnóstico a bordo, é um termo automotivo que se refere ao autodiagnóstico e à capacidade de relatório de um veículo. Os sistemas OBD fornecem
O melhor registrador de dados de balões meteorológicos de alta altitude: 9 etapas (com imagens)
O registrador de dados de balão meteorológico de alta altitude definitivo: registre dados de balão meteorológico de alta altitude com o registrador de dados de balão meteorológico de alta altitude definitivo. Um balão meteorológico de alta altitude, também conhecido como balão de alta altitude ou HAB, é um enorme balão cheio de hélio. Esses balões são uma plataforma
Projeto Arduino: controle eletrônico pela Internet usando Nodejs + banco de dados SQL e website: 6 etapas
Projeto Arduino: Controle Eletrônico pela Internet Usando Nodejs + Banco de Dados SQL e Site: Projeto Por: Mahmed.tech Data: 14 de julho de 2017Nível de dificuldade: Iniciante com algum conhecimento de programação. Requisitos de hardware: - Arduino Uno, Nano, Mega (acho que a maioria dos MCU com a conexão serial funcionará) - LED & amp único; Limitando resolução atual
IoT facilitada: captura de dados meteorológicos remotos: UV e temperatura e umidade do ar: 7 etapas
IoT Made Easy: Capturando dados meteorológicos remotos: UV e temperatura e umidade do ar: Neste tutorial, iremos capturar dados remotos como UV (radiação ultravioleta), temperatura e umidade do ar. Esses dados serão muito importantes e serão usados em uma futura Estação Meteorológica completa. O Diagrama de blocos mostra o que obteremos no final