Login

Blog

NodeMCU Nedir ve Nasıl Kullanılır

NodeMCU - Bir Şeyleri WiFi İle Kolayca Bağlayın

NodeMCU'nun alt-metninde "kolay şekilde bağlanın" mesajı vardır. Evet kesinlikle mesajda olduğu gibidir bu iş. Küçük cihazların iletişimi şaşırtacak derecede kolaydır.

NodeMCU öğrenme süreci boyunca öğrendiklerimi bu yazıyla metine çevirmiş olacağım. İyice bakacak olursanız okuyacağınız bu yazı, NodeMCU sitesini temel almaktadır. Oradaki anlatılanlara, mevcut bilgilerimi de katarak daha anlaşılır hale getirdim.

Başlık Yapısı

  • NodeMCU Nedir?
  • NodeMCU Özellikleri Nelerdir?
  • Ardinuno Benzeri Donanımsal G/Ç
  • Peki Neden Arduino Değil de NodeMCU?
  • NodeJS Tarzında Ağ Arabirimi
  • Düşük Maliyetli WI-FI
  • Geliştirme Teçhizatı/Kiti
  • NodeMCU Flasher Nedir? Ne İçin Kullanılır? (Yeni 10.08.2017)
  • NodeMCU Firmware Nedir? Ne İçin Kullanılır? (Yeni 10.08.2017)
  • NodeMCU Nasıl Güncellenir? (Yeni 10.08.2017)
  • Lua Dilini Kullanmaksızın Arduino IDE ile NodeMCU Kodlamak (Yeni 10.08.2017)
  • LoLin ve Amica Nedir. Farkları Var Mıdır?
  • NodeMCU Kod Örnekleri

NodeMCU Nedir?

NodeMCU; madeni paradan biraz daha büyük boyutta, minik bir elektronik devredir. Açık kaynaktır, ucuzdur ve yeteneklidir.

Düşük gerilimli enerjiyle çalışır. Üzerinde çok sayıda bağlantı noktaları vardır. Bu bağlantı noktalarını kullanarak bağlayacağınız başka elektonik bileşenleri yönetebilirsiniz. Barındırığı WiFi sayesinde kolayca IOT yani internet şeyleri olarak bilinen cihazlar yapmanıza olanak sağlar.

HTTP kütüphaneleri sayesinde web istemleri yapabilirsiniz veya web sunucusu çalıştırabilirsiniz. Bu sayede internet üzerinden bu cihazla iletişime geçebilirsiniz. Uzaktan bir şeyleri açabilir veya kapatabilirsiniz.

Programlama dili olarak Lua betiği yani scripti kullanır. Buna rağmen yine de; Arduino IDE ve Arduino'nun kullandığı dille de programlanabilir. USB kablosuyla bilgisayara kolayca bağlanır, programlanabilir ve veri iletişim kurulabilir.

 

NodeMCU Özellikleri Nelerdir?

Açık kaynaktır demiştim. Ayrıca sürekli etkileşim halindedir. Programlanabilirdir, düşük maliyetli ve basittir. Ayrıca akıllı bir cihazdır ve WI-FI bağlantıya yani kablosuz bağlantıya ve kullanıma hazır gelir.

 

Ardinuno Benzeri Donanımsal G/Ç

NodeMCU, ayarlayabileceğiniz ve düzenleyebileceğiniz gelişmiş bir donanımsal G/Ç arabirimine sahiptir. Yani donanımsal bir girdi-çıktı APIye sahiptir. Bahsi geçen bu API kullanmak için çok çaba sarf etmenize gerek kalmaz. Kod yazım şekli Arduino cihazlarda olduğu gibidir. Yani o cihazlardaki yapıya çok benzerdir. Fakat NodeMCU, Arduino cihazlara nazaran daha etkileşimlidir ve bunu da Lua betikleriyle yapar.

 

Peki Neden Arduino Değil de NodeMCU?

Öncelikle NodeMCU'ya eş-değerdeki Arduino'larda WiFi mevcut değil. Bu tür Arduino'lara WiFi yeteneği kazandırmak için ek olarak WiFi modülü almak gerekiyor. Sonra da kod yazarak modülle iletişim kurmanız gerekiyor. Gördüğünüz gibi hem modül almanız gerekiyor hem de iletişim kurmak için fazladan kod yazmanız gerekiyor. Bu ise IOT yani internet şeyleri kavramına anlamsız bir yük.

Neyse, diyelim ki; WiFi modüllü minik Arduiono'lar üretildi, ki böyle cihazlar yok değil. Fakat NodeMCU'ya oranla pahalılar!

Sonuç olarak; WiFi, iletişim, internet şeyleri, boyut ve maliyet açısından NodeMCU en iyi seçenek!

 

NodeJS Tarzında Ağ Arabirimi

Olay-Tabanlı API sayesinde, geliştiriciler ağ uygulamaları NodeJS tarzıyla kodlarlar ve bu kodlar sadece 5x5mm boyutundaki MCU mikro-kontrolcü üzerinde çalışır.

Olay-Tabanlıyı biraz daha açayım. JavaScript dilini ve jQuery gibi araçları kullananlar daha iyi anlayacaktır. Bir olay olduğunda; “bu çalıştırılsın” diye tanımladığınız fonksiyon çağrılır ve çalıştırılır.

Mesela HTML dokümanı hazır olduğunda aşağıda bulunan kodun çalıştırılması gibi;

jQuery(document).ready (
   fonksiyon(){
      console.log (“doküman hazır”);
   }
);

Düşük Maliyetli WI-FI

MCU ESP8266 adında ve cüzi fiyatlardaki mikro-kontrolcü içerir ve bu mikro-kontrolcü bir şeyler geliştirmeyi çok çok kolaylaştırır. NodeMCU; IOT yani internet şeyleri olarak anılan cihazlar yapmak için en iyi ve en ucuz seçenektir.

 

Geliştirme Teçhizatı/Kiti

ESP8266 mikro-kontrolcüye sahip demiştim. Bu sayede NodeMCU; GPIO, PMW, IIC, 1-Wire ve ADC gibi tüm teknolojileri, küçük boyutlardaki bünyesinde barındırır ve sunar. Ayrıca NodeMCU firmware ile yani yerleşik yazılım ile gücüne güç katılabilir.

Firmware yani yerleşik yazılımı da şöyle açayım. NodeMCU ile geliştirme yapmak isteyenler LUA betikleriyle kod yazarlar. Ayrıca yazılan bu kod NodeMCU cihazına bir takım şeyler yaptırmak adına üst katmanda firmware yani yerleşik yazılımla birlikte çalışır.

Bu yerleşik yazılım sürümleri yenilendikçe veya siz geliştirdikçe, NodeMCU cihazının yapabildikleri de genişler.

 

NodeMCU Photograph 1

USB-TTL çeviriciye sahiptir ve Tak&Çalıştır'a hazırdır.

NodeMCU Photograph 2

10 adet GPIO bağlantıya sahiptir ve her bağlantı PWM, I2C ve 1-wire olarak kullanılabilir.

NodeMCU Photograph 3

FCC sertifikalı WI-FI birimi vardır ve devre-kartı üzerinde anten mevcuttur.

USB-TTL çevirici kısmını biraz açayım. Eğer bu çeviri olmazsa bu tür cihazları bilgisayara USB ile direkt bağlayamazsınız ve programlayamazsınız. Bilgisayar ile iletişim kuramazsınız.

Bunları yapabilmek için USB-TTL çevirici ek modül almanız gerekir. Genelde bu modüller FTDI işlemciler içerdiği için FTDI modülü olarak anılır. Teknik olarak TTL-USB çeviricidir aslında. Çok pahalı değillerdir.

Bazı minik Arduino modellerinde bulunmaz. NodeMCU'da vardır.

 

NodeMCU Flasher Nedir? Ne İçin Kullanılır?

NodeMCU'yu güncellemek için kullanılan araçlara Flasher denir. Daha iyi anlaşılması için bilgisayarın BIOS güncellemesi gibidir diyebilirim. Yani NodeMCU içerisindeki temel ve minik yazılımın güncellemesi NodeMCU Flasher ile yapılır.

Flasher'ı indirmek isterseniz eğer 32 bit sistem için buradan indirin. 64 bit sistem için ise buradan indirin.

 

NodeMCU Firmware Nedir? Ne İçin Kullanılır?

Üst başlıkta Flasher'dan bahsettim. Bu araç NodeMCU içindeki temel ve minik yazılımı günceller dedim. İşte bu güncellenen minik yazılım ise NodeMCU Firmware olmaktadır. Yani Flasher, NodeMCU ile irtibata geçip Firmware'yi içerisine yazar ve böylece NodeMCU içerisindeki firmware güncellenmiş yani değişmiş olur.

NodeMCU Firmware'yi buradan indirebilirsiniz. Eskiden GitHub üzerinden indirilirdi. Şimdi ise başka bir site üzerinden kişiselleştirilip indirebiliyor. Mesela NodeMCU'nuzda WebSocket işlemi hiç yapmayacaksanız Firmware oluşturma sayfasında bunun kutucuğunu iptal ederek firmware'nize WebSocket'i hiç katmayarak firmware boyutunu düşürebiliyorsunuz. Böylece NodeMCU içerisinde kendi yazacağınız kodlarınız için daha fazla alan kalmış oluyor.

Panik yapmayın, hiç kutucuklarla oymamadan Start Your Build düğmesine tıklayıp firmwarenizi oluşturun. Firmware'yi indirebilmeniz için size eposta atılacaktır. Bu temel firmware hayli hayli işlerinizi görecektir.

 

NodeMCU Nasıl Güncellenir?

İşlem sırası basittir.

  • Öncelikle Flasher başlığı altından Flasher'ı indirin
  • Firmware başlığı altından Firmware'yi indirin.
  • NodeMCU'yu USB kablosuyla bilgisayarınıza bağlayın
  • Flasher'ı çalıştırın ve Operation isimli ilk sekmede NodeMCU bağlı olan COM portunu seçin
  • Config isimli ikinci sekmede, INTERNAL://NODEMCU yazan ilk satırın yanında bulunan dişli/çark simgesine tıklayın ve indirdiğiniz firmware dosyasını bulup seçin
  • İlk sekmeye yani Operation'a gerip dönüp Flash düğmesine basın ve tamamlanana kadar hiç bir şey yapmayın, NodeMCU bağlantısını kesmeyin.
  • Tamamlandığında Flasher size bunu bildirecek. Tamamlandıktan sonra NodeMCU'yu istediğiniz gibi kullanabilirsiniz.

Ek Bilgi:

Flasher'ın Log isimli sekmesinde yapılan işlemleri ve hata mesajlarını görebilirsiniz.

Flasher'ın Advanced isimli sekmesinde NodeMCU'nun bazı ayarlarını değiştirebilirsiniz. Tabi bunu yapabilmeniz için elinizdeki NodeMCU'yu iyi tanımanız ve donanımsal özelliklerini bilmeniz gerekiyor. Tecrübeniz artana kadar bu kısma uğramayabilirsiniz.

Flasher'ın About isimli sekmesi tamamen Flasher programı ve yazarı hakkında bilgi vermektedir.

 

Lua Dilini Kullanmaksızın Arduino IDE ile NodeMCU Kodlamak 

Öncelike böyle bir şeye neden ihtiyaç olsun onu anlatayım. C/C++ ve türevi diller ve bu türdeki dil yapılarına daha aşina olmaktayız. Tamam Lua betik dili de yaygın kullanılan bir dildir ama C/C++ türevleri daha baskındır. Bu sebeple baştan Lua öğrenmek ve dil yapısını öğrenmekle vakit kaybetmek yerine C/C++ ve Arduino IDE kullanarak NodeMCU geliştirmek daha akılcı olacaktır. Lua biliyorsanız bu başlık pek sizlik olmayabilir.

  • Eğer Arduino IDE sisteminizde kurulu değilse bu sayfaya uğrayıp, Download the Arduino IDE başlığı altında sisteminize uygun Arduino IDE'yi indirin ve sonrasında kurun.
  • Arduino IDE'yi çalıştırın. Türkçe arabirim ille kullandığınızı varsayarak devam ediyorum;
  • Ana menüde sırasıyla tıklayın; Dosya > Tercihler
  • Gelen pencerenin Ayarlar isimli sekmesinde Ek Devre Kartları Yöneticisi URL'leri, ayrıca kutucuğu ve en sağında simgesi var. Simgeye tıklayın
  • Bir pencere daha açılacak. Bu penceredeki yazı alanında bir metin yoksa şu URL'yi http://arduino.esp8266.com/stable/package_esp8266com_index.json hemen yapıştırın eğer başka URLler varsa yeni satıra oluşturun yani enter tuşlayıp yapıştırın.
  • Tüm pencerelerde Tamam düğmelerine tıklayıp Arduino IDE'nin ana penceresine ulaşın
  • Ana menüde sırasıyla tıklayın; Araçlar > Kart:... > Kart Yöneticisi
  • Açılan pencerede esp8266 ile arama yapın ve sonuçlar arasında esp8266 by ESP8266 Community olanı kurun ve inme işlemleri için bekleyin.
  • İşlem tamamlandığında Kart Yöneticisi penceresini kapatın
  • Arduino IDE artık NodeMCU için hazır

NodeMCU'yu bilgisayara bağlamak ve kod yüklemek;

  • NodeMCU'yu USB kablosuyla bilgisayarınıza bağlayın
  • Ana menüde sırasıyla tıklayın; Araçlar > Kart:... > NodeMCU 0.9 (ESP-12 Module) - Not: Farklı sürümde NodeMCU kullanıyorsanız ona uygun bir seçim yapın
  • Ana menüde sırasıyla tıklayın; Araçlar > Port > COM X - Not: NodeMCU'yu hangi Com portuna bağladıysanız listede onu seçin
  • Artık hazır, kodlarınızı yazıp NodeMCU'ya gönderebilirsiniz. Bu aşamadan sonrası Arduino IDE kullanma becerisinise girmektedir ve bambaşka bir yazı gerekir bunun için.

Ek bilgi:

Kodu yazdıktan sonra yükleme işlemini hızlandırmak için yükleme hızı adım adım arttırılabilir. Bunun için ana menüde sırasıyla tıklayın; Araçlar > Upload Speed > XXX

Örnek Kod:

// Bu kod ile NodeMCU'nun D1 ayağına bağlanan bir adet LED,
// yanıp, söndürülecek.

// NodeMCU'nun 1 numaralı pini yani D1, LED yakmak için kullanılacak
#define LED_PIN 1 // =D1

// setup fonksiyonu her reset yada ilk çalıştırma sonrası bir kez çağrılır
// burada hazırlıklar yapılır.
void setup() {
  // 1 nolu pin'i 5 volt çıktı yapacak şekilde ayarla
  pinMode(LED_PIN, OUTPUT);
}

// setup fonksiyonun tamamlandıktan sonra loop fonksiyonu
// elektrik bağlantısı kesilene kadar sonsuza kadar çağrılır
void loop() {
  digitalWrite(LED_PIN, HIGH);   // LED'i yak yani 1 numaralı pin'e 5 volt ver
  delay(1000);              // biraz bekle
  digitalWrite(LED_PIN, LOW);    // LED'i söndür yani 1 numaralı pin'e 0 volt ver
  delay(1000);              // biraz bekle
}

 

LoLin ve Amica Nedir. Farkları Var Mıdır?

Aslında bu isimler üretici isimleridir. Hatta üç ana üretici vardır diyebilirim. Bunlar da sırasıyla; Amica, DOIT/SmartArduino ve LoLin/WeMos.

İlk nesil, ayrıca v0.9 ve v1 sürüm NodeMCU cihazlar ebat olarak genişlerdi ve Amica tarafından üretilmişti.

Sonrasında gelen sürümler ise farklı üreticiler tarafından üretildi. Hatta aynı sürümdeki NodeMCU cihazların ebatları, farklı üreticiler sebebiyle farklı olabiliyor.

NodeMCU Kod Örnekleri

Kablosuz ağa bağlantı:

print(wifi.sta.getip())
--nil
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
print(wifi.sta.getip())
--192.168.18.110

Arduino benzeri girdi-çıktı:

pin = 1
gpio.mode(pin,gpio.OUTPUT)
gpio.write(pin,gpio.HIGH)
gpio.mode(pin,gpio.INPUT)
print(gpio.read(pin))

HTTP istemcisi:

-- A simple http client
conn=net.createConnection(net.TCP, false) 
conn:on("receive", function(conn, pl) print(pl) end)
conn:connect(80,"121.41.33.127")
conn:send("GET / HTTP/1.1\r\nHost: www.nodemcu.com\r\n"
    .."Connection: keep-alive\r\nAccept: */*\r\n\r\n")

HTTP sunucusu:

-- a simple http server
srv=net.createServer(net.TCP) 
srv:listen(80,function(conn) 
    conn:on("receive",function(conn,payload) 
    print(payload) 
    conn:send("<h1> Hello, NodeMcu.</h1>")
    end) 
end)

PWM:

function led(r,g,b) 
    pwm.setduty(1,r) 
    pwm.setduty(2,g) 
    pwm.setduty(3,b) 
end
pwm.setup(1,500,512) 
pwm.setup(2,500,512) 
pwm.setup(3,500,512)
pwm.start(1) 
pwm.start(2) 
pwm.start(3)
led(512,0,0) -- red
led(0,0,512) -- blue

Göz kırpan LED:

lighton=0
tmr.alarm(0,1000,1,function()
if lighton==0 then 
    lighton=1 
    led(512,512,512) 
    -- 512/1024, 50% duty cycle
else 
    lighton=0 
    led(0,0,0) 
end 
end)

 

Etiketler