NodeMcu ve Basit bir Uygulama.

Yayınlandı: 23 Ağustos 2017 / İncelemeler
Etiketler:, , , , , ,

ESP8266 isimli wifi çipini duymayan elektronikçi sanırım artık kalmamıştır. Bu çip ilk olarak ESP-01 ismindeki modülle piyasaya çıkmıştı. ESP-01 isimli modülde sadece 2 adet GPIO pini bulunmaktaydı ve bu pinler  de aslında çipin boot seçimini sağlayan ve çipe firmware yüklemek için gerekli olan pinlerdi. Bu 2 pini boot işlemleri bittikten sonra giriş çıkış olarak kullanabiliyorduk fakat oldukça  zahmetli işti. Daha sonra ESP modüllerinin farklı türevleri ortaya çıktı. Son olarak NodeMcu isminde, esp8266’yı kullanabilmek için gerekli herşeyi üzerinde barındıran, ESP8266’nın bütün pinlerini kullanılabilir hale getiren kartlar piyasaya çıktı. NodeMcu aslında ESP8266’yı LUA dili ile programlamak için geliştirilmiş bir firmwarein ismi. Fakat ayrıca NodeMcu DevKit isminde  geliştirme kartları da olduğu ve çok tutulduğu için bu kartlara da kısaca NodeMCU diyoruz. Ben de ESP8266’ya ilgimi tekrardan yönelttiğim bu günlerde bu kartlardan birisini aliexpress üzerinden sipariş ettim. Sipariş ettiğim kart, diğerlerinden farklı olarak üzerinde 32 Mbit flash barındırmakta. Standart NodeMcu kartlarında bu flash çipinin hafıza boyutu 4Mbit. Kartın üzerinde ayrıca 3.3V voltaj regülatörü ve micro USB konnektörü de mevcut. Böylece ekstra bir donanıma ihtiyaç duymadan kartımızı bilgisayarımıza bağlayıp programlamaya başlayabiliyoruz.  Kartın fiyatı ben aldığımda 2.35$ dı ve 10 gün gibi bir sürede elime geçti. Böyle özellikleri olan bir kart için bence müthiş bir fiyat. Sanırım artık elimden düşmeyecek mikrodenetleyicilerin  başında ESP8266 geliyor.

Kartın şeması aşağı yukarı şöyle;

Büyütmek için tıklayın...

Büyütmek için tıklayın…

Aşağı yukarı diyorum çünkü bendeki kartta TX0 ucuna ekstra bir led bağlı ve CH340 yerine CP2102 bulunmakta, diğer bütün bağlantılar aynı.

Kartta bulunan 32Mbit flashın avantajı daha büyük projelerin derlenip bu karta yüklenmesine izin vermesi.

Gelelim bu kartı nasıl programlayacağımıza. ESP8266 için 4 farklı programlama seçeneği mevcut;

1- AT komutlarıyla: AT komutlarıyla programlayabilmek için ESP içerisinde AT firmware bulunması gerekir. Bu firmwarelerden en stabili şudur.

2-LUA Programlama:  LUA ile programlayabilmek için ESP8266 içerisinde nodemcu firmware yüklü olması gerekmektedir. Bu firmware aracılığı ile LUA ile yazılmış programlar ESP8266 tarafından yorumlanmaktadır. NodeMCU kartını LUA ile programlamak isteyenler buradan devam edebilirler.

3-Arduino IDE:  Arduino ide ile programlanacaksa içerisinde hiç bir şey yüklü olmasına gerek yok. Sadece Arduino ide üzerinde gerekli yüklemelerin yapılması gerekiyor. Bunun için biraz googlellamak yeterli. Burada bilinmesi gereken şu; arduino ile programlandığında ESP8266 içerisindeki yüklü firmware siliniyor. Daha sonra AT veya Lua modunda kullanmak isterseniz firmware yüklemeniz gerekir.

4- MicroPython: ESP8266’yı micropython ile programlamak için, içerisine micropython firmware yüklemek gerekiyor. Micropython mikrodenetleyici dünyasında hızla gelişen bir programlama dili. Yakında kendisini iyiden iyiye hissettirecektir. MicroPython -ESP8266 ile ilgili detaylaraburadan ulaşabilirsiniz.

Bence AT komutlarıyla uğraşmak hamallıktan başka bişey değil.  ESP8266 unutmayalım ki bir mikrodenetleyici ve onu kullanmak için başka bir mikrodenetleyici kullanmak bana ters 🙂

ESP8266 mikrodenetleyicisinin özellikleri aşağıdaki tabloda özet olarak verilmiş.
Adsız

ESP8266 üzerinde bir adet 10bit ADC girişi de mevcut. Bu sayede dışarıdan herhangi bir analog veriyi de algılatabiliyoruz. Ayrıca dahili olarak ESP8266’nın besleme gerilimi de okunabiliyor ve bu sayede ADC ölçümlerimizi VCC’ye göre kalibre ederek daha stabil hale getirebiliriz.

Ben ESP8266’yı C programlama diline olan sevgimden dolayı Arduino IDE ile programlamaya karar verdim. Arduino bugüne kadar hep uzak durduğum bir platformdu. Bundan sonra da uzak duracağım çünkü  herşeyin bu kadar basitçe yapılabilmesi bana ters:) Şaka bir yana , hazır fonksiyonların getirmiş olduğu basitlik tabiki arka planda pek çok şeyden taviz vermemizi de neden oluyor. Örneğin bir pinin on/off yapma hızının karşılaştırıldığı bir videoyu şuradan izleyebilirsiniz. LUA ile programlamak ta oldukça kolay olmasına rağmen süslü parantezlerin yerini malesef hiç birşey tutmuyor gönülde 🙂

ESP8266’yı arduino ile programlayabilmek için öncelikle buradan  ARDUINO IDE’yi indirip kurmamız gerekiyor. Daha sonra;

  • Arduino’yu başlatıyoruz ve Dosya–>Tercihler seçeneğini bulup tercihler penceresini açıyoruz.
  • Ayarlar sekmesindeki “Ek devre Kartları Yöneticisi URL’leri” yazan kısıma aşağıdaki URL’yi kopyalayıp yapıştırıyoruz.  http://arduino.esp8266.com/stable/package_esp8266com_index.json  Başka ekstra kartlar da kullanılacaksa aralarına virgül koyarak birden fazla kart yöneticisi URL’si eklenebilir.
  • Araçlar–>Kart–> Kart Yöneticisi seçilerek  ESP8266 araması yaptırılır ve çıkan “esp8266 by ESP8266 community” seçeneğinin üzerine gelinerek yüklenir.
  • Araçlar–>Kart yolundan hangi kartı kullanıyorsak onu seçeriz. (Generic ESP8266, Nodemcu v1.0 vs.)

Bu işlemlerden sonra programlama yapmaya hazırız.

En basitinden bir web server uygulaması aşağıdaki gibidir:

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

const char* ssid = "........";
const char* password = "........";

ESP8266WebServer server(80);

int led = D1;

void yak()
{
digitalWrite(led,1);
server.send(200, "text/html", "<html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><h1>Mikrodunya</h1> <p>Led Yanıyor</p> <a href=\"/yak\"> Yak </a> <br> <a href=\"/sondur\"> Söndür </a> <br> <a href=\"/\"> Sayfayı Yenile </a> </html>");
}

void sondur()
{
digitalWrite(led,0);
server.send(200, "text/html", "<html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><h1>Mikrodunya</h1> <p>Led Sönük</p> <a href=\"/yak\"> Yak </a> <br> <a href=\"/sondur\"> Söndür </a> <br> <a href=\"/\"> Sayfayı Yenile </a> </html>");
}

void yenile()
{
int durum=digitalRead(led);
String veri="<html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><h1>Mikrodunya</h1>";
veri+="<p>";
veri+=(durum)?"Led Yanıyor</p>":"Led Sönük</p>";
veri+="<a href=\"/yak\"> Yak </a> <br> <a href=\"/sondur\"> Söndür </a> <br> <a href=\"/\"> Sayfayı Yenile </a> </html>";
server.send(200, "text/html",veri);
}

void setup(void){
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");

// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

server.on("/yak", yak);
server.on("/sondur", sondur);
server.on("/", yenile);

server.begin();
Serial.println("HTTP server started");
}

void loop(void){
server.handleClient();
}

Bu kodda dikkat edilecek nokta kodun başında tanımlanan ssid yazan yere kendi routerımızın Wifi ismini tırnak içerisinde yazmamız,  password  yazan yere ise şifremizi tırnak içerisinde yazmamız gerektiğidir. Kodu derleyip karta yükledikten sonra Arduino IDE’nin sağ üst köşesinde bulunan seri port ekranımızı açarak  kartın almış olduğu IP adresini görebilirsiniz. Daha sonra aşağıdaki resimde gösterdiğim gibi, bu IP adresini herhangi bir web browser’ın url çubuğuna girerek cihazımıza ulaşabiliriz.

Büyütmek için tıklayın...

Büyütmek için tıklayın…

Buradaki örneğimizde nodemcu’nun D1 pnine bağlı bir ledi aynı ağdaki bir cihaz  üzerindeki web browser aracılığıyla  yakıp söndürdük. İstenilirse kartımız, routerdan port yönlendirme yapılarak dünyaya açılabilir. Bundan sonrası web sayfası hazırlama bilgimize kalıyor. HTML, CSS, PHP bilgilerinizi kullanarak mükemmel arayüzler hazırlayıp, bu web server ile  dünyanın diğer ucundan evinizdeki veya iş yerinizdeki cihazları açıp kapayabilir, istediğiniz veriyi istediğiniz noktaya ulaştırabilirsiniz.  İstenilirse de mobil bir uygulama hazırlayıp kartımızı telefonumuzdan veya tabletimizden yönetebiliriz.

Umarım yararlı bir yazı olmuştur.

İyi çalışmalar.

yorum
  1. Emrah İŞSEVER dedi ki:

    Hocam, emeğinize sağlık. Çok kısa ve net bir doküman olmuş. Paylaştım. Görüşmek üzere

  2. Mesut dedi ki:

    Merhaba böyle örnekleri çok inceledim şöyle bir sıkıntı var nodemccu bağlanmak ip adresinde aynı ag üzerinden kolay ve anlamsiz ayni odadaysak ne anlami kaldi ama firebase nodemcu ya eklemek gibi uygulamaları gerçek bir uygulama yapmak zor firebase üzerinden ip adresi aramadan dünyanın bir ucundan bağlanmak çok kolay elinizde böyle örnekler var mi

    • mikrodunya dedi ki:

      Bu tarz bağlantılar kurmak kolay olabilir ama anlamsiz demek abartı olur. Zaten başlıkta belirttiğim gibi bu örnek basit bir uygulama. Ayrıca herhangi bir ağa bağlanıp ip alabilen bir cihaz çok kolay bir şekilde modem üzerinden internete açılıp dünya üzerinden kontrol edilebilir. Yani aynı oda diye bir durum söz konusu değil. Bunu yapabilmek için tek bilinmesi gereken şey modemin almış olduğu unique IP adresidir. Eğer sabit IP hizmetiniz varsa bu ip hiç değişmez ve heryerden istediğiniz zaman cihazınıza bağlanabilirsiniz. Buradaki uygulama eğer sana çok basit geldiyse ve mantığı kavradıysan firebase uygulaması yapmak ta senin için basit olmalı. Elimde yaptığım pek çok uygulama var ama hazır kod paylaşma taraftarı değilim. Çünkü hazır paylaşılan şeyleri insanlar gördükten bir süre sonra kolay olarak adlandırıyor. Şimdi firebase uygulamasını burada paylaşırsam o da size kolay gelir eminim.
      İyi çalışmalar.

      • mesut dedi ki:

        merhaba 29 agustos 2017.07:58 yazı için sizden özürdilerim bir konu hakkında arıştırma yaparken yazımı okudum sizin gibi kişilerin bir emek harcadığını ve en küçük bir yazının bile saygı duyulmasının geriktigini düşünüyorum.
        NodeMcu ve Basit bir Uygulama. yazını için teşekkür ederim.

  3. Can dedi ki:

    Merhabalar, yazınız için çok teşekkürler.
    Yazınızda bahsettiğiniz satın aldığınız NodeMCU ‘nun aliexpress linkini paylaşırmısınız ?

    Teşekkürler.

  4. Uğur dedi ki:

    Hocam merhabalar kolay gelsin. Bu uygulamada hazırlanan web sayfaları html den farklı bir alt yapıya müsait değil diye biliyorum. PHP komutlarının arka planda çalışmayacağını düşünüyorum. J serisi Pic ile yaptığım bir uygulamada admin panel yapmak için javascripten faydalandım. Tabi burada, “elektronik+gömülü sistem yazılımı+web page” hepsini harmanlamak zor işler ve uğraşmanız çok güzel. Kolay gelsin, Başarılar.

    • mikrodunya dedi ki:

      Merhaba.
      Her türlü web arayüzünü istediğiniz platformu kullanarak hazırlayabilirsiniz. Java da php de çalışıyor.

      • Uğur dedi ki:

        Hocam merhaba. Yani nodeMCU da php interpreter var mı? Eminmi siniz? Kolay gelsin.

      • mikrodunya dedi ki:

        Merhaba.
        ESP8266 şu anda bir php intewrpreter a sahip değil fakat javascript için yazılmış olan bir interpreter mevcut. Ben daha çok php ile hazırlanmış bir arayüzden esp8266’yı post ve get metodlarıyla kontrol etmeyi kast ettiğinizi düşünerek o şekilde cevap verdim.
        Saygılar.

  5. tarık yağız dedi ki:

    merhaba
    bende de bu 8266 var usbye bağladığımda programı atıp çalıştırıyorum fakat usb yi çıkartıp vinden normal 5 v gerilim verdiğimde kart çalışmıyorve kendini resetliyor sanırım. bu neden olabilir ve ne yapmamız gerekli
    bunu sürekli pc de tutmamızmı gerekli
    lütfen yardımcı olun kafayı yicem

    • mikrodunya dedi ki:

      Harici 5v ile çalışmaması için normalde bir sebep yok. Sorununuzu video olarak bana ulaştırırsanız çözüm bulmamız daha kolay olur.

  6. mehmet dedi ki:

    hocam esp8266-01 de deniyorum yazılımı yükledim internet sayfası da browserda açılıyor fakat yak/sondür linklerine tıklıyorum fakat led’i yakamadım

  7. ugurk dedi ki:

    herkese selamlar
    esp 12 e ile dıs agadan 1 den fazla cihaz kontrolu nasıl yapılıyor orneklerle acıklayabilirmisiniz.

Yorum bırakın