☁️ Arduino ile Gerçek Zamanlı Hava Durumu Gösterimi (OpenWeatherMap API ve ESP8266/ESP32)

☁️ Arduino ile Gerçek Zamanlı Hava Durumu Gösterimi (OpenWeatherMap API ve ESP8266/ESP32)

☁️ Arduino ile Gerçek Zamanlı Hava Durumu Gösterimi (OpenWeatherMap API ve ESP8266/ESP32)

Merhaba sevgili Arduino severler! Bu yazımızda, ESP8266 veya ESP32 kullanarak gerçek zamanlı hava durumu verilerini nasıl elde edip gösterebileceğinizi adım adım anlatacağım. Hem eğlenceli, hem de pratik bir proje olacak. Hazırsanız, başlayalım!

Gereken Malzemeler

  • ESP8266 (NodeMCU) veya ESP32 geliştirme kartı
  • Arduino IDE (En güncel sürümü)
  • OpenWeatherMap API anahtarı (Ücretsiz hesap oluşturarak alabilirsiniz)
  • LCD ekran (16x2 veya benzeri) ve I2C modülü (Opsiyonel, ekran kullanmak isterseniz)
  • Jumper kablolar

OpenWeatherMap API Anahtarı Nasıl Alınır?

Öncelikle, OpenWeatherMap sitesine giderek ücretsiz bir hesap oluşturun. Hesabınızı oluşturduktan sonra, API anahtarınızı (API key) almanız gerekiyor. Bu anahtar, hava durumu verilerini çekmek için kullanacağınız kimlik bilgisi olacak.

Bağlantılar (Eğer LCD Ekran Kullanıyorsanız)

LCD ekran kullanıyorsanız, I2C modülü ile ESP8266/ESP32 arasındaki bağlantıları aşağıdaki gibi yapın:

  • ESP8266 (NodeMCU)
  • SDA (D2) -> I2C SDA
  • SCL (D1) -> I2C SCL
  • VCC (3.3V) -> I2C VCC
  • GND -> I2C GND
  • ESP32
  • SDA (21) -> I2C SDA
  • SCL (22) -> I2C SCL
  • VCC (3.3V) -> I2C VCC
  • GND -> I2C GND

Arduino IDE Kurulumu ve Gerekli Kütüphaneler

Arduino IDE'nizin kurulu olduğundan emin olun. Eğer kurulu değilse, Arduino'nun resmi sitesinden indirebilirsiniz. Ardından aşağıdaki kütüphaneleri kurmanız gerekiyor:

  • ArduinoJson: JSON verilerini ayrıştırmak için kullanacağız. Araçlar -> Kütüphaneleri Yönet... kısmından aratarak kurabilirsiniz.
  • LiquidCrystal_I2C: LCD ekran kullanıyorsanız, bu kütüphane ekranı kontrol etmek için gereklidir. (Eğer LCD Kullanıyorsanız)
  • WiFi (ESP8266WiFi or WiFi): WiFi bağlantısı için gerekli.

Kod Kısmı

Şimdi, Arduino kodumuzu yazmaya başlayabiliriz. Aşağıdaki kodu dikkatlice inceleyin ve kendi API anahtarınızı ve şehir adınızı (CITY_NAME) eklemeyi unutmayın!


 #include 
 #include  //ESP8266 için
 //#include   // ESP32 için
 #include 
 #include  // LCD kullanıyorsanız

 // WiFi Bilgileri
 const char* WIFI_SSID = "WiFi_ADINIZ";
 const char* WIFI_PASSWORD = "WiFi_ŞİFRENİZ";

 // OpenWeatherMap API Bilgileri
 const char* API_KEY = "SİZİN_API_ANAHTARINIZ"; // OpenWeatherMap API anahtarınızı buraya girin
 const char* CITY_NAME = "Istanbul"; // Şehir adınızı buraya girin
 const char* WEATHER_URL = "http://api.openweathermap.org/data/2.5/weather?q=" CITY_NAME "&appid=" API_KEY "&units=metric";

 // LCD Bilgileri (LCD kullanıyorsanız)
 LiquidCrystal_I2C lcd(0x27, 16, 2);  // LCD adresinizi ve boyutunu kontrol edin

 void setup() {
  Serial.begin(115200);

  // WiFi'ye bağlan
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
   delay(1000);
   Serial.println("WiFi'ye bağlanılıyor...");
  }
  Serial.println("WiFi'ye bağlandı!");

  // LCD başlatma (LCD kullanıyorsanız)
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.print("Hava Durumu...");
 }

 void loop() {
  // Hava durumu verilerini al
  HTTPClient http;
  http.begin(WEATHER_URL);
  int httpCode = http.GET();

  if (httpCode > 0) {
   if (httpCode == HTTP_CODE_OK) {
    String payload = http.getString();
    Serial.println(payload);

    // JSON verilerini ayrıştır
    DynamicJsonDocument doc(2048);
    deserializeJson(doc, payload);

    float temperature = doc["main"]["temp"];
    String description = doc["weather"][0]["description"];

    Serial.print("Sıcaklık: ");
    Serial.print(temperature);
    Serial.println(" °C");
    Serial.print("Açıklama: ");
    Serial.println(description);

    // LCD'ye yazdırma (LCD kullanıyorsanız)
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Sicaklik: ");
    lcd.print(temperature);
    lcd.print(" C");
    lcd.setCursor(0, 1);
    lcd.print(description);
   } else {
    Serial.printf("HTTP Hata: %d\n", httpCode);
   }
  } else {
   Serial.printf("Bağlantı Hatası: %s\n", http.errorToString(httpCode).c_str());
  }

  http.end();

  delay(60000); // 60 saniyede bir güncelle
 }
 

Kodu Yükleme

Kodu Arduino IDE'nize kopyalayın, gerekli düzenlemeleri (WiFi bilgileri, API anahtarı, şehir adı) yapın ve ESP8266/ESP32 kartınıza yükleyin. Seri monitörden sonuçları takip edebilirsiniz. Eğer LCD ekran kullanıyorsanız, hava durumu bilgileri ekranda görünecektir.

Ek Notlar ve İpuçları

  • API anahtarınızı ve WiFi bilgilerinizi kodun içine doğrudan yazmak yerine, EEPROM'a veya SPIFFS'e kaydetmek daha güvenli bir yöntemdir.
  • Hava durumu verilerini daha sık güncellemek isterseniz, `delay()` fonksiyonundaki değeri değiştirebilirsiniz. Ancak, OpenWeatherMap'in kullanım koşullarını ihlal etmemeye dikkat edin.
  • Projenizi daha da geliştirmek için, farklı hava durumu parametrelerini (nem, rüzgar hızı, vb.) de gösterebilirsiniz.
  • Eğer LCD ekranınızda karakterler düzgün görünmüyorsa, LCD adresinizi kontrol edin. Genellikle 0x27 veya 0x3F olur.

Umarım bu rehber, Arduino ile gerçek zamanlı hava durumu gösterimi projenizi başarıyla tamamlamanıza yardımcı olur. Herhangi bir sorunuz olursa, yorumlarda belirtmekten çekinmeyin. İyi kodlamalar!

Etiketler: Arduino, ESP8266, ESP32, Hava Durumu, OpenWeatherMap, API, ArduinoJson, IoT, LCD, Proje

```

0 yorum: