Bu içeriğe 6 Mart 2024 tarihinde fotoğraf güncellemesi yapıldı.

Merhaba, bugün Nodemcu ile birlikte Web Server (Sunucu) kurup, adresimize bağlanacağız. Başlayalım!

Neden Web Server (Sunucu) kuruyoruz?

Web Server (Sunucu) bize dosyaları saklama, işleme ve gösterme imkanı sağlayacaktır. Artık İnternet tarayıcımızdan giriş yapıp ekrana bir şeyler göstermemizi, iletişim kurmayı sağlayabiliriz. İnternet’te gördüğünüz siteler de iki adet mantıktan ibarettir. Yalnızca bir adet sunucu ve alan adresidir. Sunucu kısmında dosyalarımız, veritabanlarımız, maillerimiz vb. bilgilerimiz kayıt olurken, alan adresisinde ise sunucuya erişmemiz için gereken, kişiye özel bir adres vardır. Bizler Nodemcu ile Web Sunucu kurup, bize verilen IP adresi ile bağlantı kuracağız.

Web Server (Sunucu) ne işe yarar?

Web Server (Sunucu) dosyalarımızı saklamaya ve bunları işlemeye yarar. Örneğin bir veri almamızı, işlememizi ve gerekli yerlere göndermesini sağlayabiliriz. İleride yaparsak, NodeCar arabamızda bir adet Nodemcu bulunacak. Nodemcu’ya Server (Sunucu) kurup, etraftaki cihazları buraya bağlayıp arabayı bu ağ üzerinden kontrol etmemize olanacak sağlayacak.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h> 

ESP8266WebServer Sunucu(80);

void setup() 
{
  Serial.begin(115200);
  WiFi.disconnect();
  delay(2000);
  WiFi.begin("Resul-Nodemcu","NodeMCU102!");

  while((!(WiFi.status() == WL_CONNECTED)))
    {
      delay(100);
      Serial.print(".");
    }

  Serial.print("\n\nInternete baglandim. IP adresim: ");
  Serial.println(WiFi.localIP());
  Sunucu.begin();
  Serial.println("Sunucu basladi!");
}

void loop() 
{}

Tüm kod satırlarını açıklayalım:

#include <ESP8266WiFi.h>

Nodemcu’ya Wi-Fi özelliğini kazandırmak için <ESP8266WiFi.h> kütüphanesini Nodemcu’ya dahil ediyoruz.


#include <ESP8266WebServer.h>

Nodemcu’ya Server (Sunucu) kurmaya yarayan fonksiyonları çalıştırmak için <ESP8266WebServer.h> kütüphanesini Nodemcu’ya dahil ediyoruz.


ESP8266WebServer Sunucu(80);

Nodemcu’ya Server (Sunucu) kurmaya yarıyor. Parentez içerisindeki “80” ifadesi ise bağlantı noktası numarasıdır ve genelde “80” bağlantı noktası kullanılır. Amaç bir Server (Sunucu) kurup, buna bir bağlantı noktası atamaktır. Yukarıdaki yazılımda bu amaçlanmıştır.

Portlar ile alakalı daha fazla bilgiye sahip olmak isterseniz şu bağlantıya tıklamanızda fayda var. Bende, bu kısımdan oldukça fazla yararlandım.


Serial.begin(115200);

IP adresimizi, sunucu bilgilerini öğrenmek için seri haberleşmeyi başlatmak gerekiyor. Ben genelde “115200 baud” hızını kullanıyorum.


WiFi.disconnect();

Bağlanılan kablosuz ağ ile arasındaki bağlantıyı sonlandırır. Bağlanılacak olan ağa bağlanmadan önce, diğer bağlantıların koparılması ve birden fazla bağlantı yapmamaktır. Amaç tedbir alıp, önceki bağlantıları koparıp, yeni bir bağlantıya açık olmaktır.


delay(2000);

2 sn geciktirme işlemi yapıyoruz. Bu sayede kodu yüklediğimiz zaman, seri haberleşme ekranını açana bilgilerin iki sn kadar gecikmesini sağlıyoruz.


WiFi.begin("Wi-Fi_Adı","Wi-Fi_Sifresi");

İçerisine yazdığımız bilgiler (Wi-Fi Adı ve Şifresi) ile bir ağa bağlanmaya çalışacaktır.


while((!(WiFi.status() == WL_CONNECTED))) 
{ 
  delay(100); 
  Serial.print("."); 
}

