ESP8266 Wi-Fi Modül İle Web Server Ve Röle Kontrolü Nasıl Yapılır?

ESP8266 'nın kendisi ve nasıl kullanılacağı hakkında detaylı bilgiyi daha önce vermiştim. Bu yazıda ise uygulamalı örneklere geçiyoruz.

Photo by Webaroo.com.au on Unsplash

Amacımız ESP8266 modül ve NodeMCU firmware’i kullanarak modül içerisinde oluşturacağımız bir sunucu uygulaması oluşturmak ve komutları bu uygulama vasıtasıyla ileterek I/O kontrolünü, dolayısıyla da bir röle kontrolünü sağlayabilmek.

Daha önceki yazımda da belirttiğim gibi NodeMCU için bulut tabanlı derleyici vasıtasıyla ihtiyaçlarımıza özel bir build ‘i edinerek işleri hızlandırabiliyorduk. Aşağıda bu amaçla https://nodemcu-build.com/ adresindeki derleyiciye eriştikten sonra modül seçiminin yapıldığı kısmın görselini paylaşıyorum:

Resimde de göreceğiniz gibi varsayılan olarak zaten lazım olacak bir çok modül seçilmiş olarak geliyor. Ben ekstra olarak sarı renkle işaretlediğim ADC modülünü de dahil ettim. Bu modül ile daha sonraki örneklerde sensörlerden veri okumayı hedefliyorum. Bulut derleyicide build talebini başlattıktan sonra işlemin başladığına dair bir e-posta alıyorsunuz ve ardından aşağıdaki gibi bir e-posta daha alıyorsunuz:

Gördüğünüz gibi integer ve float olmak üzere 2 farklı build dosyasını indirebiliyoruz ama bize bunlardan sadece 1 tanesi lazım. Dolayısıyla bir tercih yapmak durumundasınız. Buradaki temel fark adından da anlaşılacağı üzere float değerlerin desteklenip desteklenmeyeceğiyle alakalı ama daha da önemlisi integer build diğerine göre çok daha hızlı çalışıyor. Ek olarak float destekli build’ler diskte daha fazla yer işgal ediyor. Benim tavsiyem küsüratlı rakamlarla işiniz yoksa integer’ı kullanmanız.

Integer build dosyamızı indirdikten sonraki işlemler için modülü bir süre boot modunda kullanacağız ama kullanmadan önce aşağıdaki gibi iletişimi sağlayacak olan USB-UART dönüştürücünün hangi COM portu kullandığını bulmalıyız:

Modülü boot moduna aldıktan sonra ilk iş olarak ESP8266 modülünün içerisinde varsayılan olarak gelen firmware’i temizliyoruz:

Modülü boot moduna aldınız, komutu da gönderdiniz ancak “Connecting…..” diye bekliyor mu? Gayet normal, reset tuşuna bastıktan sonra işlem devam edecektir.

Buradaki önemli noktalardan birisi baud rate parametresini mümkün mertebe düşük tutmamız gerektiği, aksi halde yazma işlemlerinde bazen sorun çıkabiliyor.

Ardından indirdiğimiz dosyayı benzer yöntemle modülün flash diskine yüklüyoruz:

Artık modülü boot modundan çıkartabiliriz.

Esplorer ‘ı açıp üst kısımdan ilgili COM portu seçtikten sonra “Open” butonuna basıyoruz ve ilk bağlantıyı kuruyoruz. Aşağıda göreceğiniz gibi (göremezseniz reset atmayı deneyin, arayüzden de yapabilirsiniz) içerisine yüklediğimiz NodeMCU firmware ile ilgili bazı bilgiler görüyoruz fakat bir sorun var gibi: Modül bize init.lua dosyasını bulamıyorum diye hata gösteriyor. Buradan da anlayacağınız gibi ilk komutları çalıştırmak üzere açılışta bu dosyayı arıyor diskte..

Üst menü yardımıyla yeni bir dosya oluşturup ilk adım olarak ESP8266 modül ile Wi-Fi yayını yapmayı öğreniyoruz. Lua Script’in sadeliği ve NodeMCU ‘nun modüler tasarımı sayesinde gördüğünüz gibi gayet kolay:

