İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
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("\"", ""); } } } }