Sommario:

(Progetto IOT) Ottieni dati meteo utilizzando ESP8266 e API Openweather: 5 passaggi
(Progetto IOT) Ottieni dati meteo utilizzando ESP8266 e API Openweather: 5 passaggi

Video: (Progetto IOT) Ottieni dati meteo utilizzando ESP8266 e API Openweather: 5 passaggi

Video: (Progetto IOT) Ottieni dati meteo utilizzando ESP8266 e API Openweather: 5 passaggi
Video: Stazione Meteo WIFI e Touch-screen con ESP8266 2024, Dicembre
Anonim
(Progetto IOT) Ottieni dati meteo utilizzando ESP8266 e API Openweather
(Progetto IOT) Ottieni dati meteo utilizzando ESP8266 e API Openweather

In questo tutorial costruiremo un semplice progetto IOT in cui recuperare i dati meteorologici della nostra città da openweather.com/api e visualizzarli utilizzando il software di elaborazione.

Forniture:

  1. Arduino
  2. ESP8266 o qualsiasi altro modulo esp
  3. Arduino IDE
  4. Software di elaborazione
  5. tagliere
  6. Ponticelli da maschio a maschio e da maschio a femmina

Passaggio 1: ottenere la chiave API e l'URL da Openweather.org

Ottieni chiave API e URL da Openweather.org
Ottieni chiave API e URL da Openweather.org
Ottieni chiave API e URL da Openweather.org
Ottieni chiave API e URL da Openweather.org
Ottieni chiave API e URL da Openweather.org
Ottieni chiave API e URL da Openweather.org
  1. Crea un account su https://openweathermap.org (Immagine 1)
  2. Dopo aver effettuato l'accesso, vai alle chiavi API e otterrai la chiave API come mostrato nell'immagine. (Immagine 2)
  3. Copia la chiave API e salvala in un file di blocco note. (Immagine 3)
  4. Vai all'opzione API (Immagine 4)
  5. Vai all'opzione Documento API come mostrato nell'immagine (Immagine 5)
  6. Copia l'URL da e mostrato e salvalo in un file di blocco note (Immagine 6)

Passaggio 2: schema di collegamento

Schema di collegamento
Schema di collegamento

Passaggio 3: codice Arduino

Prima di copiare questo codice in Arduino, assicurati di aver scaricato la scheda ESP8266 in arduino ide usando Boards manager.

#includere

#include #include #include const char* ssid = "Il tuo SSID"; const char* password = "La tua PASSWORD SSID";// Il tuo nome di dominio con percorso URL o indirizzo IP con stringa di percorso openWeatherMapApiKey = "Incolla qui la tua chiave API"; // Sostituire con il codice del paese e la città String city = "Mumbai"; String countryCode = "IN"; Dati stringa[16]; // IL TIMER PREDEFINITO È IMPOSTATO A 10 SECONDI PER SCOPI DI TEST // Per un'applicazione finale, controlla i limiti di chiamata API per ora/minuto per evitare di essere bloccato/bannato unsigned long lastTime = 0; // Timer impostato su 10 minuti (600000) //unsigned long timerDelay = 600000; // Imposta il timer a 10 secondi (10000) unsigned long timerDelay = 10000; String jsonBuffer; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); //Serial.println("Connessione"); while(WiFi.status() != WL_CONNECTED) { ritardo(500); // Serial.print("."); } // Serial.println(""); // Serial.print("Connesso alla rete WiFi con indirizzo IP: "); // Serial.println(WiFi.localIP()); // // Serial.println("Timer impostato a 10 secondi (variabile timerDelay), ci vorranno 10 secondi prima di pubblicare la prima lettura."); } void loop() { // Invia una richiesta HTTP GET if ((millis() - lastTime) > timerDelay) { // Verifica lo stato della connessione 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 myObject = JSON.parse(jsonBuffer); // JSON.typeof(jsonVar) può essere utilizzato per ottenere il tipo di var if (JSON.typeof(myObject) == "undefined") { //Serial.println("Parsing input failed!"); Restituzione; } // Serial.print("Oggetto JSON = "); // Serial.println(myObject); // Serial.print("Temperatura: "); // Serial.println(myObject["main"]["temp"]); // Serial.print("Pressione: "); // Serial.println(mioOggetto["principale"]["pressione"]); // Serial.print("Umidità: "); // Serial.println(myObject["main"]["humidity"]); // Serial.print("Velocità del vento: "); // Serial.println(myObject["wind"]["speed"]); int temp = mioOggetto["main"]["temp"]; long pres = mioOggetto["principale"]["pressione"]; int umido = mioOggetto["principale"]["umidità"]; int vento = mioOggetto["vento"]["velocità"]; String country = JSON.stringify(myObject["sys"]["country"]); String city1 = JSON.stringify(myObject["name"]); String meteo = JSON.stringify(myObject["meteo"][0]["descrizione"]); String icon = JSON.stringify(myObject["meteo"][0]["icon"]); data[0]= Stringa(temp); dati[1]= "/"; data[2]= Stringa(pres); dati[3]= "/"; data[4]= String(umido); dati[5]= "/"; data[6]= Stringa(vento); dati[7]= "/"; dati[8]= paese; dati[9]= "/"; data[10]= città1; dati[11]= "/"; data[12]= meteo; dati[13]= "/"; dati[14]= icona; dati[15]= "\n"; for(int i=0;i0) { // Serial.print("Codice di risposta HTTP: "); // Serial.println(httpResponseCode); carico utile = http.getString(); } else { Serial.print("Codice errore: "); Serial.println(httpResponseCode); } // Risorse gratuite http.end(); carico utile di ritorno; }

