Turinys:

(IOT projektas) Gaukite orų duomenis naudodami ESP8266 ir „Openweather“API: 5 žingsniai
(IOT projektas) Gaukite orų duomenis naudodami ESP8266 ir „Openweather“API: 5 žingsniai

Video: (IOT projektas) Gaukite orų duomenis naudodami ESP8266 ir „Openweather“API: 5 žingsniai

Video: (IOT projektas) Gaukite orų duomenis naudodami ESP8266 ir „Openweather“API: 5 žingsniai
Video: 5 NUOSTABŪS GYVENIMO PRAŠYMAI Nr. 2 2024, Lapkritis
Anonim
(IOT projektas) Gaukite orų duomenis naudodami ESP8266 ir „Openweather“API
(IOT projektas) Gaukite orų duomenis naudodami ESP8266 ir „Openweather“API

Š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:

  1. Arduino
  2. ESP8266 arba bet kuris kitas esp modulis
  3. „Arduino IDE“
  4. Apdorojimo programinė įranga
  5. Bandomoji Lenta
  6. Džemperiai iš vyro į vyrą ir iš patelės į moterį

1 žingsnis: Gaukite API raktą ir URL iš „Openweather.org“

Gaukite API raktą ir URL iš Openweather.org
Gaukite API raktą ir URL iš Openweather.org
Gaukite API raktą ir URL iš Openweather.org
Gaukite API raktą ir URL iš Openweather.org
Gaukite API raktą ir URL iš Openweather.org
Gaukite API raktą ir URL iš Openweather.org
  1. Sukurkite paskyrą https://openweathermap.org (1 paveikslėlis)
  2. Prisijungę eikite į API raktus ir gausite API raktą, kaip parodyta paveikslėlyje. (2 pav.)
  3. Nukopijuokite API raktą ir išsaugokite jį užrašų knygelėje. (3 pav.)
  4. Eikite į API parinktį (4 paveikslėlis)
  5. Eikite į API dokumento parinktį, kaip parodyta paveikslėlyje (5 vaizdas)
  6. Nukopijuokite URL iš rodomo ir išsaugokite užrašų knygelėje (6 paveikslėlis)

2 žingsnis: prijungimo schema

Ryšio schema
Ryšio 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

Apdorojimo kodas
Apdorojimo kodas
Apdorojimo kodas
Apdorojimo kodas
Apdorojimo kodas
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 (" / "", ""); }}}}

Rekomenduojamas: