Login

Blog

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

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

NodeMCU'nun alt-metninde "Bir şeyleri kolayca bağlayı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.

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.

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