Sol kısımda kodumuzu yazıp menü yardımıyla dosyayı kaydettikten sonra Esplorer kodları aynı dosya ismiyle ESP modüle de kaydetmiş oluyor. Her kaydetme işleminde bu tekrarlanıyor.

Burada dikkat edilmesi gereken ise, dosya yüklendikten hemen sonra çalıştırılmış olacağı için koddaki işlemler tekrar tekrar yapılmış oluyor!

Bilgisayarımızdan ulaşılabilir kablosuz bağlantı seçeneklerine baktığımızda ESP modül için başlattığımız yayını yukarıdaki resimde göreceğiniz üzere hemen görebiliyoruz.

Şimdi kodumuzu biraz daha geliştirecek olursak röle kontrolü için gerekli I/O ayarlarını yapmamız gerekiyor. Bunun için önce modül üzerindeki fiziksel pinlerin NodeMCU için ne anlama geldiğini bulmamız gerek. Biz bu çalışmamızda GPIO15 adlı pini kullanacağız, dokümantasyonda yer alan aşağıdaki tabloya bakarak ihtiyacımız olan bilgiyi hemen ediniyoruz:

I/O kontrolü için gerekli kod düzenlemesini yaptıktan sonra tekrar kaydediyoruz ve son hali aşağıdaki gibi oluyor:

Tabi ki bununla da bitmedi. Komut iletebilmemiz için modülün belli bir port üzerinden dinleme yapıyor olması gerekiyor. Bunun için de web-server.lua adlı ikinci bir dosya oluşturuyoruz (dosyaların son halini yazının sonunda paylaşacağım) ve init.lua içerisinde bu dosyayı include ediyoruz. Bu dosya kaydetme işlemleri sırasında “out of memory” şeklinde bir hata görürseniz reset atmayı deneyin, düzelecektir. Modülün RAM’i çok kısıtlı olduğundan bazen böyle küçük sorunlar yaşanabiliyor.

Artık bilgisayarımızdan kablosuz ağ bağlantısı olarak ESP modülünün yayınına bağlanıp web tarayıcımızdan da adres satırına http://192.168.4.1 (NodeMCU firmware’nin belirlediği varsayılan IP, kod ile değiştirilebilir) yazdığımızda aşağıdaki gibi bir sayfayı görüyor olmamız gerekiyor:

Eriştiğimiz bu sayfa tamamen ESP modül tarafından dinamik olarak oluşturulmuş bir sayfa olarak karşımıza çıkıyor. Röle kontrolüne yönelik I/O pini kontrolü çalışır durumda mı diye test ediyoruz:

Diğer cihazlardan ESP modüle 80 portu üzerinden her istek yapıldığında aşağıdaki gibi debug amaçlı çıktıları görebiliyoruz:

Örneğimizi web uygulaması olarak çalışacak şekilde yapılandırdık fakat dilerseniz TCP/UDP protokolü kapsamında herhangi bir port ile, herhangi bir şekilde istek yapabilir ve cevap alabilirsiniz. Örneğin Android veya IOS tabanlı bir uygulamanızla 8888 gibi bir porta TCP istek yaparak da röleyi kontrol edebilirsiniz.

Kodlarımızın son hali aşağıdaki gibi:

init.lua
web-server.lua

Son olarak, unutmayın ki ESP modülün I/O pinleri en fazla 20mA civarında bir akımı kaldıracak düzeyde ve bir röleyi tetikleyebilmek için genelde daha fazlasına ihtiyaç var. Bu yüzden röle ile pin arasına ULN2004/8 gibi bir darlington array veya transistör + röle şeklinde bir aracı koymamız gerekiyor.

Kolay gelsin.

İstanbul‘da bir Yazılım ve Teknoloji Ar-Ge Mühendisi. Ürün, yazılım, sistem analisti ve tasarımcısı. http://www.zaferaltun.com/

İstanbul‘da bir Yazılım ve Teknoloji Ar-Ge Mühendisi. Ürün, yazılım, sistem analisti ve tasarımcısı. http://www.zaferaltun.com/