json etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
json etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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 = "istanbul"; // 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);
 //weather altında bir nesneye ulaşmak için
 JSONVar whDescJ = (jsonData["weather"][0]["description"]);
 Serial.print("description");
 Serial.println(whDescJ);
 delay(5000);
}

String getWebPage(const char* address)
{
  WiFiClient wfc;
  HTTPClient http;
  http.begin(wfc,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.




Eğer videodaki kodu yazıp;

call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url)

gibi bir hata alıyorsanız, getWebPage fonksiyonunu yukarıda yazıldığı gibi güncelleyin.

Herkese kolay gelsin!

Türksat Saat Kanalı ve IRIG-B Time Code

Türksat Saat Kanalından Saat Bilgisi Nasıl Alınır? Uyduda kanalları dolaşırken, şu Türksat Saat kanalı hep dikkatimi çekmiştir. Özellikle  S...