İçindekiler:
- Adım 1: Openweather.org'dan API Anahtarı ve URL Alın
- Adım 2: Bağlantı Şeması
- Adım 3: Arduino Kodu
- 4. Adım: Kodun İşlenmesi
Video: (IOT Projesi) ESP8266 ve Openweather API'sini Kullanarak Hava Durumu Verilerini Alın: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:16
Bu talimatta, şehrimizin hava durumu verilerini openweather.com/api'den alıp İşleme yazılımını kullanarak görüntüleyen basit bir IOT projesi oluşturacağız.
Gereçler:
- Arduino
- ESP8266 veya başka bir esp modülü
- Arduino IDE'si
- İşleme yazılımı
- ekmek tahtası
- Erkekten Erkeğe ve Erkekten Kadına Jumperwires
Adım 1: Openweather.org'dan API Anahtarı ve URL Alın
- https://openweathermap.org'da hesap oluşturun (Resim 1)
- Giriş yaptıktan sonra API anahtarlarına gidin ve resimde gösterildiği gibi API anahtarını alacaksınız.(Resim 2)
- API anahtarını kopyalayın ve bir not defteri dosyasına kaydedin.(Resim 3)
- API seçeneğine gidin (Resim 4)
- Resimde gösterildiği gibi API doc seçeneğine gidin (Resim 5)
- URL'yi ve gösterilenden kopyalayın ve bir not defteri dosyasına kaydedin (Resim 6)
Adım 2: Bağlantı Şeması
Adım 3: Arduino Kodu
Bu kodu Arduino'ya kopyalamadan önce, Boards manager'ı kullanarak ESP8266 kartını arduino ide'ye indirdiğinizden emin olun.
#Dahil etmek
#include #include #include const char* ssid = "SSID'niz"; const char* password = "SSID ŞİFRENİZ";// URL yolu ile Alan adınız veya yolu ile IP adresi String openWeatherMapApiKey = "API anahtarınızı buraya yapıştırın"; // Ülke kodunuz ve şehrinizle değiştirin String city = "Mumbai"; String countryCode = "IN"; Dize verileri[16]; // TEST AMAÇLARI İÇİN VARSAYILAN ZAMANLAYICI 10 SANİYE'YE AYARLANMIŞTIR // Son bir uygulama için, bloke edilmekten/yasaklanmaktan kaçınmak için saat/dakika başına API çağrı sınırlarını kontrol edin unsigned long lastTime = 0; // Zamanlayıcı 10 dakikaya ayarlandı (600000) //işaretsiz uzun zamanlayıcıGecikme = 600000; // Zamanlayıcıyı 10 saniyeye ayarla (10000) unsigned long timerDelay = 10000; dize jsonBuffer; geçersiz kurulum() { Serial.begin(115200); WiFi.begin(ssid, şifre); //Serial.println("Bağlanıyor"); while(WiFi.status() != WL_CONNECTED) { gecikme(500); // Seri.print("."); } // Serial.println(""); // Serial.print("IP Adresi ile WiFi ağına bağlanıldı: "); // Serial.println(WiFi.localIP()); // // Serial.println("Zamanlayıcı 10 saniyeye ayarlandı (timerGecikme değişkeni), ilk okumanın yayınlanması 10 saniye sürecektir."); } void loop() { // Bir HTTP GET isteği gönder if ((millis() - lastTime) > timerDelay) { // WiFi bağlantı durumunu kontrol et if(WiFi.status()== WL_CONNECTED){ String serverPath = "https://api.openweathermap.org/data/2.5/weather?q=" + şehir + ", " + countryCode + "&APPID=" + "d5b56fd07988143ae141503ed9d81742" + "&units=metric"; jsonBuffer = httpGETRequest(serverPath.c_str()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse(jsonBuffer); // JSON.typeof(jsonVar) değişkenin türünü almak için kullanılabilir if (JSON.typeof(myObject) == "undefined") { //Serial.println("Girdi ayrıştırılamadı!"); dönüş; } // Serial.print("JSON nesnesi = "); // Serial.println(nesnem); // Serial.print("Sıcaklık: "); // Serial.println(myObject["main"]["temp"]); // Serial.print("Basınç: "); // Serial.println(myObject["ana"]["basınç"]); // Serial.print("Nem: "); // Serial.println(myObject["ana"]["nem"]); // Serial.print("Rüzgar Hızı: "); // Serial.println(myObject["rüzgar"]["hız"]); int temp = myObject["ana"]["temp"]; uzun pres = myObject["ana"]["basınç"]; int nemli = myObject["ana"]["nem"]; int rüzgar = myObject["rüzgar"]["hız"]; String country = JSON.stringify(myObject["sys"]["country"]); String city1 = JSON.stringify(myObject["name"]); String hava durumu = JSON.stringify(myObject["weather"][0]["description"]); String icon = JSON.stringify(myObject["weather"][0]["icon"]); data[0]= String(temp); veri[1]= "/"; data[2]= Dize(bas); veri[3]= "/"; data[4]= String(nemli); veri[5]= "/"; data[6]= String(rüzgar); veri[7]= "/"; veri[8]= ülke; veri[9]= "/"; veri[10]= şehir1; veri[11]= "/"; veri[12]= hava durumu; veri[13]= "/"; veri[14]= simge; veri[15]= "\n"; for(int i=0;i0) { // Serial.print("HTTP Yanıt kodu: "); // Serial.println(httpResponseCode); yük = http.getString(); } else { Serial.print("Hata kodu: "); Serial.println(httpResponseCode); } // Ücretsiz kaynaklar http.end(); dönüş yükü; }
4. Adım: Kodun İşlenmesi
Bu kodu çalıştırmadan önce, hava durumunu göstermek için kullanılacak olan simge görüntülerini indirin. Ve görüntüleri ve kodu aynı klasörde tutun.
işleme.serisini içe aktar.*;
Seri myPort; PResim görseli; 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 sıcaklık; int pres; int nemli; int rüzgar; String şehir = " "; String ülke = " "; Dize hava durumu =" "; Dize simgesi = " "; void setup(){ size(500, 500); myPort = yeni Seri(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(){ arka plan(72, 209, 204); metinBoyutu(22); doldur(54, 69, 79); text("Sıcaklık: ", 25, 100); text(temp +"°C", 200, 100); text("Basınç:", 25, 150); metin(pres + " hpa", 200, 150); text("Nem:", 25, 200); text(nemli+" %", 200, 200); text("Rüzgar:", 25, 250); metin(rüzgar+" m/s", 200, 250); text("Ülke/Şehir: ", 25, 300); text(ülke +"-"+ şehir, 200, 300); text("Hava Durumu:", 25, 350); metin(hava durumu, 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(veri != boş){ veri = kırp(veri); Dize öğeleri = split(veri, '/'); if (items.length > 1) { temp = int(items[0]); pres = int(item[1]); nemli = int(item[2]); rüzgar = int(öğeler[3]); şehir = öğeler[4].replace("\"", ""); ülke = öğeler[5].replace("\"", ""); hava durumu = öğeler[6].replace("\"", ""); simge = öğeler[7].replace("\"", ""); } } } }
Önerilen:
ESP32_DHT11_OLED_Thingspeak Kullanarak Hava Durumu İzleme: 7 Adım
ESP32_DHT11_OLED_Thingspeak Kullanarak Hava Durumu İzleme: Bu eğitimde, bir ESP32 ve DHT11 kullanarak sıcaklık ve nemi izleyen bir hava durumu monitörü oluşturacaksınız. Ve ThingSpeak'e yüklenir. ESP32, güçlü bir IOT aracıdır. Düşük maliyetli bir sistem-o
Hava Durumu API Bağlantısı: 7 Adım
Hava Durumu API Bağlantısı: Bu kılavuz, bir hava durumu API anahtarı almanıza yardımcı olur. Bu, ne giyeceğinize karar vermenize yardımcı olacak akıllı bir ayna yaratmanın birçok adımından biridir. İhtiyaçlardan biri bulunduğunuz yerle ilgili hava durumu verilerini almaktır
Dark Sky API Kullanarak Hava Durumu Panosu Oluşturun: 5 Adım (Resimlerle)
Dark Sky API'sini Kullanarak Bir Hava Durumu Panosu Oluşturun: Dark Sky, hava tahmini ve görselleştirme konusunda uzmanlaşmıştır. Dark Sky'ın en havalı yönü, dünyanın neredeyse her yerinden hava durumu verilerini almak için kullanabileceğimiz hava durumu API'sidir. Sadece hava yağmurlu veya güneşli değil, aynı zamanda sıcaklık
Dark Sky API PyPortal ve Hava Durumu Gösterge Tablosu: 6 Adım
Dark Sky API PyPortal & Weather Dashboard: Bu proje, daha önce yaptığımız Dark Sky API Weather Dashboard projesinin bir uyarlamasıdır. Bu sefer Raspberry Pi yerine, hava durumu verilerini görüntülemek ve bu verileri İlk Duruma göndermek için bir Adafruit PyPortal kullanacağız. Bir kişinin çalışması için iki pano
IoT Kolaylaştı: Uzak Hava Verilerini Yakalama: UV ve Hava Sıcaklığı ve Nem: 7 Adım
IoT Kolaylaştı: Uzak Hava Verilerini Yakalama: UV ve Hava Sıcaklığı ve Nem: Bu eğitimde, UV (Ultra-Violet radyasyon), hava sıcaklığı ve nem gibi uzak verileri yakalayacağız. Bu veriler çok önemli olacak ve gelecekte eksiksiz bir Hava İstasyonunda kullanılacak. Blok Diyagram sonunda ne elde edeceğimizi gösteriyor