Sommario:
- Passaggio 1: ottenere la chiave API e l'URL da Openweather.org
- Passaggio 2: schema di collegamento
- Passaggio 3: codice Arduino
- Passaggio 4: elaborazione del codice
Video: (Progetto IOT) Ottieni dati meteo utilizzando ESP8266 e API Openweather: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 09:59
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:
- Arduino
- ESP8266 o qualsiasi altro modulo esp
- Arduino IDE
- Software di elaborazione
- tagliere
- Ponticelli da maschio a maschio e da maschio a femmina
Passaggio 1: ottenere la chiave API e l'URL da Openweather.org
- Crea un account su https://openweathermap.org (Immagine 1)
- Dopo aver effettuato l'accesso, vai alle chiavi API e otterrai la chiave API come mostrato nell'immagine. (Immagine 2)
- Copia la chiave API e salvala in un file di blocco note. (Immagine 3)
- Vai all'opzione API (Immagine 4)
- Vai all'opzione Documento API come mostrato nell'immagine (Immagine 5)
- Copia l'URL da e mostrato e salvalo in un file di blocco note (Immagine 6)
Passaggio 2: 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
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:
ESP32 Xiaomi Hack - Ottieni dati in modalità wireless: 6 passaggi (con immagini)
ESP32 Xiaomi Hack - Ottieni dati in modalità wireless: cari amici benvenuti in un altro Instructable! Oggi impareremo come ottenere i dati che questo monitor di temperatura e umidità Xiaomi trasmette utilizzando la funzionalità Bluetooth della scheda ESP32. Come puoi vedere, sto usando una scheda ESP32
ESP8266 Nodemcu Monitoraggio della temperatura utilizzando DHT11 su un server Web locale - Ottieni la temperatura e l'umidità della stanza sul tuo browser: 6 passaggi
ESP8266 Nodemcu Monitoraggio della temperatura utilizzando DHT11 su un server Web locale | Ottieni la temperatura e l'umidità della stanza sul tuo browser: Ciao ragazzi, oggi faremo un'umidità e l'umidità; sistema di monitoraggio della temperatura utilizzando ESP 8266 NODEMCU & Sensore di temperatura DHT11. La temperatura e l'umidità saranno ottenute da DHT11 Sensor & può essere visto su un browser quale pagina web verrà gestita
Dati meteo utilizzando Fogli Google e Google Script: 7 passaggi
Dati meteorologici utilizzando Google Sheets e Google Script: In questo Blogtut, invieremo le letture del sensore SHT25 a Google Sheets utilizzando Adafruit huzzah ESP8266 che aiuta a inviare i dati a Internet. L'invio di dati a google sheet cell è molto utile e modo di base che salva i dati in
Crea una dashboard meteo utilizzando l'API Dark Sky: 5 passaggi (con immagini)
Crea una dashboard meteo utilizzando l'API Dark Sky: Dark Sky è specializzato in previsioni e visualizzazioni meteorologiche. L'aspetto più interessante di Dark Sky è la loro API meteo che possiamo utilizzare per recuperare i dati meteorologici da quasi qualsiasi parte del mondo. Non è solo il tempo è piovoso o soleggiato, ma la temperatura
Ottieni un sensore di peso sospeso da una bilancia per bagagli per il tuo progetto Arduino: 4 passaggi
Ottieni un sensore di peso sospeso da una bilancia per bagagli per il tuo progetto Arduino: in questo tutorial ti mostro come ottenere un sensore di peso sospeso per un progetto Arduino da una bilancia per bagagli/pesca economica e comune e il modulo ADC HX711 spesso usato. Premessa: per un progetto avevo bisogno di un sensore per misurare un certo peso che è ha