Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
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 (" / "", ""); }}}}