ESP8266, Lua ve Cep Telefonu

Ve evet beklenen gerçekleşti ve ESP8266 çipi için herkesin kullanabileceği bir yazılım arayüzü ve programlama dili kullanıcılara sunuldu. SDK gerçi daha önce çipin üreticisi olan Espressif Systems tarafından yayımlanmıştı ama çok da kullanılabilir değildi. Peter Jennings Lua script dilini kullanabilen bir firmware geliştirerek ESP8266 çipini bir kaç basamak yukarıya taşımayı başardı. İlk denemelerimde gayet kararlı ve güzel bir ortamın geliştiricilere sunulduğunu söylemek isterim. Bu IoT çalışmalarında oldukça kullanılacak bir çözüm olacağa benziyor. Daha önce Arduino kullanarak yaptığım örneği bu sefer başka hiç bir işlemci kullanmadan Lua ile ESP8266 üzerinde geliştireceğim. Sadece 5 dolarlık bir çip ile güzel bir IoT örneği yapmış olacağız. Çep telefonuna bir buttona basıldığında uyarı göndereceğiz.

Öneclikle Lua script dilini kullanabilmeniz için ESP8266 çipinin firmware’ini değiştirmemiz gerekiyor. Muhtemelen aldığınızda ESP8266 At komutlarını işleyen bir firmware ile gelecektir. ESP8266 firmware’ini yeniden yüklemek için nodemcu-flasher programına ihtiyacınız olacak. Bu programı işletim sisteminize göre aşağıdaki linklerden indirebilirsiniz.

ESP8266Flasher.exe for Win32

ESP8266Flasher.exe for Win64

ESP8266 çipine yeni Firmware yüklemek için dikkate edilmesi gereken bir husus daha var. Çipin GPIO0 bacağını GND ye çekmeniz gerekmekte. Çipile seri iletişim kurmak için daha önceki yazılarımda da belirttiğim 3.3v USB UART çeviriciyi kullanıyoruz. işte bağlantı resmi;

 

esp8266-reflash-firmware

 

Sarı yazı ilede belirtildiği gibi çipin GPIO0 pacağını GND ye sadece firmware atarken bağlıyoruz. Normal kullanımda GND ye çekmiyoruz.

Ortam ve devre bağlantısı hazır olduğuna göre ESP8266 Lua anlar hale getirebiliriz. USB UART çeviricinizi bilgisayara tanıtmışsanız bağladığınızda bir Com port oluştuğunu göreceksiniz. modencu-flasher programını açıp bu komportu seçin ve Flash(F) düğmesine basın

687474703a2f2f693635392e70686f746f6275636b65742e636f6d2f616c62756d732f75753331362f766f77737461722f4e6f64654d43552d466c61736865722d426567696e2e706e67

 

 

 

 

 

 

 

 

 

 

 

Flash yüklemesi tamamlandığında ESP8266 ile bağlantı kurmak için LuaLoader.zip programını yükleyin. Artık GPIO0 GND ye bağlı olmayacak.

LuaLoader programının görüntüsü aşağıdaki gibi

 

LuaLoader

 

 

Bu program çipile oynamanız için çok güzel bir araç. Tüm detaylarını anlatmıyorum. Vakit ayırıp kurcalayın derim.

Çok kabaca çipin GPIO2 bacağını input yapmak ve oradaki akımı okumak için aşağıdaki komutları kullanıyoruz.

gpio.mode(4,gpio.INPUT,gpio.FLOAT)

gpio.read(4)

(GPIO2 için 4 kullanıyoruz. Pinlerin isimleri ve Lua da kullanılan rakamlar tutmuyor. Maping çizelgesi burada var)

Yada aynı pini Output olarak kullanmak istersek

gpio.mode(4,gpio.OUTPUT) 

gpio.write(4,gpio.HIGH)  -- GPIO2 3.3v oldu
gpio.write(4,gpio.LOW)  -- GPIO2 0v oldu

 

 

Şimdi daha önceki yazımızda yaptığımız Cep telefonuna Push Notification yollama örneğini yapalım;

http://www.prowlapp.com/ sitesine uye olup bir API Key olusturuyorsunuz. IOS uygulamasını cep telefonunuza kuruyorsunuz.

Daha sonra aşağıdaki iki dosyayı bilgisayarınıza lua uzantısı ile kopyalayın. init.lua ESP8266 ilk olarak enerjilendirildiğinde otomatik olarak çalışır. Daha sonra init.lua dosyasındaki kod bir timer’ı her 4sn de bir ateşliyor. Bu ateşleme diğer dosyanın (interupt.lua) çalıştırılmasını sağlıyor.

init.lua

wifi.sta.autoconnect(1)
print("gnexlab")
gpio.mode(4,gpio.INPUT,gpio.FLOAT)
tmr.alarm(0,6000,1,function() dofile("interupt.lua") end)

 

interupt.lua 

function push(level)
conn = nil
conn = net.createConnection(net.TCP, 0)

conn:on("receive", function(conn, payload)
success = true
print(payload)
end)
conn:on("connection", function(conn, payload)
print('\nConnected')
conn:send("GET /publicapi/add?apikey=7b0fcbc142b12c30f474c4a5c8258b6e3d9f51ad&application=ESP8266&event=Button+pressed&priority=0 HTTP/1.1\r\n"
.."Host: prowl.weks.net\r\n"
.."Accept: */*\r\n"
.."User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
.."\r\n")
end)

-- when disconnected, let it be known
conn:on("disconnection", function(conn, payload) print('\nDisconnected') end)

conn:connect(80,'209.20.89.148')

tmr.delay(500000)

end

if gpio.read(4) == 0 then push(0) end

