İçindekiler:

(IOT Projesi) ESP8266 ve Openweather API'sini Kullanarak Hava Durumu Verilerini Alın: 5 Adım
(IOT Projesi) ESP8266 ve Openweather API'sini Kullanarak Hava Durumu Verilerini Alın: 5 Adım

Video: (IOT Projesi) ESP8266 ve Openweather API'sini Kullanarak Hava Durumu Verilerini Alın: 5 Adım

Video: (IOT Projesi) ESP8266 ve Openweather API'sini Kullanarak Hava Durumu Verilerini Alın: 5 Adım
Video: Türkçe Python Dersleri - Thonny IDE Türkçe Arayüz ile Ders 10 2024, Temmuz
Anonim
(IOT Projesi) ESP8266 ve Openweather API'sini Kullanarak Hava Durumu Verilerini Alın
(IOT Projesi) ESP8266 ve Openweather API'sini Kullanarak Hava Durumu Verilerini Alın

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:

  1. Arduino
  2. ESP8266 veya başka bir esp modülü
  3. Arduino IDE'si
  4. İşleme yazılımı
  5. ekmek tahtası
  6. Erkekten Erkeğe ve Erkekten Kadına Jumperwires

Adım 1: Openweather.org'dan API Anahtarı ve URL Alın

Openweather.org'dan API Anahtarı ve URL Alın
Openweather.org'dan API Anahtarı ve URL Alın
Openweather.org'dan API Anahtarı ve URL Alın
Openweather.org'dan API Anahtarı ve URL Alın
Openweather.org'dan API Anahtarı ve URL Alın
Openweather.org'dan API Anahtarı ve URL Alın
  1. https://openweathermap.org'da hesap oluşturun (Resim 1)
  2. Giriş yaptıktan sonra API anahtarlarına gidin ve resimde gösterildiği gibi API anahtarını alacaksınız.(Resim 2)
  3. API anahtarını kopyalayın ve bir not defteri dosyasına kaydedin.(Resim 3)
  4. API seçeneğine gidin (Resim 4)
  5. Resimde gösterildiği gibi API doc seçeneğine gidin (Resim 5)
  6. URL'yi ve gösterilenden kopyalayın ve bir not defteri dosyasına kaydedin (Resim 6)

Adım 2: Bağlantı Şeması

Bağlantı şeması
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

İşleme Kodu
İşleme Kodu
İşleme Kodu
İşleme Kodu
İşleme Kodu
İşleme Kodu

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: