Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Šioje pamokoje mes sukursime paprastą IOT projektą, kurio metu iš openweather.com/api paimsime mūsų miesto orų duomenis ir parodysime juos naudodami apdorojimo programinę įrangą.
Priedai:
- Arduino
- ESP8266 arba bet kuris kitas esp modulis
- „Arduino IDE“
- Apdorojimo programinė įranga
- Bandomoji Lenta
- Džemperiai iš vyro į vyrą ir iš patelės į moterį
1 žingsnis: Gaukite API raktą ir URL iš „Openweather.org“
- Sukurkite paskyrą https://openweathermap.org (1 paveikslėlis)
- Prisijungę eikite į API raktus ir gausite API raktą, kaip parodyta paveikslėlyje. (2 pav.)
- Nukopijuokite API raktą ir išsaugokite jį užrašų knygelėje. (3 pav.)
- Eikite į API parinktį (4 paveikslėlis)
- Eikite į API dokumento parinktį, kaip parodyta paveikslėlyje (5 vaizdas)
- Nukopijuokite URL iš rodomo ir išsaugokite užrašų knygelėje (6 paveikslėlis)
2 žingsnis: prijungimo schema
3 žingsnis: „Arduino“kodas
Prieš nukopijuodami šį kodą į „Arduino“, įsitikinkite, kad atsisiuntėte ESP8266 plokštę į arduino ide naudodami lentų tvarkyklę.
#įtraukti
#include #include #include const char* ssid = "Jūsų SSID"; const char* password = "Jūsų SSID PASSWORD"; // Jūsų domeno pavadinimas su URL keliu arba IP adresas su keliu String openWeatherMapApiKey = "Įklijuokite savo API raktą čia"; // Pakeiskite savo šalies kodu ir miestu String city = "Mumbai"; Eilutės countryCode = "IN"; Eilutės duomenys [16]; // Numatytasis laikmatis nustatytas 10 SEKUNDIŲ BANDYMO TIKSLAMS // Galutinei programai patikrinkite API skambučių limitus per valandą/minutę, kad išvengtumėte užblokavimo/uždraudimo be parašo ilgai lastTime = 0; // Laikmatis nustatytas į 10 minučių (600000) // unsigned long timerDelay = 600000; // Nustatyti laikmatį į 10 sekundžių (10000) unsigned long timerDelay = 10000; Styga jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, slaptažodis); //Serial.println("Connecting "); while (WiFi.status ()! = WL_CONNECTED) {delay (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Prisijungta prie WiFi tinklo su IP adresu:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Laikmatis nustatytas į 10 sekundžių (timerDelay kintamasis), prireiks 10 sekundžių, kol bus paskelbtas pirmasis skaitymas."); } void loop () {// Siųsti HTTP GET užklausą, jei ((millis () - lastTime)> timerDelay) {// Patikrinkite „WiFi“ryšio būseną, jei (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) galima naudoti norint gauti var tipą, jei (JSON.typeof (myObject) == "undefined") {//Serial.println(" Nepavyko įvesti įvesties! "); grįžti; } // Serial.print ("JSON objektas ="); // Serial.println (myObject); // Serial.print ("Temperatūra:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Slėgis:"); // Serial.println (myObject ["main"] ["pressure"]); // Serial.print ("Drėgmė:"); // Serial.println (myObject ["main"] ["drėgmė"]); // Serial.print ("Vėjo greitis:"); // Serial.println (myObject ["vėjas"] ["greitis"]); int temp = myObject ["pagrindinis"] ["temp"]; ilgas presas = myObject ["main"] ["pressure"]; int drėgnas = myObject ["main"] ["drėgmė"]; int vėjas = myObject ["vėjas"] ["greitis"]; Styginių šalis = JSON.stringify (myObject ["sys"] ["country"]); Eilutės miestas1 = JSON.stringify (myObject ["name"]); Styginis oras = JSON.stringify (myObject ["weather"] [0] ["description"]); Stygos piktograma = JSON.stringify (myObject ["weather"] [0] ["icon"]); duomenys [0] = eilutė (temp); duomenys [1] = "/"; duomenys [2] = Stygos (pirminiai); duomenys [3] = "/"; duomenys [4] = Styga (drėgna); duomenys [5] = "/"; duomenys [6] = Styga (vėjas); duomenys [7] = "/"; duomenys [8] = šalis; duomenys [9] = "/"; duomenys [10] = miestas1; duomenys [11] = "/"; duomenys [12] = oras; duomenys [13] = "/"; duomenys [14] = piktograma; duomenys [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("HTTP atsakymo kodas:"); // Serial.println (httpResponseCode); naudingoji apkrova = http.getString (); } else {Serial.print ("Klaidos kodas:"); Serial.println (httpResponseCode); } // Nemokami ištekliai http.end (); grąžinti naudingą krovinį; }
4 žingsnis: apdorojimo kodas
Prieš paleisdami šį kodą atsisiųskite nurodytus piktogramų vaizdus, kurie bus naudojami orui parodyti. Vaizdus ir kodą laikykite tame pačiame aplanke.
importo apdorojimas.serijinis.*;
Serijinis 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 drėgnas; int vėjas; Styginių miestas = ""; Styginių šalis = ""; Styginis oras = ""; Stygos piktograma = ""; void setup () {dydis (500, 500); myPort = nauja serija (tai, "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 () {fonas (72, 209, 204); textDydis (22); užpildyti (54, 69, 79); tekstas („Temperatūra:“, 25, 100); tekstas (temp +"° C", 200, 100); tekstas („Slėgis:“, 25, 150); tekstas (pres + "hpa", 200, 150); tekstas („Drėgmė:“, 25, 200); tekstas (drėgnas+" %", 200, 200); tekstas („Vėjas:“, 25, 250); tekstas (vėjas+"m/s", 200, 250); tekstas („Šalis/miestas:“, 25, 300); tekstas (šalis + "-" + miestas, 200, 300); tekstas („Oras:“, 25, 350); tekstas (oras, 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 (duomenys! = nulis) {duomenys = apdaila (duomenys); Styginių elementai = padalintas (duomenys, '/'); if (items.length> 1) {temp = int (elementai [0]); pres = int (elementai [1]); drėgnas = int (elementai [2]); vėjas = int (elementai [3]); miestas = elementai [4].replace ("\" "," "); country = items [5].replace (" / "", ""); oras = elementai [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}