Inhoudsopgave:
- Stap 1: Verkrijg API-sleutel en URL van Openweather.org
- Stap 2: Aansluitschema
- Stap 3: Arduino-code
- Stap 4: Verwerkingscode
Video: (IOT-project) Weergegevens ophalen met ESP8266 en Openweather API - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
In deze instructable gaan we een eenvoudig IOT-project bouwen waarin de weergegevens van onze stad van openweather.com/api worden opgehaald en weergegeven met behulp van verwerkingssoftware.
Benodigdheden:
- Arduino
- ESP8266 of een andere esp-module
- Arduino IDE
- Verwerkingssoftware
- Breadboard
- Jumperwires Man naar Man en Man naar Vrouw
Stap 1: Verkrijg API-sleutel en URL van Openweather.org
- Maak een account aan op https://openweathermap.org (Afbeelding 1)
- Nadat u bent ingelogd, gaat u naar API-sleutels en krijgt u de API-sleutel zoals weergegeven in afbeelding. (Afbeelding 2)
- Kopieer de API-sleutel en sla deze op in een kladblokbestand. (Afbeelding 3)
- Ga naar de API-optie (Afbeelding 4)
- Ga naar de API-documentoptie zoals weergegeven in afbeelding (Afbeelding 5)
- Kopieer de url van de en getoonde en sla deze op in een kladblokbestand (Afbeelding 6)
Stap 2: Aansluitschema
Stap 3: Arduino-code
Voordat u deze code naar Arduino kopieert, moet u ervoor zorgen dat u het ESP8266-bord naar Arduino ide hebt gedownload met behulp van Boards Manager.
#erbij betrekken
#include #include #include const char* ssid = "Uw SSID"; const char* wachtwoord = "Uw SSID PASSWORD";// Uw domeinnaam met URL-pad of IP-adres met pad String openWeatherMapApiKey = "Plak hier uw API-sleutel"; // Vervang door uw landcode en stad. String city = "Mumbai"; Tekenreeks countryCode = "IN"; Stringgegevens[16]; // DE STANDAARD TIMER IS INGESTELD OP 10 SECONDEN VOOR TESTDOELEINDEN // Controleer voor een laatste toepassing de API-aanroeplimieten per uur/minuut om te voorkomen dat u niet-ondertekend wordt geblokkeerd/verbannen long lastTime = 0; // Timer ingesteld op 10 minuten (600000) // unsigned long timerDelay = 600000; // Stel timer in op 10 seconden (10000) unsigned long timerDelay = 10000; String jsonBuffer; void setup() { Serial.begin(115200); WiFi.begin(ssid, wachtwoord); //Serial.println ("Verbinden"); while(WiFi.status() != WL_CONNECTED) {vertraging (500); // Serieel.print("."); } // Serieel.println(""); // Serial.print ("Verbonden met wifi-netwerk met IP-adres: "); // Serieel.println(WiFi.localIP()); // // Serial.println("Timer ingesteld op 10 seconden (variabele timerDelay), het duurt 10 seconden voordat de eerste meting wordt gepubliceerd."); } void loop() {// Stuur een HTTP GET-verzoek if ((millis() - lastTime) > timerDelay) { // Controleer de wifi-verbindingsstatus 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) kan worden gebruikt om het type var te krijgen if (JSON.typeof(myObject) == "undefined") { //Serial.println ("Parsing input failed!"); opbrengst; } // Serial.print ("JSON-object = "); // Serieel.println (mijnObject); // Serial.print ("Temperatuur: "); // Serial.println(myObject["hoofd"]["temp"]); // Serial.print ("Druk: "); // Serial.println(myObject["hoofd"]["druk"]); // Serial.print ("Vochtigheid: "); // Serial.println (myObject ["hoofd"]["vochtigheid"]); // Serial.print ("Windsnelheid: "); // Serial.println (myObject ["wind"]["snelheid"]); int temp = mijnObject["hoofd"]["temp"]; long pres = myObject["hoofd"]["druk"]; int vochtig = mijnObject["hoofd"]["vochtigheid"]; int wind = mijnObject["wind"]["snelheid"]; String land = JSON.stringify(myObject["sys"]["country"]); String city1 = JSON.stringify(myObject["naam"]); String weer = JSON.stringify(myObject["weer"][0]["beschrijving"]); Tekenreekspictogram = JSON.stringify(myObject["weer"][0]["pictogram"]); data[0]= String(temp); gegevens[1]= "/"; data[2]= String(pres); gegevens[3]= "/"; data[4]= String (vochtig); gegevens[5]= "/"; data[6]= String(wind); gegevens[7]= "/"; gegevens[8]= land; gegevens[9]= "/"; gegevens[10]= stad1; gegevens[11]= "/"; gegevens[12]= weer; gegevens[13]= "/"; gegevens[14]= icoon; data[15]= "\n"; for(int i=0;i0) { // Serial.print("HTTP-antwoordcode: "); // Serial.println(httpResponseCode); laadvermogen = http.getString(); } else { Serial.print("Foutcode: "); Serial.println(httpResponseCode); } // Gratis bronnen http.end(); retourlading; }
Stap 4: Verwerkingscode
Voordat u deze code uitvoert, downloadt u de gegeven pictogramafbeeldingen die zullen worden gebruikt om het weer te tonen. En bewaar de afbeeldingen en code in dezelfde map.
importverwerking.serienummer.*;
Seriële 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.; int vochtig; int wind; String stad = " "; String land = " "; String weer =" "; Tekenreekspictogram = " "; void setup(){ size(500, 500); myPort = nieuw serieel (dit, "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); tekstgrootte(22); vullen (54, 69, 79); text("Temperatuur: ", 25, 100); tekst(temp +"°C", 200, 100); text("Druk:", 25, 150); tekst (pres + " hpa", 200, 150); text("Vochtigheid: ", 25, 200); tekst(vochtig+" %", 200, 200); text("Wind: ", 25, 250); tekst (wind+" m/s", 200, 250); text("Land/Stad: ", 25, 300); tekst (land +"-"+ stad, 200, 300); text("Weer: ", 25, 350); tekst(weer, 200, 350); if(icon.contains("01d")){ afbeelding(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); Tekenreeksitems = split (gegevens, '/'); if (items.length > 1) { temp = int(items[0]); pres = int(items[1]); vochtig = int(items[2]); wind = int(items[3]); stad = items[4].replace("\"", ""); country = items[5].replace("\"", ""); weather = items[6].replace("\"", ""); icon = items[7].replace("\"", ""); } } } }
Aanbevolen:
Tijd en datum ophalen van internet - zelfstudie: 9 stappen
Tijd en datum van internet halen - Zelfstudie: In deze zelfstudie leren we hoe u de datum en tijd van de NIST TIME-server kunt krijgen met behulp van M5Stack StickC en Visuino, Bekijk een demonstratievideo
Weergegevens met Google Spreadsheets en Google Script: 7 stappen
Weergegevens met behulp van Google Spreadsheets en Google Script: in deze Blogtut gaan we de metingen van de SHT25-sensor naar Google Spreadsheets sturen met behulp van Adafruit Huzzah ESP8266, wat helpt om de gegevens naar internet te sturen. Het verzenden van gegevens naar Google Sheet Cell is erg handig en basismanier die de gegevens opslaat in
Gegevens ophalen uit een Firebase-database op NodeMCU: 7 stappen
Gegevens ophalen uit een Firebase-database op NodeMCU: voor deze instructie halen we gegevens op uit een database in Google Firebase en halen deze op met behulp van een NodeMCU voor verdere ontleding. PROJECTVEREISTEN:1) NodeMCU of ESP8266 Controller2) G-Mail account voor het maken van een Firebase-database.3) Download de
Een robot laten ophalen: 6 stappen
Een robot laten spelen Fetch: gebruik de nieuwe Pixy2 en een DFRobot ESP32 FireBeetle om een robot te maken die items kan vinden en ophalen
Signaal ophalen van een oude joystick: 5 stappen
Signaal ophalen van een oude joystick: dit is een project waar ik aan begon te werken toen ik een oude joystick vond met een D15-poort (gamepoort)