Cuprins:

(Proiect IOT) Obțineți date despre vreme utilizând ESP8266 și Openweather API: 5 pași
(Proiect IOT) Obțineți date despre vreme utilizând ESP8266 și Openweather API: 5 pași

Video: (Proiect IOT) Obțineți date despre vreme utilizând ESP8266 și Openweather API: 5 pași

Video: (Proiect IOT) Obțineți date despre vreme utilizând ESP8266 și Openweather API: 5 pași
Video: Becul cu releu Control 4 cu NodeMCU ESP8266 IoT și D1 Mini prin WiFi 2024, Iulie
Anonim
(Proiect IOT) Obțineți date meteo folosind ESP8266 și Openweather API
(Proiect IOT) Obțineți date meteo folosind ESP8266 și Openweather API

În acest instructable vom construi un proiect IOT simplu în care să preluăm datele meteo din orașul nostru de pe openweather.com/api și să le afișăm folosind software-ul de procesare.

Provizii:

  1. Arduino
  2. ESP8266 sau orice alt modul esp
  3. IDE Arduino
  4. Software de procesare
  5. Pană de pâine
  6. Jumperwires de la bărbat la bărbat și de la bărbat la femeie

Pasul 1: Obțineți cheia API și adresa URL de la Openweather.org

Obțineți cheia API și adresa URL de la Openweather.org
Obțineți cheia API și adresa URL de la Openweather.org
Obțineți cheia API și adresa URL de la Openweather.org
Obțineți cheia API și adresa URL de la Openweather.org
Obțineți cheia API și adresa URL de la Openweather.org
Obțineți cheia API și adresa URL de la Openweather.org
  1. Creați un cont în https://openweathermap.org (Imaginea 1)
  2. După ce vă autentificați, accesați cheile API și veți obține cheia API așa cum se arată în imagine. (Imaginea 2)
  3. Copiați cheia API și salvați-o într-un fișier de notepad. (Imaginea 3)
  4. Accesați opțiunea API (Imaginea 4)
  5. Accesați opțiunea API doc așa cum se arată în imagine (Imaginea 5)
  6. Copiați adresa URL din și afișată și salvați-o într-un fișier de notepad (Imaginea 6)

Pasul 2: Diagrama conexiunii

Diagrama conexiunii
Diagrama conexiunii

Pasul 3: Cod Arduino

Înainte de a copia acest cod în Arduino, asigurați-vă că ați descărcat placa ESP8266 în arduino ide folosind Boards manager.

#include

#include #include #include const char * ssid = "SSID-ul tău"; const char * password = "parola dvs. SSID"; // numele dvs. de domeniu cu calea URL sau adresa IP cu calea String openWeatherMapApiKey = "Inserați cheia API aici"; // Înlocuiți cu codul de țară și orașul String city = "Mumbai"; String countryCode = "IN"; Date șir [16]; // TIMERUL DEFAULT ESTE SETAT LA 10 SECUNDE PENTRU TESTARE SCOPURI // Pentru o aplicație finală, verificați limitele de apel API pe oră / minut pentru a evita blocarea / interzicerea nesemnată lungă LastTime = 0; // Temporizator setat la 10 minute (600000) // timer lung nesemnat Întârziere = 600000; // Setați cronometrul la 10 secunde (10000) cronometru lung nesemnat Întârziere = 10000; String jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, parolă); //Serial.println("Conectarea "); while (WiFi.status ()! = WL_CONNECTED) {întârziere (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Conectat la rețeaua WiFi cu adresă IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Timer setat la 10 secunde (variabilă timerDelay), va dura 10 secunde înainte de publicarea primei lecturi."); } void loop () {// Trimiteți o cerere HTTP GET dacă ((millis () - lastTime)> timerDelay) {// Verificați starea conexiunii WiFi dacă (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) poate fi folosit pentru a obține tipul de var dacă (JSON.typeof (myObject) == "undefined") {//Serial.println("Intrarea la parare a eșuat! "); întoarcere; } // Serial.print ("obiect JSON ="); // Serial.println (myObject); // Serial.print ("Temperatura:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Presiune:"); // Serial.println (myObject ["main"] ["pressure"]); // Serial.print ("Umiditate:"); // Serial.println (myObject ["main"] ["umiditate"]); // Serial.print ("Viteza vântului"); // Serial.println (myObject ["vânt"] ["viteză"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["pressure"]; int umid = myObject ["main"] ["umiditate"]; int wind = myObject ["wind"] ["speed"]; String country = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (myObject ["nume"]); String weather = JSON.stringify (myObject ["weather"] [0] ["description"]); String icon = JSON.stringify (myObject ["weather"] [0] ["icon"]); date [0] = String (temp); date [1] = "/"; date [2] = String (pres); date [3] = "/"; date [4] = Șir (umed); date [5] = "/"; date [6] = String (vânt); date [7] = "/"; date [8] = țară; date [9] = "/"; date [10] = oraș1; date [11] = "/"; date [12] = vreme; date [13] = "/"; date [14] = pictogramă; date [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Cod de răspuns HTTP:"); // Serial.println (httpResponseCode); sarcină utilă = http.getString (); } else {Serial.print ("Cod de eroare:"); Serial.println (httpResponseCode); } // Resurse gratuite http.end (); returnează sarcina utilă; }

Pasul 4: Procesarea codului

Cod de procesare
Cod de procesare
Cod de procesare
Cod de procesare
Cod de procesare
Cod de procesare

Înainte de a rula acest cod, descărcați pictogramele date care vor fi folosite pentru a arăta vremea. Și păstrați imaginile și codul în același folder.

procesare import.serial. *;

Serial 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 umed; vânt int; String city = ""; String country = ""; String weather = ""; Pictogramă șir = ""; void setup () {dimensiune (500, 500); myPort = serial nou (acesta, "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 () {fundal (72, 209, 204); textSize (22); umplutură (54, 69, 79); text ("Temperatura:", 25, 100); text (temp + "° C", 200, 100); text ("Presiune:", 25, 150); text (pres + "hpa", 200, 150); text ("Umiditate:", 25, 200); text (umed + "%", 200, 200); text ("Vânt:", 25, 250); text (vânt + "m / s", 200, 250); text („Țară / Oraș:”, 25, 300); text (țară + "-" + oraș, 200, 300); text („Vremea:”, 25, 350); text (vreme, 200, 350); if (icon.contains ("01d")) {imagine (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 (pictograma == "13d") {imagine (img15, 380, 15); } else if (icon.contains ("13n")) {image (img16, 380, 15); } else if (icon.contains ("50d")) {imagine (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 (date! = nul) {data = trim (data); Elemente șir = împărțit (date, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (itemi [1]); umed = int (itemii [2]); wind = int (itemii [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); weather = items [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}

Recomandat: