Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
Sa pagtuturo na ito magtatayo kami ng isang simpleng proyekto ng IOT kung saan kukunin ang data ng panahon ng aming lungsod mula sa openweather.com/api at ipakita ito gamit ang Pagproseso ng software.
Mga Pantustos:
- Arduino
- ESP8266 o anumang iba pang module ng esp
- Arduino IDE
- Pagproseso ng software
- Breadboard
- Jumperwires Lalaki hanggang Lalaki at Lalaki sa Babae
Hakbang 1: Kumuha ng API Key at URL Mula sa Openweather.org
- Lumikha ng account sa https://openweathermap.org (Larawan 1)
- Pagkatapos mong mag-login pumunta sa mga API key at makukuha mo ang API key tulad ng ipinakita sa imahe. (Larawan 2)
- Kopyahin ang API key at i-save ito sa isang notepad file. (Larawan 3)
- Pumunta sa pagpipilian sa API (Larawan 4)
- Pumunta sa opsyon sa API doc tulad ng ipinapakita sa imahe (Larawan 5)
- Kopyahin ang url mula sa at ipinakita at i-save ito sa isang notepad file (Larawan 6)
Hakbang 2: Diagram ng Koneksyon
Hakbang 3: Arduino Code
Bago kopyahin ang code na ito sa Arduino tiyaking na-download mo ang board ng ESP8266 sa arduino ide gamit ang Boards manager.
# isama
#include #include #include const char * ssid = "Iyong SSID"; const char * password = "Iyong SSID PASSWORD"; // Ang iyong pangalan ng Domain na may path ng URL o IP address na may path na String openWeatherMapApiKey = "I-paste ang iyong API key dito"; // Palitan ng iyong country code at city String city = "Mumbai"; String countryCode = "IN"; String data [16]; // THE DEFAULT TIMER IS SET TO 10 SECONDS FOR TESTING PURPOSES // Para sa isang pangwakas na aplikasyon, suriin ang mga limitasyon sa tawag sa API bawat oras / minuto upang maiwasan ang ma-block / pinagbawalan na hindi pinirmahan matagal na lastTime = 0; // Timer set to 10 minutes (600000) // unsigned long timerDelay = 600000; // Set timer to 10 segundo (10000) unsigned long timerDelay = 10000; String jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, password); //Serial.println("Connect "); habang (WiFi.status ()! = WL_CONNected) {pagkaantala (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Nakakonekta sa WiFi network na may IP Address:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Itakda ang timer sa 10 segundo (timerDelay variable), tatagal ng 10 segundo bago mai-publish ang unang pagbasa."); } void loop () {// Magpadala ng isang kahilingan sa HTTP GET kung ((millis () - lastTime)> timerDelay) {// Suriin ang katayuan ng koneksyon sa WiFi kung (WiFi.status () == WL_CONNected) {String serverPath = "https://api.openweathermap.org/data/2.5/weather?q= "+ city +", "+ countryCode +" & APPID = "+" d5b56fd07988143ae141503ed9d81742 "+" & unit = metric "; jsonBuffer = httpGETRequest (serverPath.c_str ()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse (jsonBuffer); // JSON.typeof (jsonVar) ay maaaring magamit upang makuha ang uri ng var kung (JSON.typeof (myObject) == "hindi natukoy") {//Serial.println(" Nabigo ang pag-input ng pag-input! "); bumalik; } // Serial.print ("JSON object ="); // Serial.println (myObject); // Serial.print ("Temperatura:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Pressure:"); // Serial.println (myObject ["main"] ["pressure"]); // Serial.print ("Humidity:"); // Serial.println (myObject ["main"] ["halumigmig"]); // Serial.print ("Bilis ng Hangin:"); // Serial.println (myObject ["hangin"] ["bilis"]); int temp = myObject ["main"] ["temp"]; mahabang pres = myObject ["main"] ["pressure"]; int mahal = myObject ["pangunahing"] ["kahalumigmigan"]; int wind = myObject ["hangin"] ["bilis"]; String country = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (myObject ["pangalan"]); String panahon = JSON.stringify (myObject ["panahon"] [0] ["paglalarawan"]); String icon = JSON.stringify (myObject ["panahon"] [0] ["icon"]); data [0] = String (temp); data [1] = "/"; data [2] = String (pres); data [3] = "/"; data [4] = String (mahalumigmig); data [5] = "/"; data [6] = String (hangin); data [7] = "/"; data [8] = bansa; data [9] = "/"; data [10] = city1; data [11] = "/"; data [12] = panahon; data [13] = "/"; data [14] = icon; data [15] = "\ n"; para sa (int i = 0; i0) {// Serial.print ("HTTP Response code:"); // Serial.println (httpResponseCode); payload = http.getString (); } iba pa {Serial.print ("Error code:"); Serial.println (httpResponseCode); } // Libreng mapagkukunan http.end (); ibalik ang kargamento; }
Hakbang 4: Code ng Pagproseso
Bago patakbuhin ang code na ito i-download ang mga ibinigay na mga imahe ng icon na magagamit upang ipakita ang panahon. At panatilihin ang mga imahe at code sa parehong folder.
pagproseso ng pag-import.serial. *;
Serial myPort; Img ng larawan; 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 mahalumigmig; int hangin; String city = ""; String country = ""; String panahon = ""; String icon = ""; walang bisa ang pag-setup () {laki (500, 500); myPort = bagong Serial (ito, "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"); } walang bisa na pagguhit () {background (72, 209, 204); textSize (22); punan (54, 69, 79); teksto ("Temperatura:", 25, 100); teksto (temp + "° C", 200, 100); teksto ("Presyon:", 25, 150); teksto (pres + "hpa", 200, 150); teksto ("Humidity:", 25, 200); teksto (mahalumigmig + "%", 200, 200); teksto ("Hangin:", 25, 250); teksto (hangin + "m / s", 200, 250); teksto ("Bansa / Lungsod:", 25, 300); teksto (bansa + "-" + lungsod, 200, 300); teksto ("Panahon:", 25, 350); teksto (panahon, 200, 350); kung (icon.contains ("01d")) {imahe (img, 380, 15); } iba pa kung (icon.contains ("01n")) {imahe (img2, 380, 15); } iba pa kung (icon.contains ("02d")) {imahe (img3, 380, 15); } iba pa kung (icon.contains ("02n")) {imahe (img4, 380, 15); } iba pa kung (icon.contains ("03d")) {imahe (img5, 380, 15); } iba pa kung (icon.contains ("03n")) {imahe (img6, 380, 15); } iba pa kung (icon.contains ("04d")) {imahe (img7, 380, 15); } iba pa kung (icon.contains ("04n")) {imahe (img8, 380, 15); } iba pa kung (icon.contains ("09d")) {imahe (img9, 380, 15); } iba pa kung (icon.contains ("09n")) {imahe (img10, 380, 15); } iba pa kung (icon.contains ("10d")) {imahe (img11, 380, 15); } iba pa kung (icon.contains ("10n")) {imahe (img12, 380, 15); } iba pa kung (icon.contains ("11d")) {imahe (img13, 380, 15); } iba pa kung (icon.contains ("11n")) {imahe (img14, 380, 15); } iba pa kung (icon == "13d") {imahe (img15, 380, 15); } iba pa kung (icon.contains ("13n")) {imahe (img16, 380, 15); } iba pa kung (icon.contains ("50d")) {imahe (img17, 380, 15); } iba pa kung (icon.contains ("50n")) {imahe (img18, 380, 15); }} void serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n'); kung (data! = null) {data = trim (data); Mga item sa string |] = split (data, '/'); kung (items.length> 1) {temp = int (item [0]); pres = int (mga item [1]); mahalumigmig = int (mga item [2]); hangin = int (mga item [3]); city = item [4].replace ("\" "," "); country = item [5].replace (" / "", ""); panahon = mga item [6].replace ("\" "," "); icon = item [7].replace (" / "", ""); }}}}