Ağa bağlanma süreci bir kaç saniye sürecektir. Bu sebeple anında bağlanamayacağı için bağlantı durumunu sürekli kontrol etmesini ve bize bilgi vermesini istiyoruz. WiFi.status()  komutu bu işe yarıyor. Bu komut bize Wi-Fi bağlantı durumunu kontrol edip, bize bilgi veriyor. Bağlandıysa WL_CONNECTED değerini, bağlanmadıysa hiçbir değeri vermiyor.

Bu aşamadan sonra yapacağımız şey sürekli (bağlanana kadar) bunun kontrolünü sağlamaktır. Bunu ise while() döngüsü ile yapacağız.

while((!(WiFi.status() == WL_CONNECTED)))  ile de Wi-Fi bağlantısı kurulmamışsa, yani Wi-Fi bağlantısı WL_CONNECTED değerine eşit değilse, döngünün içerisinde dönüp duracak ve loop() döngüsüne gitmemiş olacak.

Eğer bu döngüyü eklemezsek, void setup()  fonksiyonunda işlem bittikten hemen sonra, ağa bağlanma durumu gözetmeksizin void loop() döngüsüne geçecek ve haliyle hata yada eksik bilgiler alacağız. Çünkü ağa bağlanıp, bağlanmadığını bilmiyoruz. Döngü içerisinde biraz geciktirme ve nokta işareti ekleyerek görsellik sağladım. Her döngü içerisine girdiği zaman, biraz geciktirme ve bir adet nokta ekleyerek devam edecek. Tıpkı bir “loading ekranı” gibi olacak.


Serial.print("\n\nInternete baglandim. IP adresim: ");
Serial.println(WiFi.localIP()); 

Sunucu.begin(); 
Serial.println("Sunucu basladi!");

Birinci satırda ekrana iki adet boş satır ekleyip, ardından “Internete baglandim. IP adresim: ” adlı bir metinsel ifade yazdırıyoruz. İkinci satırda “Internete baglandim. IP adresim: ” kısmının yanına gelecek değeri (Local IP / Yerel IP / Alan Adresi) yazdırıyoruz. Üçüncü satırda Sunucu’yu başlatıyoruz. Dördüncü satırda ise “Sunucu basladi!” adlı metinsel ifade yazdırıyoruz.

Web sitelerindeki aynı mantıkla çalışmaktadır. Yani, Web sitelerinde alan adına benzeyen kısım; WiFi.localIP() , sunucuya benzeyen kısım ise Sunucu.begin(); kısmıdır.


Evet, bunların sonucunda sizlerde aşağıdaki gibi IP adresini görmüş, sunucuyu kurmuş, başlatmış ve siteye bağlanmaya hazır hale geldiğini görmüş olacaksınız.

Bu arada Nodemcu’ya ana kodu yüklediğiniz zaman, bilgilerin yalnızca bir defaya mahsus çalıştığını göreceksiniz. Bunun sebebi kodları void setup() kısmına yazmış olmamızdır. Eğer kodları void loop() kısmına yazarsak; ekrandaki bilgilerin sürekli tazelendiğini görebilirsiniz.

Kodu yükledikten sonra Seri Haberleşme Ekranını açıp, ardından kapatıp ve tekrar açmaya çalıştığınızda ekrana bir şeyler gelmeyebilir. Bunun sebebi kodlar yüklendikten sonra, ilk önce void setup() kısmına, ardından void loop() kısmına geçecektir. Sizler kodu yüklediğiniz ve  Seri Haberleşme Ekranını açtığınızda yüksek bir ihtimalle kod satırı void setup() kısmında olacağı için kodları bir defaya mahsus görebilirsiniz. Fakat Seri Haberleşme Ekranını tekrar kapatıp, açtığınızda ise kod satırı yüksek bir ihtimalle void loop() kısmına geçmiş olacak ve orada dönüp duracağı için, ekrana bir şeyler gelmeyecektir. Bu sorunu çözmek için ya ana kodları void loop() kısmına atabilirsiniz. Ya da Nodemcu üzerinde bulunan “RST” butonuna basıp Nodemcu’yu resetleyebilirsiniz.

Bunları yaptığınızda bilgilerin sürekli tazelendiğini ve bir defaya mahsus çalışmadığını görebilirsiniz.


Siteye bağlanmaya çalıştığınızda, bağlanmayabilir ve ekranda hiçbir şey görmeyebilirsiniz. Bunun sebebi Sunucu’ya bir şeyler eklemediğimizden dolayıdır. Bir sonraki blog’da Sunucu’ya bir şeyler yükleyip, bağlanmaya çalıştığımızda ekrana yüklediğimiz şeylerin gelmesini sağlayabiliriz.

Paylaşmayı ve merak ettiğiniz yerleri sormayı unutmayın. Bir sonraki blogda görüşmek üzere! 🙃