Passaggio 4: elaborazione del codice

Codice di elaborazione
Codice di elaborazione
Codice di elaborazione
Codice di elaborazione
Codice di elaborazione
Codice di elaborazione

Prima di eseguire questo codice, scarica le immagini dell'icona fornite che verranno utilizzate per mostrare il tempo. E mantieni le immagini e il codice nella stessa cartella.

import processing.serial.*;

myPort seriale; PImage img; PImage img2; PImage img3; PImmagine img4; PImage img5; PImmagine img6; PImage img7; PImmagine img8; PImage img9; PImmagine img10; PImage img11; PImmagine img12; PImmagine img13; PImmagine img14; PImmagine img15; PImmagine img16; PImage img17; PImmagine img18; temperatura interna; int pre; int umido; vento interno; Stringa città = " "; Stringa paese = " "; String meteo =" "; Icona stringa = " "; void setup(){ size(500, 500); myPort = new Serial(this, "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); dimensione del testo(22); riempire (54, 69, 79); text("Temperatura: ", 25, 100); testo(temp +"°C", 200, 100); text("Pressione:", 25, 150); testo(pres + " hpa", 200, 150); text("Umidità: ", 25, 200); testo(umido+" %", 200, 200); text("Vento: ", 25, 250); testo(vento+" m/s", 200, 250); text("Paese/Città: ", 25, 300); testo(paese +"-"+ città, 200, 300); text("Meteo: ", 25, 350); testo(meteo, 200, 350); if(icon.contains("01d")){ image(img, 380, 15); } else if(icon.contains("01n")){ image(img2, 380, 15); } else if(icon.contains("02d")){ image(img3, 380, 15); } else if(icon.contains("02n")){ image(img4, 380, 15); } else if(icon.contains("03d")){ image(img5, 380, 15); } else if(icon.contains("03n")){ image(img6, 380, 15); } else if(icon.contains("04d")){ image(img7, 380, 15); } else if(icon.contains("04n")){ image(img8, 380, 15); } else if(icon.contains("09d")){ image(img9, 380, 15); } else if(icon.contains("09n")){ image(img10, 380, 15); } else if(icon.contains("10d")){ image(img11, 380, 15); } else if(icon.contains("10n")){ image(img12, 380, 15); } else if(icon.contains("11d")){ image(img13, 380, 15); } else if(icon.contains("11n")){ image(img14, 380, 15); } else if(icon == "13d"){ image(img15, 380, 15); } else if(icon.contains("13n")){ image(img16, 380, 15); } else if(icon.contains("50d")){ image(img17, 380, 15); } else if(icon.contains("50n")){ image(img18, 380, 15); } } void serialEvent(Serial myPort){ if (myPort.available() > 0){ String data = myPort.readStringUntil('\n'); if(data != null){ data = trim(data); Elementi stringa = split(data, '/'); if (items.length > 1) { temp = int(items[0]); pres = int(elementi[1]); umido = int(elementi[2]); vento = int(elementi[3]); città = elementi[4].replace("\"", ""); paese = elementi[5].replace("\"", ""); meteo = elementi[6].replace("\"", ""); icona = elementi[7].replace("\"", ""); } } } }

Consigliato: