Innehållsförteckning:

(IOT -projekt) Få väderdata med ESP8266 och Openweather API: 5 steg
(IOT -projekt) Få väderdata med ESP8266 och Openweather API: 5 steg

Video: (IOT -projekt) Få väderdata med ESP8266 och Openweather API: 5 steg

Video: (IOT -projekt) Få väderdata med ESP8266 och Openweather API: 5 steg
Video: Sensor-Online med SMHI integration 2024, November
Anonim
(IOT -projekt) Få väderdata med hjälp av ESP8266 och Openweather API
(IOT -projekt) Få väderdata med hjälp av ESP8266 och Openweather API

I denna instruerbara kommer vi att bygga ett enkelt IOT -projekt där vi hämtar väderdata från vår stad från openweather.com/api och visar dem med bearbetningsprogramvara.

Tillbehör:

  1. Arduino
  2. ESP8266 eller någon annan esp -modul
  3. Arduino IDE
  4. Bearbetningsprogramvara
  5. Bakbord
  6. Jumperwires Man till Man och Man till Kvinna

Steg 1: Skaffa API -nyckel och URL från Openweather.org

Skaffa API -nyckel och URL från Openweather.org
Skaffa API -nyckel och URL från Openweather.org
Skaffa API -nyckel och URL från Openweather.org
Skaffa API -nyckel och URL från Openweather.org
Skaffa API -nyckel och URL från Openweather.org
Skaffa API -nyckel och URL från Openweather.org
  1. Skapa konto på https://openweathermap.org (bild 1)
  2. När du har loggat in går du till API -nycklar och du får API -nyckeln som visas på bilden. (Bild 2)
  3. Kopiera API -nyckeln och spara den i en anteckningsfil. (Bild 3)
  4. Gå till API -alternativet (bild 4)
  5. Gå till API -dokumentalternativet som visas i bilden (bild 5)
  6. Kopiera webbadressen från och visas och spara den i en anteckningsfil (bild 6)

Steg 2: Anslutningsdiagram

Kopplingsschema
Kopplingsschema

Steg 3: Arduino -kod

Innan du kopierar den här koden till Arduino, se till att du har laddat ner ESP8266 -kortet till arduino ide med Boards manager.

#omfatta

#include #include #include const char* ssid = "Ditt SSID"; const char* password = "Ditt SSID -LÖSENORD"; // Ditt domännamn med URL -sökväg eller IP -adress med sökväg String openWeatherMapApiKey = "Klistra in din API -nyckel här"; // Ersätt med din landskod och stad String city = "Mumbai"; String countryCode = "IN"; Strängdata [16]; // Standardinställningen är inställd på 10 sekunder för testning av syften // För en sista ansökan, kontrollera API -anropsgränserna per timme/minut för att undvika att bli blockerad/avstängd osignerad long lastTime = 0; // Timer inställd på 10 minuter (600000) // osignerad lång timerDelay = 600000; // Ställ in timern på 10 sekunder (10000) osignerad lång timerDelay = 10000; String jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, lösenord); //Serial.println("Connecting "); medan (WiFi.status ()! = WL_CONNECTED) {fördröjning (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Ansluten till WiFi -nätverk med IP -adress:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Timer inställd på 10 sekunder (timerDelay -variabel), det tar 10 sekunder innan den första avläsningen publiceras."); } void loop () {// Skicka en HTTP GET -begäran om ((millis () - lastTime)> timerDelay) {// Kontrollera WiFi -anslutningsstatus om (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 användas för att få typen av var om (JSON.typeof (myObject) == "odefinierad") {//Serial.println("Införingsinmatning misslyckades! "); lämna tillbaka; } // Serial.print ("JSON -objekt ="); // Serial.println (myObject); // Serial.print ("Temperatur:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Tryck:"); // Serial.println (myObject ["main"] ["press"]); // Serial.print ("Luftfuktighet:"); // Serial.println (myObject ["main"] ["fuktighet"]); // Serial.print ("Vindhastighet:"); // Serial.println (myObject ["vind"] ["hastighet"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["press"]; int fuktigt = myObject ["main"] ["fuktighet"]; int wind = myObject ["wind"] ["speed"]; String country = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (myObject ["namn"]); String weather = JSON.stringify (myObject ["weather"] [0] ["description"]); String icon = JSON.stringify (myObject ["weather"] [0] ["icon"]); data [0] = Sträng (temp); data [1] = "/"; data [2] = String (pres); data [3] = "/"; data [4] = Sträng (fuktig); data [5] = "/"; data [6] = Sträng (vind); data [7] = "/"; data [8] = land; data [9] = "/"; data [10] = stad1; data [11] = "/"; data [12] = väder; data [13] = "/"; data [14] = ikon; data [15] = "\ n"; för (int i = 0; i0) {// Serial.print ("HTTP -svarskod:"); // Serial.println (httpResponseCode); nyttolast = http.getString (); } annat {Serial.print ("Felkod:"); Serial.println (httpResponseCode); } // Gratis resurser http.end (); returnera nyttolast; }

Steg 4: Bearbetningskod

Bearbetningskod
Bearbetningskod
Bearbetningskod
Bearbetningskod
Bearbetningskod
Bearbetningskod

Innan du kör den här koden ladda ner de givna ikonbilderna som kommer att användas för att visa vädret. Och spara bilderna och koden i samma mapp.

import bearbetning. serie.*;

Seriell 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 fuktigt; int vind; String city = ""; Strängland = ""; Strängväder = ""; Strängikon = ""; void setup () {size (500, 500); myPort = new Serial (detta, "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 () {bakgrund (72, 209, 204); textSize (22); fyllning (54, 69, 79); text ("Temperatur:", 25, 100); text (temp +"° C", 200, 100); text ("Tryck:", 25, 150); text (pres + "hpa", 200, 150); text ("Luftfuktighet:", 25, 200); text (fuktig+" %", 200, 200); text ("Vind:", 25, 250); text (vind+"m/s", 200, 250); text ("Land/stad:", 25, 300); text (land + "-" + stad, 200, 300); text ("Väder:", 25, 350); text (väder, 200, 350); if (icon.contains ("01d")) {image (img, 380, 15); } annars if (icon.contains ("01n")) {image (img2, 380, 15); } annars if (icon.contains ("02d")) {image (img3, 380, 15); } annars if (icon.contains ("02n")) {image (img4, 380, 15); } annars if (icon.contains ("03d")) {image (img5, 380, 15); } annars if (icon.contains ("03n")) {image (img6, 380, 15); } annars if (icon.contains ("04d")) {image (img7, 380, 15); } annars if (icon.contains ("04n")) {image (img8, 380, 15); } annars if (icon.contains ("09d")) {image (img9, 380, 15); } annars if (icon.contains ("09n")) {image (img10, 380, 15); } annars if (icon.contains ("10d")) {image (img11, 380, 15); } annars if (icon.contains ("10n")) {image (img12, 380, 15); } annars if (icon.contains ("11d")) {image (img13, 380, 15); } annars if (icon.contains ("11n")) {image (img14, 380, 15); } annars if (ikon == "13d") {bild (img15, 380, 15); } annars if (icon.contains ("13n")) {image (img16, 380, 15); } annars if (icon.contains ("50d")) {image (img17, 380, 15); } annars 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); Strängobjekt = split (data, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (objekt [1]); fuktigt = int (objekt [2]); vind = int (objekt [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); weather = items [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}

Rekommenderad: