NodeMcu Internetten veri çekme | Hava Durumu openweather.org api

 Esp8266 Api ile Hava Durumunu Çekme

    Nodemcu (esp8266) ile openweathermap.org 'un sağlamış olduğu api hizmeti ile illerin hava durumlarını nasıl çekebiliriz ona bakıyor olacağız. Daha önce youtube kanalımda bu konuyla alakalı bir video çekmiştim yazının sonuna video eklerim dileyenler videolu anlatımı da takip edebilirler.
    openweather.org sitesine api-key için kaydolmanız gerekiyor. Kayıt işleminden sonra sisteme giriş yapıp Api-Keys menusunden yeni api-key'inizi oluşturabilirsiniz. Api-key 'iniz oluştuktan sonra bir web browser ile api-key'inizi test etmenizi öneririm çünkü aktif olması bazen 24 saati bulabiliyor. Web browser ile api-key'iniz ile veri çekebiliyorsanız keyiniz aktif olmuş ve kullanıma hazır demektir. Test etmek için aşağıda verdiğim url 'yi kullanabilirsiniz :

http://api.openweathermap.org/data/2.5/weather?units=metric&q=istanbul&appid=apikeyiniz

apikeyiniz ifadesi yerine api-key'inizi yazmanız gerekiyor. Eğer key aktif olmuşsa görmeniz gereken sonuç şu şekilde olacaktır :

{"coord":{"lon":28.9833,"lat":41.0351},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"base":"stations","main":{"temp":8.73,"feels_like":5.25,"temp_min":7.81,"temp_max":9.09,"pressure":1018,"humidity":87},"visibility":10000,"wind":{"speed":7.2,"deg":350},"clouds":{"all":100},"dt":1673541249,"sys":{"type":1,"id":6970,"country":"TR","sunrise":1673501281,"sunset":1673535355},"timezone":10800,"id":745042,"name":"Istanbul","cod":200}

Api 'nin veri dönüş tipi json 'dur. Bilmeyenler için kısaca yazmış olalım; 

Json Nedir?

JSON, JavaScript Object Notation 'ın kısaltılmış hali olup, basit veri yapılarını temsil etmek için tasarlanmış bağımsız bir veri değişim formatıdır. Apilerden elde edilen veriler genellikle json, xml gibi standartlaştırılmış veri tipleri olarak döner, Bir gömülü sistem mühendisi olarak bu tipe asla ihtiyaç duymayız ancak iş gömülü sistem ile dış dünyadan, internetten veya başka bir uygulamadan veri-alıp vermeye döndüğünde bu yapıları da bilmek gerekiyor.

Arduino ile json datayı ayıklamak için de bir kütüphanemiz mevcut, kod üzerinde projeye dahil ettiğim kütüphaneyi library manager ile yüklemeniz gerekiyor.


Kod şu şekilde olacak :
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Arduino_JSON.h>

const char ssid = ""; // Wifi kullanıcı adını yazın
const char* pwd = ""; //Wifi parolanızı yazın
String city = ""; // hava bilgisini almak istediğiniz şehri yazın

String Apikey = ""; //openweathermap.org apikeyinizi girin
String owmWeb = "http://api.openweathermap.org/data/2.5/weather?units=metric&q=" + city + "&appid=" + Apikey;
void setup() {
  Serial.begin(115200);
  Serial.print(ssid);
  Serial.println(" bağlanıyor.");
  WiFi.begin(ssid, pwd);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(500);
  }
  Serial.println(" bağlandı.");
}

void loop() {
 String owmJson = getWebPage(owmWeb.c_str());
 JSONVar jsonData = JSON.parse(owmJson);
 if (JSON.typeof(jsonData) == "undefined")
 {
  Serial.println("Json data ayıklanamadı.");
  return;
 }
 Serial.print ("Şehir : ");
 Serial.println(city);
 Serial.print("Sıcaklık : ");
 double temp = (jsonData["main"]["temp"]);
 Serial.println(temp);
 Serial.print("Hissedilen : ");
 double feels_like = (jsonData["main"]["feels_like"]);
 Serial.println(feels_like);
 Serial.print("Nem : ");
 double humidity = (jsonData["main"]["humidity"]);
 Serial.println(humidity);
 Serial.print ("Rüzgar Hızı : ");
 double windSpeed = (jsonData["wind"]["speed"]);
 Serial.println(windSpeed);
 Serial.print("Rüzgar Yönü : ");
 double windDeg = (jsonData["wind"]["deg"]);
 Serial.println(windDeg);
 delay(5000);
}

String getWebPage(const char* address)
{
  HTTPClient http;
  http.begin(address);
  int httpCode = http.GET();
  Serial.println(httpCode);
  String payload = http.getString();
  return payload;
}

Nodemcu ile api kullanımında farklı ihtiyaçlarınız ya da çözemediğiniz apiler olursa yorumlarda yazabilirsiniz, vakit bulduğumda inceleyip yardımcı olmaya çalışırım.




Herkese kolay gelsin.

Yorumlar

Bu blogdaki popüler yayınlar

Arduino DHT11 Kullanımı - Arduino Kod - Arduino Termometre yapımı

Arduino ile voltaj okuma | Arduino ile voltmetre | Arduino ADC örnek Kod

Arduino Oled Ekran Kullanımı | SSD1306 Detaylı Tüm Fonksiyonlar

Arduino 16x2 (2x16) LCD Ekran Kullanımı | 4bit parallel mode - 16x2 LCD ekran pin bağlantıları

Arduino ile Yüksek Voltaj Ölçme | SMPS DC Bara Ölçümü

Arduino UNO güç özellikleri

Arduino LM35 Sıcaklık Sensörü İle Sıcaklık Ölçme

16x2 Lcd Türkçe Karakter Sorunu Çözüldü! Arduino LCD ekrana yazı yazma - Arduino 16x2 Lcd ekran kullanımı

Arduino Röle Modül Kullanımı

DMD2TUR | Arduino P10 Led Panel için Türkçe Karakter Desteği | Arduino P10 Led panel Türkçe yazı yazma