Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Bu təlimatda şəhərimizin hava məlumatlarını openweather.com/api saytından əldə etmək və Qenerasiya proqramından istifadə edərək göstərmək üçün sadə bir IOT layihəsi hazırlayacağıq.
Təchizat:
- Arduino
- ESP8266 və ya hər hansı digər esp modulu
- Arduino IDE
- Emal proqramı
- Çörək lövhəsi
- Jumper telləri kişidən kişiyə və kişidən qadına
Addım 1: Openweather.org -dan API Açarı və URL əldə edin
- Https://openweathermap.org saytında hesab yaradın (Şəkil 1)
- Giriş etdikdən sonra API düymələrinə keçin və şəkildə göstərildiyi kimi API açarını əldə edəcəksiniz. (Şəkil 2)
- API açarını kopyalayın və notepad faylında saxlayın. (Şəkil 3)
- API seçiminə keçin (Şəkil 4)
- Şəkildə göstərildiyi kimi API doc seçiminə keçin (Şəkil 5)
- Url'yi göstəriləndən və göstəriləndən kopyalayın və notepad faylında saxlayın (Şəkil 6)
Addım 2: Bağlantı Şeması
Addım 3: Arduino Kodu
Bu kodu Arduinoya kopyalamadan əvvəl, Boards menecerindən istifadə edərək ESP8266 lövhəsini arduino ide -yə yüklədiyinizə əmin olun.
#daxil edin
#include #include #include const char* ssid = "Sizin SSID"; const char* password = "SSID ŞİFRİNİZ"; // URL yolu və ya IP ünvanı olan Domain adınız String openWeatherMapApiKey = "API açarınızı bura yapışdırın"; // Ölkənizin kodu və şəhəri ilə əvəz edin String city = "Mumbai"; String countryCode = "IN"; String məlumatları [16]; // VARSAYILAN ZAMANLAYICI MƏQSƏDLƏRİN TƏSDİF EDİLMƏSİ ÜÇÜN 10 SƏNİYYƏDƏ QURULMUŞDUR // Son tətbiq üçün, bloklanmaması/imzalanmaması üçün uzun müddət ərzində API zəng limitlərini yoxlayın/imzalanmamış uzun lastTime = 0; // Taymer 10 dəqiqəyə təyin edildi (600000) // işarəsiz uzun taymerDelay = 600000; // Taymeri 10 saniyəyə təyin edin (10000) işarəsiz uzun timerDelay = 10000; String jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, parol); //Serial.println("Bağlanır "); while (WiFi.status ()! = WL_CONNECTED) {gecikmə (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("IP ünvanı ilə WiFi şəbəkəsinə qoşuldu:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Taymer 10 saniyəyə təyin edilib (timerDelay dəyişən), ilk oxunuşu dərc etmədən 10 saniyə çəkəcək."); } void loop () {// ((millis () - lastTime)> timerDelay) əgər HTTP GET sorğusu göndərin {// WiFi bağlantısı vəziyyətini yoxlayın (WiFi.status () == WL_CONNECTED) {String serverPath = "https://api.openweathermap.org/data/2.5/weather?q= " + şəhər +", " + countryCode +" & APPID = " +" d5b56fd07988143ae141503ed9d81742 " +" & ədəd = metrik "; jsonBuffer = httpGETRequest (serverPath.c_str ()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse (jsonBuffer); // JSON.typeof (jsonVar) var tipini əldə etmək üçün istifadə edilə bilər, əgər (JSON.typeof (myObject) == "undefined") {//Serial.println("Parsing input failed! "); qayıtmaq; } // Serial.print ("JSON obyekti ="); // Serial.println (myObject); // Serial.print ("Temperatur:"); // Serial.println (myObject ["əsas"] ["temp"]); // Serial.print ("Təzyiq:"); // Serial.println (myObject ["əsas"] ["təzyiq"]); // Serial.print ("Rütubət:"); // Serial.println (myObject ["əsas"] ["rütubət"]); // Serial.print ("Külək Sürəti:"); // Serial.println (myObject ["külək"] ["sürət"]); int temp = myObject ["əsas"] ["temp"]; uzun pres = myObject ["əsas"] ["təzyiq"]; int humid = myObject ["əsas"] ["rütubət"]; int külək = myObject ["külək"] ["sürət"]; String ölkəsi = JSON.stringify (myObject ["sys"] ["ölkə"]); String şəhər1 = JSON.stringify (myObject ["ad"]); String hava = JSON.stringify (myObject ["hava"] [0] ["təsvir"]); String simgesi = JSON.stringify (myObject ["hava"] [0] ["simge"]); data [0] = String (temp); məlumatlar [1] = "/"; data [2] = String (pres); məlumatlar [3] = "/"; data [4] = String (nəmli); məlumatlar [5] = "/"; data [6] = Simli (külək); məlumatlar [7] = "/"; data [8] = ölkə; məlumatlar [9] = "/"; məlumatlar [10] = şəhər1; məlumatlar [11] = "/"; data [12] = hava; məlumatlar [13] = "/"; data [14] = simge; məlumatlar [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("HTTP Cavab kodu:"); // Serial.println (httpResponseCode); yük = http.getString (); } başqa {Serial.print ("Hata kodu:"); Serial.println (httpResponseCode); } // Pulsuz mənbələr http.end (); geri qaytarma yükü; }
Addım 4: Kodun işlənməsi
Bu kodu işə salmadan əvvəl havanı göstərmək üçün istifadə olunacaq verilən şəkilləri yükləyin. Və şəkilləri və kodu eyni qovluqda saxlayın.
idxal emalı.serial.*;
Serial myPort; PI görüntü img; PI görüntü img2; PI görüntü img3; PI görüntü img4; PI görüntü img5; PI görüntü img6; PI görüntü img7; PI görüntü img8; Şəkil img9; PI görüntü img10; PI görüntü img11; PI görüntü img12; PI görüntü img13; Şəkil img14; Şəkil img15; PI görüntü img16; Şəkil img17; Şəkil img18; int tempi; int pres; nəmli; külək; String şəhəri = ""; String ölkə = ""; String hava = ""; Sətir nişanı = ""; void setup () {size (500, 500); myPort = yeni Serial (bu, "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 () {background (72, 209, 204); textSize (22); doldurun (54, 69, 79); mətn ("Temperatur:", 25, 100); mətn (temp +"° C", 200, 100); mətn ("Təzyiq:", 25, 150); mətn (pres + "hpa", 200, 150); mətn ("Rütubət:", 25, 200); mətn (nəm+" %", 200, 200); mətn ("Külək:", 25, 250); mətn (külək+"m/s", 200, 250); mətn ("Ölkə/Şəhər:", 25, 300); mətn (ölkə + "-" + şəhər, 200, 300); mətn ("Hava:", 25, 350); mətn (hava, 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); } başqa 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 (data! = null) {data = trim (data); String maddələri = split (data, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (maddələr [1]); humid = int (maddələr [2]); külək = int (maddələr [3]); şəhər = maddələr [4].yeri ("\" "," "); ölkə = maddələr [5].yeri (" / "", ""); hava = maddələr [6].dəyişmə ("\" "," "); icon = maddələr [7].dəyişmə (" / "", ""); }}}}