Kazalo:

(Projekt IOT) Pridobite vremenske podatke z uporabo ESP8266 in API -ja Openweather: 5 korakov
(Projekt IOT) Pridobite vremenske podatke z uporabo ESP8266 in API -ja Openweather: 5 korakov

Video: (Projekt IOT) Pridobite vremenske podatke z uporabo ESP8266 in API -ja Openweather: 5 korakov

Video: (Projekt IOT) Pridobite vremenske podatke z uporabo ESP8266 in API -ja Openweather: 5 korakov
Video: Мои ОШИБКИ в Японии. Как японцы меня обманывали... 2024, November
Anonim
(Projekt IOT) Pridobite vremenske podatke z uporabo ESP8266 in API -ja Openweather
(Projekt IOT) Pridobite vremenske podatke z uporabo ESP8266 in API -ja Openweather

V tem navodilu bomo zgradili preprost projekt IOT, v katerem bomo z openweather.com/api pridobili vremenske podatke našega mesta in jih prikazali s programsko opremo Processing.

Zaloge:

  1. Arduino
  2. ESP8266 ali kateri koli drug esp modul
  3. Arduino IDE
  4. Programska oprema za obdelavo
  5. Ogledna plošča
  6. Jumperwires moški na moški in moški na ženski

1. korak: Pridobite ključ in URL API s spletnega mesta Openweather.org

Pridobite ključ in URL API s spletnega mesta Openweather.org
Pridobite ključ in URL API s spletnega mesta Openweather.org
Pridobite ključ in URL API s spletnega mesta Openweather.org
Pridobite ključ in URL API s spletnega mesta Openweather.org
Pridobite ključ in URL API s spletnega mesta Openweather.org
Pridobite ključ in URL API s spletnega mesta Openweather.org
  1. Ustvarite račun na https://openweathermap.org (slika 1)
  2. Ko se prijavite, pojdite na ključe API in dobili boste ključ API, kot je prikazano na sliki. (Slika 2)
  3. Kopirajte ključ API in ga shranite v datoteko beležnice. (Slika 3)
  4. Pojdite na možnost API (slika 4)
  5. Pojdite na možnost doc API, kot je prikazano na sliki (slika 5)
  6. Kopirajte URL iz prikazanega in in ga shranite v datoteko beležnice (slika 6)

2. korak: diagram povezave

Shema povezave
Shema povezave

3. korak: Arduino koda

Pred kopiranjem te kode v Arduino se prepričajte, da ste z upraviteljem plošč prenesli ploščo ESP8266 v arduino ide.

#vključi

#include #include #include const char* ssid = "Vaš SSID"; const char* password = "Vaša geslo SSID"; // Ime vaše domene s potjo URL ali naslovom IP s potjo String openWeatherMapApiKey = "Tu prilepite ključ API"; // Zamenjajte s kodo države in mestom String city = "Mumbai"; Niz countryCode = "IN"; Podatki o nizih [16]; // ČASOVNIČNI TIMER JE NASTAVLJEN NA 10 SEKUND ZA TESTIRANJE NAMENOV // Za končno aplikacijo preverite omejitve klicev API -ja na uro/minuto, da se izognete blokiranju/prepovedi unsigned long lastTime = 0; // Časovnik nastavljen na 10 minut (600000) // dolg časovnik brez podpisaDelay = 600000; // Časovnik nastavite na 10 sekund (10000) brez podpisa dolgi timerDelay = 10000; Niz jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, geslo); //Serial.println("Connecting "); while (WiFi.status ()! = WL_CONNECTED) {zamuda (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Povezano z omrežjem WiFi z naslovom IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Časovnik nastavljen na 10 sekund (spremenljivka timerDelay), pred objavo prve obravnave bo trajalo 10 sekund."); } void loop () {// Pošlji zahtevo GET HTTP if ((millis () - lastTime)> timerDelay) {// Preveri stanje povezave WiFi, če (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) se lahko uporabi za pridobitev vrste var if (JSON.typeof (myObject) == "undefined") {//Serial.println(" Razčlenjevanje vnosa ni uspelo! "); vrnitev; } // Serial.print ("objekt JSON ="); // Serial.println (mojObjekt); // Serial.print ("Temperatura:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Tlak:"); // Serial.println (myObject ["main"] ["pressure"]); // Serial.print ("Vlažnost:"); // Serial.println (myObject ["main"] ["vlažnost"]); // Serial.print ("Hitrost vetra:"); // Serial.println (myObject ["veter"] ["hitrost"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["pressure"]; int humid = myObject ["glavni"] ["vlažnost"]; int wind = myObject ["veter"] ["hitrost"]; Niz država = JSON.stringify (myObject ["sys"] ["država"]); String city1 = JSON.stringify (myObject ["ime"]); Niz vreme = JSON.stringify (myObject ["vreme"] [0] ["opis"]); Ikona niza = JSON.stringify (myObject ["vreme"] [0] ["ikona"]); podatki [0] = niz (temp); podatki [1] = "/"; podatki [2] = niz (pres); podatki [3] = "/"; podatki [4] = niz (vlažno); podatki [5] = "/"; podatki [6] = niz (veter); podatki [7] = "/"; podatki [8] = država; podatki [9] = "/"; podatki [10] = mesto1; podatki [11] = "/"; podatki [12] = vreme; podatki [13] = "/"; podatki [14] = ikona; podatki [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Odzivna koda HTTP:"); // Serial.println (httpResponseCode); payload = http.getString (); } else {Serial.print ("Koda napake:"); Serial.println (httpResponseCode); } // Brezplačni viri http.end (); povratni tovor; }

4. korak: Obdelava kode

Koda za obdelavo
Koda za obdelavo
Koda za obdelavo
Koda za obdelavo
Koda za obdelavo
Koda za obdelavo

Preden zaženete to kodo, prenesite dane slike ikon, ki bodo uporabljene za prikaz vremena. Slike in kodo hranite v isti mapi.

uvozna obdelava.serial.*;

Serijski 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 vlažno; int veter; String city = ""; Država niza = ""; Niz vreme = ""; Ikona niza = ""; void setup () {velikost (500, 500); myPort = nov serijski (to, "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 () {ozadje (72, 209, 204); textSize (22); napolni (54, 69, 79); besedilo ("Temperatura:", 25, 100); besedilo (temp +"° C", 200, 100); besedilo ("Tlak:", 25, 150); besedilo (pres + "hpa", 200, 150); besedilo ("Vlažnost:", 25, 200); besedilo (vlažno+" %", 200, 200); besedilo ("Veter:", 25, 250); besedilo (veter+"m/s", 200, 250); text ("Država/mesto:", 25, 300); besedilo (država + "-" + mesto, 200, 300); text ("Vreme:", 25, 350); besedilo (vreme, 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) {Podatkovni niz = myPort.readStringUntil ('\ n'); if (podatki! = ničelno) {podatki = trim (podatki); Elementi niza = deljeno (podatki, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (postavke [1]); vlažno = int (postavke [2]); veter = int (postavke [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); weather = items [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}

Priporočena: