Innehållsförteckning:
- Steg 1: Skaffa API -nyckel och URL från Openweather.org
- Steg 2: Anslutningsdiagram
- Steg 3: Arduino -kod
- Steg 4: Bearbetningskod
Video: (IOT -projekt) Få väderdata med ESP8266 och Openweather API: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:36
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:
- Arduino
- ESP8266 eller någon annan esp -modul
- Arduino IDE
- Bearbetningsprogramvara
- Bakbord
- Jumperwires Man till Man och Man till Kvinna
Steg 1: Skaffa API -nyckel och URL från Openweather.org
- Skapa konto på https://openweathermap.org (bild 1)
- När du har loggat in går du till API -nycklar och du får API -nyckeln som visas på bilden. (Bild 2)
- Kopiera API -nyckeln och spara den i en anteckningsfil. (Bild 3)
- Gå till API -alternativet (bild 4)
- Gå till API -dokumentalternativet som visas i bilden (bild 5)
- Kopiera webbadressen från och visas och spara den i en anteckningsfil (bild 6)
Steg 2: Anslutningsdiagram
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
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:
DHT -övervakning av temperatur och luftfuktighet med hjälp av ESP8266 och AskSensors IoT -plattform: 8 steg
DHT -övervakning av temperatur och luftfuktighet med hjälp av ESP8266 och AskSensors IoT -plattform: I en tidigare instruktion presenterade jag en steg -för -steg -guide för att komma igång med ESP8266 -nodenMCU och AskSensors IoT -plattform. I den här självstudien ansluter jag en DHT11 -sensor till noden MCU. DHT11 är en vanlig temperatur och fukt
Väderdata med hjälp av Google Sheets och Google Script: 7 steg
Väderdata med hjälp av Google Kalkylark och Google -skript: I den här bloggtutan kommer vi att skicka avläsningarna av SHT25 -sensorn till Google -ark med Adafruit huzzah ESP8266 som hjälper till att skicka data till internet. Skicka data till Google bladcell är mycket användbart och grundläggande sätt som sparar data på
Växtövervakning och varningar med ESP8266 och AskSensors IoT Cloud: 6 steg
Växtövervakning och varningar med ESP8266 och AskSensors IoT Cloud: Detta projekt syftar till att bygga ett smart anläggningsövervakningssystem med hjälp av ESP8266 och AskSensors IoT -plattform. Detta system kan användas för att hålla koll på markens fuktnivå för att ge objektiva kriterier för bevattningsbeslut. som hjälper till att säkerställa bevattning
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid