Nesnelerin İnterneti IoT Esp8266 Webserver

NodeMCU kullanarak oluştuğumuz webserver ile, Esp8266 kart üzerindeki lede komutlar göndereceğiz.

Aşağıda yer alan kod üzerinde yer alan 

const char* ssid = ""; // Bağlanılacak Wifi Adı
const char* pwd = ""; // Bağlanılacak Wifi Şifresi

satırlarında bulunan bilgileri girmeniz gerekiyor, kartımızın bağlanacağı kablosuz ağa ait olan bilgiler kullandığınız wifi bağlantı noktasının ismi ve parolasıdır. Lütfen bu bilgileri çift tırnak içerisine yazdığınızdan emin olun.

Bu bilgileri girdikten sonra kodu kartımıza yükleyebiliriz. Yine Tools -> Board-> ESP8266 Boards menüsünden Generic ESP 8266 module seçili olduğundan ve  Port kısmından karta ait doğru portu seçtiğinizden emin olun. Yüklemeyi gerçekleştirdikten sonra Arduino IDE üzerinden Tools -> Serial Monitor (Araçlar -> Seri Ekran) 'ü açarak, wifi modeminizin kartımıza tanımladığı ip adresine ulaşabiliriz.

NodeMCU erişim IP adresi

http://192.168.1.39/

benzeri bi metinle karşılaşacaksınız. adres kısmını kopyalayıp, internet tarayıcınızın adres kızmına yapıştırıp adrese erişim sağlıyoruz, şöyle bir görüntüyle karşılaşıyoruz:


Gördüğünüz sayfanın gelmesini sağlayan kodlar aşağıdaki kod içerisinde 72 ~ 84. ü satırlar arasında bulunmakta. Arduino IDE Kod Satır Numaraları Nasıl Açılır, bilmiyorsan buraya tıklayıp öğrenebilirsin. Aynı metodla HTML bilginize bağlı olarak daha etkili bir sayfa tasarlayabilirsiniz. Tek yapmanız gereken HTML kodlarınızı
  client.println("");

fonksiyonula client nesnesine yazırmaktır. Basitçe yazdığımız bu HTML koduna bakacak olursak 3 tane buton eklemişiz ve butonlarımı da belirli adreslere a href ile yönlendirmişiz. Örnek olsun diye ilk satıra bakalım 
  client.println("</h1><a href='/LED-ACIK'><button>Ledi YAK</button></a>");

burada buton tıklandığında, dikkat: mevcut host dizini içinde LED-ACIK içeriğini talep ediliyor, bu aslında tam olarak şu adrestir: http://192.168.1.39/LED_ACIK ,bunun tamamını bu şekilde yazmak daha garanti bir yazım olacaktır, bu durumda o anda hangi web dizininde olursa olsun, net olarak gitmesini istediğimiz adresi yazmış oluruz. 
Peki bunu web serverimiz nasıl karşılar, yani webserverdan bu içerik talep edildiğinde ne yapacağını nasıl kodluyoruz. Bunun için bir request nesnemiz var. Bu nesne o anda web sitemizde dolaşanan kişinin "request" lerini tutuyor, ne demek bu; talep, yani kullanıcı bizden ne talep etmiş, LED-ACIK diye bir talebi var. Peki, bunu kontrol etmek için request nesnemizi kontrol etmemiz gerekiyor.
  if (request.indexOf("/LED-KAPALI") != -1) {
    digitalWrite(ledPin, LOW);
    led = 0;
  }

bu kodla kontrol ettiğimiz şey indexOf methodu gelen talebin içinde tırnak içine yazdığımız ifadenin olup olmadığıdır. -1 döndürmüşse bunun anlamı sorgumuz talepte yok demektir. -1 dışında gelen değer ise, talebin hangi karakterinde başladığı bilgisidir. Bu koşul için 0 dönecektir. Talebi karşıladığımıza göre süslü parantez içine bu talep geldiğinde nodeMcu 'ya ne yapması gerektiğini kodlayabiliriz. Ledi kapatacağız ledPin 'i low yapıyoruz. Bu kadar basit. Bir de ledin durumunu sayfada göstermek için led diye bir değişken tanımlamışız, sayfayı yazdığımız kod içerisinde de bunu 0 ya sönük 1 se yanıyor olarak bastırmışız. Kodun tamamı aşağıda yer alıyor :
/*
 *  ServerLEDControl.ino
 *  
 *  Led control over NodeMcu webserver
 *  
 *  Author Hakan ÖZMEN
 *  21.03.2021
 *  
 *  www.devrelerim.com
 *  www.youtube.com/HakkanR
 *  video of code : https://youtu.be/U-U49xkXW6o
 */
#include <ESP8266WiFi.h>
const char* ssid = ""; // Bağlanılacak Wifi Adı
const char* pwd = ""; // Bağlanılacak Wifi Şifresi

uint8_t ledPin = 4;
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  //Wifi bağlantısı
  Serial.println();
  Serial.print(ssid);
  Serial.println(" erişim noktasına bağlanılıyor.");
  WiFi.begin(ssid, pwd);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  server.begin();
  Serial.println("Sunucu başlatıldı.");
  Serial.println("NodeMCU erişim IP adresi");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}

void loop() {
  WiFiClient client = server.available();
  if (!client) return;
  Serial.println("Bir kullanıcı sunucuya bağlandı.");
  while (!client.available()) delay(1);
  boolean led = 0;
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  if (request.indexOf("/LED-KAPALI") != -1) {
    digitalWrite(ledPin, LOW);
    led = 0;
  }
  if (request.indexOf("/LED-ACIK") != -1) {
    digitalWrite(ledPin, HIGH);
    led = 1;
  }
   if (request.indexOf("/LED-BLINK") != -1) {
    for (uint8_t a = 0; a<3; a++)
    {
      digitalWrite(ledPin, HIGH);
      delay(500);
      digitalWrite(ledPin, LOW);
      delay(500);
    }
    led = 0;
  }

  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html;charset=utf-8");
  client.println("<!DOCTYPE HTML>");
  client.println("");
  client.println("<html>");
  client.print("<h1>Led Şuanda ");
  if (led) client.println("YANIYOR");
  else client.println("YANMIYOR-SÖNÜK");
  client.println("</h1><a href='/LED-ACIK'><button>Ledi YAK</button></a>");
  client.println("<a href='/LED-KAPALI'><button>Ledi KAPAT</button></a>");
  client.println("<a href='/LED-BLINK'><button>Led BLINK</button></a>");
  client.println("</html>");
  delay(1);
  Serial.println("Kullanıcı bağlantısı kesildi.");
}


Merak ettiğiniz herhangi bir şeyi yorumlarda sormaktan lütfen çekinmeyin.
Konuyu Youtube Kanalımda detaylı anlattım dilerseniz bağlantıya tıklayarak izleyebilirsiniz:




Yorumlar

Bu blogdaki popüler yayınlar

Arduino IDE Kod Satır Numaraları Nasıl Açılır

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

P10 Led Panel Nasıl Sürülür - Arduino kod