Arduino
OKUDUĞUNUZ KONU
NodeMCU ESP8266 Modül ile Led Kontrolü
10

NodeMCU ESP8266 Modül ile Led Kontrolü

Yazar : Erol Çelik7 Ağustos 2017

Bu yazımda nodemcu esp8266 modülü ile led kontrolünün nasıl yapılacağını anlatmaya çalışacağım. Peki nedir bu Nodemcu modül?

Resimde görülen modül bildiğimiz arduino ile çalışan esp8266 modülünü içerisinde barındıran ve bir arduino ya ihtiyaç duymadan cihaz kontrolü yapmamızı sağlayan bir elektronik karttır. Bu modülü aynen bir arduino programlıyormuş gibi arduino ide arayüzüyle programlayabiliyoruz. Bir örnekle açıklarsak sanırım daha iyi anlaşılır olacaktır. Gelin birlikte Nodemcu modülü ile nasıl bir led kontrolü yapılır, yapmaya çalışalım.

Neler Gerekli?

  • Nodemcu modül
  • 1 adet led
  • Yeteri kadar jumper kablo (dişi-dişi)
  • Arduino ide arayüzü kurulu bir bilgisayar

Nasıl yapılır? adımları sıralayalım;

1. Önce donanım bağlantısından bahsedelim;

yukarıdaki pin map (pin dağılımı) program yazarken kullanacağımız bazı bilgileri içeriyor. Programı arduino ide ile yazacağımız için Nodemcu unun pinlerini bu arayüzde nasıl kullanacağımızı bilmemiz gerekiyor. örneğimizde kullanacağımız gibi; mesela GPIO13 pini==D7 pinine karşılık geliyor. yani biz programda 13. pini kullandığımızda donanım tablosundan da bakacak olursak Nodemcu modülün de D7 pinini kullanmış oluyoruz. Daha da somutlaştıracak olursak; digitalWrite(13,HIGH); komutunu kullandığımız zaman Nodemcu modülündeki D7 pinine lojik 1 bilgisini göndermiş oluruz. Buradan hareketle donanımsal bağlantımızı yapacağız. Ben ledimi D7 pinine bağladım.

2. Şimdi geldik programlamaya hazırlık aşamasına; bunun için arayüzümüz de bazı ayarlamalar yapmamız gerekiyor. Arduino arayüzünde varsayılan olarak Nodemcu modülü bulunmuyor. modülü entegre etmek için ;
öncelikle dosya==tercihler(preferences) kısmına giriyoruz.

karşımıza gelen ekran bu şekilde olacak. Buradaki Ek devre kartları (additional boards) kısmına şu linki yapıştıralım. http://arduino.esp8266.com/stable/package_esp8266com_index.json
ve tamam diyelim.

daha sonra araçlar menüsünden kart yöneticisi (boards manager) yazan yere tıklayalım.

karşımıza bu şekilde bir pencere gelecektir. Buradan esp8266 yı bulup yükle (install) butonuna tıklıyoruz.

Nodemcu modül ayarlarımız yükleniyor…

ve yüklendi…

şimdi kart(board) kısmından Nodemcu 1.0 (ESP-12E module) seçebiliriz. Bu ayarlamaları yaptıktan sonra artık kartımıza program yükleyebiliriz.

Evet şimdi ledimizi bağlamış olduğumuz Nodemcu ESP modülümüzü bilgisayarımıza bağlıyoruz. bağladıktan sonra bağlı olan portu seçiyoruz. Note: kartın driverini unutmayınız. eğer klon ise Ch340g driveri kurmamız gerekli.

Daha sonra ledimizi bağlantı şemasındaki gibi yerleştiriyoruz.3. Şimdi ise artık programı yazabiliriz.


#include <ESP8266WiFi.h>

const char* ssid = "wifi ag adınız";
const char* password = "wifi sifreniz";

int ledPin = 13; // GPIO13 ucu D7 ye karsılık gelir bahsettigimiz gibi
WiFiServer server(80);

void setup() {
Serial.begin(115200);
delay(10);

pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);

// Wifi bağlantısı
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

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

// server baslatılıyor
server.begin();
Serial.println("Server started");

// baglantı saglandıktan sonra serial monitorde bize ip adresini gösterecek
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");

}

void loop() {
// bir clien istemci baglı olup olmadığını kontrol ediyoruz
WiFiClient client = server.available();
if (!client) {
return;
}

// client ın bir data gondermesini bekliyoruz
Serial.println("new client");
while(!client.available()){
delay(1);
}

// gelen istekleri okuyoruz
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

int value = LOW;
if (request.indexOf("/LED-ACIK") != -1) {
digitalWrite(ledPin, HIGH);
value = HIGH;
}
if (request.indexOf("/LED-KAPALI") != -1) {
digitalWrite(ledPin, LOW);
value = LOW;
}

// bu kısımda html kodlarını internet arayüzüne yazıdırıyoruz.

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); 
client.println("<!DOCTYPE HTML>");
client.println("<html>");

client.print("Led suanda: ");

if(value == HIGH) {
client.print("ACIK");
} else {
client.print("KAPALI");
}
client.println("

");
client.println("<a href=\"/LED-ACIK\"\"><button>ledi yak </button></a>");
client.println("<a href=\"/LED-KAPALI\"\"><button>ledi sondur </button></a>
"); 
client.println("</html>");

delay(1);
Serial.println("Client disonnected");
Serial.println("");

}

Bu programı artık Nodemcu modülümüze yükeleyebiliriz.

Not: espwifi.h kütüphanemiz ekli olması gerekir. eğer daha önceden eklemediyseniz kütüphaneyi ekleyiniz.
Evet programı kartımıza yükledikten sonra serial monitorden takip edelim. Evet gorüldüğü gibi kartımız wifi bağlantısı kuruldu ve aldığı IP numarasını bize verdi

Bu ip numarasını internet tarayıcımıza yazıyoruz. Karsımıza gelen ekran bu şekilde ledi yak ve ledi söndür butonlarımızla ledimizi kontrol edebiliriz.

Bu yazımda yerel ağ üzerinden Nodemcu modülü ile bir ledi nasıl kontrol ederiz onu anlatmaya çalıştım. umarım faydalı olmuştur. Nasipse bir sonraki yazım da genel ağ üzerinde yani internet üzerinden bir ledi nasıl kontrol ederiz onu anlatmaya çalısacağım. Herkese başarılar dilerim…

SİZCE NASIL OLMUŞ?
Beğendim
83%
İlginç
8%
Eh İşte
3%
Anlamadım
8%
Kötü
0%
Berbat
0%
YAZAR HAKKINDA
Erol Çelik
10 YORUMLAR
  • 9 Ağustos 2017 at 12:43

    Anladığım kadarıyla bu yerel ağ üzerinden bağlantı kuruyor biz internetten kontrol etmek istesek nasıl yaparız acaba ?

    • ali öztaş
      29 Ocak 2018 at 14:16

      Bunun için NAT (network address translation) ve PAT (Port address translation) konusuna bakabilirsiniz.

  • Erol Çelik
    9 Ağustos 2017 at 12:54

    Bir sonraki yazimda onu anlatmaya calisacagim. Suan uzerinde calisiyorum

  • Bahadır YALÇINKAYA
    2 Aralık 2017 at 11:46

    Erol bey kolay gelsin bu güzel çalışmanız için teşekkürler. Ben Arduino üzerinden harici Esp8266 alarak internetten LED yakıp söndürebildim. Servere Arduino üzerine kurarak çalıştıran bir kaynak bularak bunu yapabildim. Ancak yaptığım denemelerde en fazla 36 saat internette bağlı kalabildi maalesef hiç stabil çalışmadı. Biraz araştırma yaptığımda NodeMCU ‘ yu önerenler oldu. Benim aklımdaki projede 7/24 internete bağlı kalması gerekiyor. Siz bu konuda NodeMCU yu önerir misiniz? Arduino ya göre bağlantı sorununu çözebilir miyim? Şimdiden teşekkürler

  • ercan
    23 Aralık 2017 at 17:22

    Yukarıda yazan herseyı uyguladım driverda yüklü ama nodemcu 12e seçili 1.0 ama kart tanınmadı diyor.Yardımcı olabılır mısınız lutfen

  • Melih KAY
    9 Şubat 2018 at 17:01

    Hocam led şerit var elimde yuvalara led şeridin kablolarını takarsak olur mu yada kısa board kullanmadan direk bağlayarak nasıl yaparız?

  • gencay tosun
    5 Mayıs 2018 at 22:04

    hocam emeğinize sağlık.
    birde internet üzerinden kontrolü yapabilir miyiz.
    sabırsızlıkla bekliyoruz.
    veya benim modemim
    huawei HG658 V2
    Nasıl yapa bilirim yardımcı olursanız, çok sevinirim.

  • Adem
    26 Temmuz 2018 at 18:49

    kodunuz işime çok yaradı.teşekkürler.ufak bir arayüz (css) iyileştirmesi yaptım.telefon ve bilgisayar içinkodlar aşağıda.
    #include
    #include
    #include
    #include
    #include
    #include

    #include

    const char* ssid = “ev_wifi”;
    const char* password = “şifre”;

    int ledPin = 13; // GPIO13 ucu D7 ye karsılık gelir bahsettigimiz gibi
    WiFiServer server(80);

    void setup() {
    Serial.begin(115200);
    delay(10);

    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);

    // Wifi bağlantısı
    Serial.println();
    Serial.println();
    Serial.print(“Connecting to “);
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(“.”);
    }
    Serial.println(“”);
    Serial.println(“WiFi connected”);

    // server baslatılıyor
    server.begin();
    Serial.println(“Server started”);

    // baglantı saglandıktan sonra serial monitorde bize ip adresini gösterecek
    Serial.print(“Use this URL to connect: “);
    Serial.print(“http://”);
    Serial.print(WiFi.localIP());
    Serial.println(“/”);

    }

    void loop() {
    // bir clien istemci baglı olup olmadığını kontrol ediyoruz
    WiFiClient client = server.available();
    if (!client) {
    return;
    }

    // client ın bir data gondermesini bekliyoruz
    Serial.println(“new client”);
    while(!client.available()){
    delay(1);
    }

    // gelen istekleri okuyoruz
    String request = client.readStringUntil(‘\r’);
    Serial.println(request);
    client.flush();

    int value = LOW;
    if (request.indexOf(“/LED-ACIK”) != -1) {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
    }
    if (request.indexOf(“/LED-KAPALI”) != -1) {
    digitalWrite(ledPin, LOW);
    value = LOW;
    }

    // bu kısımda html kodlarını internet arayüzüne yazıdırıyoruz.

    client.println(“HTTP/1.1 200 OK”);
    client.println(“Content-Type: text/html”);
    client.println(“”);
    client.println(“”);
    client.println(“”);
    client.print(“button[type=button] {width: 100%;background-color: #c35100;color: white;padding: 14px 20px;margin: 8px 0px;border: none;border-radius: 4px;cursor: pointer;text-align:center;}button[type=button]:hover { background-color: #ff6a00;}”);
    client.println(“”);
    client.print(“Anahtar: “);

    if(value == HIGH) {
    client.print(“AÇIK”);
    } else {
    client.print(“KAPALI”);
    }
    client.println(“”);
    client.println(““);
    client.println(“KAPA“);
    client.println(“”);
    client.println(“”);

    delay(1);
    Serial.println(“Client disonnected”);
    Serial.println(“”);

    }

  • mikail akbaş
    29 Ekim 2018 at 00:02

    wi-fi ve internet konularında ilk defa çalışıyorum. yani yabancısı olduğum konu mazur görün. kodları uyguladım ve çalıştırdım. hiç bir sıkıntı yok. ancak IP adresi statik olması gerekli
    IPAddress staticIP(192,168,1,10);
    IPAddress gateway(192,168,1,1);
    IPAddress subnet(255,255,255,0);

    kodlarını ekliyorum ama dinamik IP almaya devam ediyor.
    Bu işin bilmediğim kısmı ya da çözümü nedir?

YORUM YAP