Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

ESP8266 Hava Durumu Ekranı: NodeMCU, OLED ve Open-Meteo

ESP8266 Hava Durumu Ekranı: NodeMCU, OLED ve Open-Meteo
Kısa cevap

ESP8266 hava durumu ekranı, NodeMCU kartının Wi-Fi ile internete bağlanıp Open-Meteo servisinden anlık sıcaklık, nem, rüzgâr ve hava durumu kodunu alması ve bunları 0,96 inç OLED ekranda göstermesiyle çalışır. Open-Meteo ticari olmayan kullanımda ücretsizdir ve API anahtarı istemez; kart veriyi 15 dakikada bir yeniler.

Okula çıkmadan önce dışarının kaç derece olduğunu masanızdaki küçük bir ekrandan görmek ister misiniz? Bu projede ESP8266 tabanlı NodeMCU kartı ve 0,96 inç OLED ekranla internetten hava durumu çeken bir ekran yapıyoruz. Proje Wi-Fi, internet servisleri (API) ve JSON veri biçimini öğretir; lise bilişim ödevleri, meslek lisesi ve TÜBİTAK 4006 projeleri için uygundur.

ESP8266 hava durumu ekranı nedir?

ESP8266 hava durumu ekranı, Wi-Fi'li bir mikrodenetleyicinin bir hava durumu servisinden veri alıp küçük bir ekranda gösterdiği bir nesnelerin interneti (IoT) projesidir. Ekranda sensör ölçümü değil, meteoroloji modellerinin seçtiğiniz konum için hesapladığı değerler görünür.

Kendi sensörüyle ölçüm yapan bir istasyon isterseniz ESP32 hava istasyonu projesi yazısına bakabilirsiniz. Bu projede sensör yoktur; bu yüzden kurulumu daha kısadır.

Hangi malzemeler gerekir?

Bir NodeMCU kartı, bir 0,96 inç I2C OLED ekran, breadboard ve dört jumper kablo yeterlidir. Kart USB kablosuyla bilgisayardan ya da bir telefon şarj adaptöründen beslenir.

Malzeme listesi

MalzemeAdetNe işe yarar?
ESP8266 NodeMCU (CH340G, Type-C)1Wi-Fi'ye bağlanır, veriyi alır ve işler
0,96 inç 128x64 I2C OLED ekran (SSD1306)1Sıcaklık, nem ve rüzgârı gösterir
Terminalli 830 pin breadboard1Kartı ve ekranı taşır
140 parça kutulu jumper kablo seti1Bağlantılar
Type-C USB kablo ve 5V USB adaptör1Besleme ve kod yükleme

Devre nasıl bağlanır?

OLED ekranın VCC ucu NodeMCU'nun 3V3 pinine, GND ucu GND'ye, SCL ucu D1'e, SDA ucu D2'ye bağlanır. NodeMCU'da D1 GPIO5, D2 GPIO4 pinidir ve I2C için kullanılır.

  1. NodeMCU'yu breadboard'un ortasındaki boşluğun iki yanına gelecek şekilde takın.
  2. OLED'in pin sırasını ekranın üzerindeki yazıdan okuyun; bazı ekranlarda sıra GND-VCC, bazılarında VCC-GND'dir.
  3. VCC → 3V3, GND → GND, SCL → D1, SDA → D2 bağlantılarını yapın.
  4. USB kablosunu takın. Ekran henüz boş kalır; kod yüklendiğinde yazı çıkar.
ESP8266 hava durumu ekranı bağlantı şeması: NodeMCU kartının 3V3 pini OLED VCC ucuna, GND pini GND ucuna, D1 pini SCL ucuna, D2 pini SDA ucuna bağlı; OLED ekranda Ankara 14:15, 12.5 C, Az bulutlu ve Nem %62 18 km/sa yazıyor; altında NodeMCU, 2,4 GHz Wi-Fi modem ve api.open-meteo.com arasında HTTPS isteği ve JSON yanıt akışı ile örnek istek adresi ve current bölümündeki sıcaklık, nem, rüzgâr ve hava kodu değerleri
OLED VCC 3V3'e, GND GND'ye, SCL D1'e, SDA D2'ye bağlanır; NodeMCU Wi-Fi üzerinden Open-Meteo'ya istek gönderip JSON yanıtını ekrana yazar.

Ekranın kendisi ve I2C adresi (genellikle 0x3C) hakkında ayrıntılar OLED ekran SSD1306 yazısında.

Arduino IDE ve Wi-Fi nasıl hazırlanır?

Arduino IDE'ye ESP8266 kart paketini ve üç kütüphaneyi kurup kodda Wi-Fi ağınızın adını ve şifresini yazmanız yeterlidir.

  1. Dosya → Tercihler → Ek Kart Yöneticisi URL'leri alanına https://arduino.esp8266.com/stable/package_esp8266com_index.json adresini ekleyin.
  2. Kart Yöneticisi'nden "esp8266" paketini kurun; kart olarak "NodeMCU 1.0 (ESP-12E Module)" seçin.
  3. Bilgisayar kartı görmüyorsa CH340 USB sürücüsünü kurun ve doğru COM portunu seçin.
  4. Kütüphane Yöneticisi'nden "Adafruit SSD1306", "Adafruit GFX" ve "ArduinoJson" (7. sürüm) kütüphanelerini kurun.
  5. Koddaki AG_ADI ve SIFRE alanlarına ağınızın bilgilerini yazın. Büyük-küçük harf farkı önemlidir.

ESP8266 yalnızca 2,4 GHz Wi-Fi ağlarına bağlanır. Okul ağları çoğunlukla tarayıcıdan giriş sayfası ister; kart bu sayfayı geçemez. Bu durumda telefonunuzun kişisel erişim noktasını 2,4 GHz'e ayarlayıp kullanın. Kartın genel tanıtımı ESP8266 ve NodeMCU ile Wi-Fi projeleri yazısında.

Open-Meteo'dan veri nasıl alınır?

Kart, enlem ve boylam bilgisi içeren bir internet adresine istek gönderir; Open-Meteo da anlık değerleri JSON biçiminde geri yollar. Örnek adres Ankara (39,93 K, 32,86 D) içindir:

https://api.open-meteo.com/v1/forecast?latitude=39.93&longitude=32.86
  &current=temperature_2m,relative_humidity_2m,wind_speed_10m,weather_code
  &timezone=auto

Adresi tek satır olarak tarayıcıya yapıştırırsanız yanıtı görürsünüz. Yanıtın current bölümünde saat, sıcaklık (°C), bağıl nem (%), rüzgâr hızı (km/sa) ve hava kodu bulunur. Kendi konumunuzun enlem ve boylamını bir harita uygulamasında konuma uzun basarak öğrenebilirsiniz. Open-Meteo ticari olmayan kullanım için günlük 10.000 isteğe kadar ücretsizdir; 15 dakikada bir istek günde yalnızca 96 eder.

Hava durumu kodu nasıl çalışır?

Kod Wi-Fi'ye bağlanır, 15 dakikada bir HTTPS isteği gönderir, gelen JSON'dan dört değeri ayıklar ve OLED'e yazar.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <ArduinoJson.h>
#include <Adafruit_SSD1306.h>

const char* AG_ADI = "WIFI_ADI";
const char* SIFRE = "WIFI_SIFRESI";
const char* URL = "https://api.open-meteo.com/v1/forecast?latitude=39.93&longitude=32.86"
  "&current=temperature_2m,relative_humidity_2m,wind_speed_10m,weather_code&timezone=auto";
const unsigned long ARALIK = 15UL * 60 * 1000;   // 15 dakika
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
unsigned long son = 0;
bool ilk = true;

const char* durum(int k) {                 // WMO hava kodu -> metin
  if (k == 0) return "Acik";
  if (k <= 2) return "Az bulutlu";
  if (k == 3) return "Kapali";
  if (k == 45 || k == 48) return "Sisli";
  if (k <= 57) return "Ciseleme";
  if (k <= 67) return "Yagmurlu";
  if (k <= 77) return "Karli";
  if (k <= 82) return "Saganak";
  if (k <= 86) return "Kar saganagi";
  return "Gok gurultulu";
}

void guncelle() {
  BearSSL::WiFiClientSecure istemci;
  istemci.setInsecure();                  // sertifika denetimi yok
  HTTPClient http;
  http.begin(istemci, URL);
  int kod = http.GET();
  if (kod != 200) { Serial.printf("HTTP hatasi: %d\n", kod); http.end(); return; }
  JsonDocument v;
  DeserializationError hata = deserializeJson(v, http.getString());
  http.end();
  if (hata) { Serial.println(hata.c_str()); return; }
  JsonObject c = v["current"];
  String saat = c["time"].as<String>();   // 2026-11-11T14:15

  oled.clearDisplay();
  oled.setTextSize(1);
  oled.setCursor(0, 0);
  oled.print("Ankara  " + saat.substring(11));
  oled.setTextSize(3);
  oled.setCursor(0, 14);
  oled.print(c["temperature_2m"].as<float>(), 1);
  oled.setTextSize(1);
  oled.print(" C");
  oled.setCursor(0, 44);
  oled.print(durum(c["weather_code"]));
  oled.setCursor(0, 56);
  oled.print("Nem %" + String(c["relative_humidity_2m"].as<int>()));
  oled.print("  " + String(c["wind_speed_10m"].as<float>(), 0) + " km/sa");
  oled.display();
}

void setup() {
  Serial.begin(115200);
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // Wire: SDA = D2, SCL = D1
  oled.setTextColor(SSD1306_WHITE);
  oled.clearDisplay();
  oled.print("Wi-Fi baglaniyor...");
  oled.display();
  WiFi.mode(WIFI_STA);
  WiFi.begin(AG_ADI, SIFRE);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void loop() {
  if (WiFi.status() == WL_CONNECTED && (ilk || millis() - son >= ARALIK)) {
    ilk = false;
    son = millis();
    guncelle();
  }
}

setInsecure() bağlantıyı şifreler ama sunucunun sertifikasını doğrulamaz. Herkese açık hava verisi okuyan bir okul projesinde bu kabul edilebilir; şifre ya da kişisel bilgi gönderen projelerde sertifika doğrulaması yapılmalıdır.

Hava kodları ne anlama gelir?

Open-Meteo hava durumunu Dünya Meteoroloji Örgütü'nün (WMO) sayısal kodlarıyla bildirir; kod, ekrana yazılacak metne durum() işleviyle çevrilir.

WMO koduAnlamıEkranda
0Açık gökyüzüAcik
1, 2, 3Az bulutlu, parçalı bulutlu, kapalıAz bulutlu / Kapali
45, 48SisSisli
51-57Çiseleme (donan dahil)Ciseleme
61-67Yağmur (donan dahil)Yagmurlu
71-77Kar yağışı, kar taneleriKarli
80-82Sağanak yağmurSaganak
85, 86Kar sağanağıKar saganagi
95-99Gök gürültülü fırtınaGok gurultulu

OLED kütüphanesinin yazı tipi Türkçe karakterleri göstermediği için metinler "Yagmurlu" gibi yazılır.

Hangi güvenlik kurallarına dikkat edilmeli?

  • Kartı bilgisayarın USB'sinden ya da 5V USB adaptörden besleyin; 220V'a hiçbir kablo bağlamayın.
  • NodeMCU pinleri 3,3V ile çalışır; OLED'i 3V3'e bağlayın, pinlere 5V sinyal vermeyin.
  • Wi-Fi şifrenizi içeren kodu paylaşırken şifreyi silin.
  • Projeyi öğretmen ya da yetişkin gözetiminde kurun.

Ödevinizi nasıl sunarsınız?

  • Problem: "Bir cihaz internetten veriyi nasıl alır ve anlamlı bilgiye çevirir?"
  • Gösteri: Ekrandaki değerleri telefonunuzdaki hava durumu uygulamasıyla karşılaştırın.
  • Açıklama: İstek adresini ve JSON yanıtını tahtada gösterip değerlerin nasıl ayıklandığını anlatın.
  • Rapor: Bağlantı şemasını, hava kodları tablosunu ve "Veri: Open-Meteo" kaynak notunu ekleyin.
  • Geliştirme: Yarının en yüksek ve en düşük sıcaklığını ya da ikinci bir şehri ekleyin.

Sık sorulan sorular

Kart Wi-Fi'ye neden bağlanmıyor?

En sık neden ağın 5 GHz olmasıdır; ESP8266 yalnızca 2,4 GHz ağları görür. Ağ adı ve şifrede büyük-küçük harf hatası, tarayıcıdan giriş isteyen okul ağları ve zayıf sinyal de bağlantıyı engeller. Telefonun erişim noktasını 2,4 GHz'e alıp kartı yakına koyarak deneyin.

Seri monitörde "HTTP hatasi: -1" görürsem ne yapmalıyım?

Eksi değerli hatalar bağlantının sunucuya hiç ulaşmadığını gösterir. Önce kartın Wi-Fi'ye bağlı olduğundan, sonra ağınızın internete çıkabildiğinden emin olun. Adresi tarayıcıda deneyerek yazım hatası olup olmadığını kontrol edin; koddaki adreste boşluk bulunmamalıdır.

Başka bir şehrin hava durumunu nasıl gösteririm?

Adresteki latitude (enlem) ve longitude (boylam) değerlerini değiştirin; ondalık ayırıcı nokta olmalıdır. Örneğin İstanbul için yaklaşık 41.01 ve 28.98 kullanılır. Ekrandaki şehir adını da kodda değiştirmeyi unutmayın.

Yarının tahmini de gösterilebilir mi?

Gösterilebilir. Adrese &daily=temperature_2m_max,temperature_2m_min ekleyin; yanıtta daily bölümü gelir ve dizinin ikinci elemanı (indeks 1) yarına aittir. Ekran küçük olduğu için tahmini birkaç saniyede bir anlık değerlerle dönüşümlü göstermek okunabilirliği artırır.

NodeMCU yerine WeMos D1 Mini kullanılabilir mi?

Kullanılabilir; WeMos D1 Mini ESP8266 kartı da aynı çipi taşır ve D1, D2 pinleri aynı görevdedir. Arduino IDE'de kart olarak "LOLIN(WEMOS) D1 mini" seçmeniz yeterlidir; kod değişmez.

Özet

  • NodeMCU, Wi-Fi üzerinden Open-Meteo'dan anlık hava verisini alır ve 0,96 inç OLED'de gösterir.
  • Bağlantı: OLED VCC → 3V3, GND → GND, SCL → D1, SDA → D2.
  • Open-Meteo API anahtarı istemez; konum, adresteki enlem ve boylamla seçilir.
  • Veri 15 dakikada bir yenilenir; hava kodu WMO tablosuna göre metne çevrilir.
  • ESP8266 yalnızca 2,4 GHz ağlara bağlanır; devre USB'den 5V ile beslenir.

Bu yazıdaki ürünler

Diğer yazılar

11 Kasım 20266 dk okuma

Pense Çeşitleri: Yan Keski, Kargaburun ve Kombine Pense

Pense çeşitleri arasında seçim işe göre yapılır: tel ve komponent bacağı kesmek için yan keski, dar alanda tutmak ve bükmek için kargaburun,...

Devamını oku →
11 Kasım 20267 dk okuma

Işık Takip Eden Robot Yapımı: Arduino, LDR ve L298N

Işık takip eden robot, önüne takılan iki LDR ile hangi tarafın daha aydınlık olduğunu ölçüp tekerleklerini o yöne süren bir Arduino projesid...

Devamını oku →
11 Kasım 20266 dk okuma

İzoleli Tornavida ve 1000V VDE El Aletleri Nedir?

İzoleli tornavida, IEC 60900 (EN 60900) standardına göre 1000V AC ve 1500V DC gerilime kadar yalıtım için test edilmiş ve üzerinde çift üçge...

Devamını oku →
11 Kasım 20266 dk okuma

Havya Ucu Çeşitleri ve Bakımı: Konik, Keski, Bıçak

Havya ucu, lehimlenecek noktanın boyutuna göre seçilir: ince SMD ve sık bacaklar için konik (I), genel THT lehim için keski (D) ya da eğik k...

Devamını oku →
11 Kasım 20266 dk okuma

Ultrasonik Theremin Projesi: HC-SR04 ile Elle Müzik

Ultrasonik theremin, HC-SR04 sensörüyle elinizin uzaklığını ölçüp bu mesafeyi ses frekansına çeviren bir Arduino projesidir. El sensöre yakl...

Devamını oku →
11 Kasım 20266 dk okuma

Filament Nasıl Kurutulur ve Saklanır? PLA, PETG, TPU

Nem çeken filament, malzemesine uygun sıcaklıkta birkaç saat ısıtılarak kurutulur: PLA için 45-50 °C, PETG için 60-65 °C, TPU için 50-55 °C...

Devamını oku →