Bu iki dosyayı lua uzantılı olarak text dosyası formatında bilgisayarınıza yazdıktan sonra LuaLoader programındaki UploadFile buttonuna basarak bu iki dosayayı ESP8266 ya yükleyin.

Gelelim doanıma

esp8266_lua1_bb

 

 

Devreyi bu şekilde yapın ve çalıstırın Butona bastığınızda Cep telefonuna mesaj geldıgını göreceksiniz.

Uygulama alanları ile ilgili fikirlerinizi bekliyorum. En basitinden kapıya bağlayıp bir readröle kullanıp açıldığında cep telefonuna mesaj gelmesini sağlayabilirsiniz.

Bir çok sensör bağlamak mümkün. Iot Serüvenlerimiz Gnexlab da devam edecek.

 

 

Kaynaklar

16 thoughts on “ESP8266, Lua ve Cep Telefonu”

  1. Nuri bey, benden önce davranmışsınız 🙂 Tam da diğer arduino ile olan örnek çalışmanızın altına standalone olarak ta yapmıştım bu örneği yazacak iken bu konuyu gördüm.

    1. Deneyip tüm çözümleri test ediyoruz. Hepimiz bu yola doğru kayıyorsak demekki doğru yoldayız. Beyin fırtınası yaparak hayatlarımızı kolaylaştıracak uygulamalar geliştirelim. Yaptıklarınızı burada yayımlamak isterseniz size editör yetkisi verebilirim.

  2. Selamlar,
    maalesef MQTT client’ı çalıştırma aşamasında takıldım. Sunucuya bağlanabiliyor ama.. sanırım bir de LUA çalışmak gerekecek ;-( .. çok teşekkürler Nuri bey..

  3. Merhaba,

    Bu api KEY interup.lua dosyasına gömülecek. Bu api KEY in oluşturulduğu hesabın login olunulduğu uygulamaya, eğer pushbutton notification gerçekleşirse, uygulamaya uyarı olarak düşecek.

  4. arkadaşlar merhab,

    init ve interupt dosylarını lua loder ile esp ye gömüyorum, fakat “Missing field: Application is required.” gibi bir hata alıyorum. Bir fikriniz var mı?

  5. merhaba ben emre calıskan meslek lısesınde öğretmenım.
    sızden acıl yardım ıstıyorum bana esp8266 ıle yapılmıs hazır bır uygulama lazım
    nasıl nerden bulabılırım yardımcı olabılırmısnız.
    cok acıl donebılırmısınız bana….

    emre çalıskan
    5064161026

  6. merhaba,
    öncelikle çalışmalarınız cok güzel olmuş.Esp8266 modüle ilgili sizden destek alabilirmiyim.lua kod yazma kısmında oldukça zorlanıyorum.sizin calışmalar gayet başarılı

  7. basit bi uygulama yazmam gerekiyor.örnegin 192.168.1.14 ıp numarasından 80 numaralı portunu sürekli dinleyecek ben “led1” yazını gönderince led1 i yakacak.

  8. outpin=4 — Select right IO index !! Here is settings for GPIO2 (Lua build 20141219)

    srv=net.createServer(net.TCP) srv:listen(80,function(conn)
    conn:on(“receive”,function(conn,payload)
    –next row is for debugging output only
    print(payload)

    function ctrlpower()
    pwm.close(outpin)
    gpio.mode(outpin,gpio.OUTPUT)
    dotaz=string.sub(payload,kdesi[2]+1,#payload)
    if dotaz==”ON” then gpio.write(outpin,gpio.HIGH)return end
    if dotaz==”OFF” then gpio.write(outpin,gpio.LOW)return end
    if dotaz==”FLC” then pwm.setup(outpin,2,512)pwm.start(outpin)return end
    pwm.setup(outpin,1000,dotaz*10)
    pwm.start(outpin)
    end
    –parse position POST value from header
    kdesi={string.find(payload,”pwmi=”)}
    –If POST value exist, set LED power
    if kdesi[2]~=nil then ctrlpower()end

    conn:send(‘HTTP/1.1 200 OK\n\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘ESP8266\n’)
    conn:send(‘Sample GPIO output control\n’)
    conn:send(‘For Lua NodeMcu 0.9.2 build 20141219 only !!!\n’)
    conn:send(‘Tested with IE 11. and Chrome 39.\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘\n’)
    conn:send(‘ % of power\n’)
    conn:send(‘ HW blinker\n’)
    conn:send(‘\n’)
    conn:on(“sent”,function(conn) conn:close() end)
    end)
    end)

    bu şekide bir uygulama buldum ama bazı noktalarda takıldığım için kodun mantığını anlayamıyorum.Örnegin payload nedir ? ne işe yarıyor ?
    dotaz sadece değişken midir gibi ?

    1. payload http server a baglantı yapıldığında gelen bilgi program zaten bunu yazdırıyor.
      dotazda http request bilgisi icinden secilen bir kısım kod eksik galiba kdesi nedir anlasılmıyor.
      bu kodu buldugunuz yeri paylasırsanız oraya bakıp daha ıyı bılgı verebilirim

  9. Merhaba,
    Makalenizde belirttiğiniz adımlara uymuş olmama rağmen esp modülü ile iletişim kuramıyorum. Daha doğrusu firmware yükleniyor ama lua scriptini yükleyemiyorum. Firmware sürümü ile ilgili bir problemmidir, eğer öyle ise hangi sürümü seçmem gerektiğini nasıl belirleyebilirim?
    Ya da elimdeki modülün üzerindeki flash chip ile ilgili bir sorunmudur?
    Bir türlü işin içerisinden çıkamadım.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.