Índice:

(Projeto IOT) Obter dados meteorológicos usando ESP8266 e API Openweather: 5 etapas
(Projeto IOT) Obter dados meteorológicos usando ESP8266 e API Openweather: 5 etapas

Vídeo: (Projeto IOT) Obter dados meteorológicos usando ESP8266 e API Openweather: 5 etapas

Vídeo: (Projeto IOT) Obter dados meteorológicos usando ESP8266 e API Openweather: 5 etapas
Vídeo: Estación meteorológica con pantalla OLED (1/2). ESP8266 #8 2024, Novembro
Anonim
(Projeto IOT) Obter dados meteorológicos usando ESP8266 e API Openweather
(Projeto IOT) Obter dados meteorológicos usando ESP8266 e API Openweather

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:

  1. Arduino
  2. ESP8266 ou qualquer outro módulo esp
  3. IDE Arduino
  4. Software de processamento
  5. Tábua de pão
  6. Jumperwires Masculino para Masculino e Masculino para Feminino

Etapa 1: Obtenha a chave API e o URL do Openweather.org

Obtenha a chave API e o URL em Openweather.org
Obtenha a chave API e o URL em Openweather.org
Obtenha a chave API e o URL em Openweather.org
Obtenha a chave API e o URL em Openweather.org
Obtenha a chave API e o URL em Openweather.org
Obtenha a chave API e o URL em Openweather.org
  1. Crie uma conta em https://openweathermap.org (Imagem 1)
  2. Depois de fazer o login, vá para as chaves API e você obterá a chave API conforme mostrado na imagem. (Imagem 2)
  3. Copie a chave API e salve-a em um arquivo de bloco de notas. (Imagem 3)
  4. Vá para a opção API (Imagem 4)
  5. Vá para a opção API doc conforme mostrado na imagem (Imagem 5)
  6. Copie o url do e mostrado e salve-o em um arquivo de bloco de notas (Imagem 6)

Etapa 2: Diagrama de conexão

Diagrama de ligação
Diagrama de ligaçã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

Código de Processamento
Código de Processamento
Código de Processamento
Código de Processamento
Código de Processamento
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: