ESP8266 Wi-Fi Modül Nedir? Nasıl Kullanılır? Neler Yapabiliriz?

Zafer Altun
7 min readNov 22, 2019

--

Bu konu aslında çok geniş bir konu. Nadir bilgilerden ziyade daha çok Google’da biraz arama yaptığınızda kolay erişebileceğiniz fakat bir çok bilgi olduğu için yolunuzu kaybetmeden ilerleyebileceğiniz şekilde pratik bilgiler vermeye çalışacağım.

ESP8266–07S ile geliştirdiğim yedekli mekanizmaya sahip wi-fi kontrol ünitesi

ESP8266 her ne kadar modül adı olarak anılsa da aslında Espressif System tarafından geliştirilen, çeşiti Wi-Fi IoT modüllerin üzerinde yer alan ve karşımıza SoC (System-On-Chip) olarak çıkan çipin ta kendisi. İlk defa 2014 yılında 3. parti olarak AI-Thinker tarafından ESP8266–01 adıyla IoT modül haline getirildi. ESP8266–01 ‘den 14’e kadar çeşitli modeller mevcut ve bizzat 01, 03, 07 ve 12 modellerle ilgili irili ufaklı çeşitli tecrübelerim oldu. Bu çip için geliştirilmiş bir çok modül ve açık kaynak yazılım olmasına rağmen ben yazının devamında ESP8266–07S (S modeli endüstriyel standartlarda, hobi amaçlı olarak 07 modülü de tercih edilebilir) modülü ve NodeMCU Firmware’i ile devam edeceğim.

ESP8266–07S modülü, ortalama 3–4 $ ‘lık uygun maliyetinin yanı sıra;

  • 802.11 b/g/n Wi-Fi ve WEP/WPA-PSK/WPA2-PSK güvenlik protokolleri desteği
  • Düşük güç tüketimine sahip 32 Bit 80 Mhz işlemci (160 Mhz ‘e kadar çıkabilir)
  • 10-bit dahili ADC (Analog-to-Digital-Converter, 0–1 V aralığında)
  • 40KB RAM
  • 4MB flash disk
  • UART, GPIO, SPI, I2C, PWM desteği
  • 3–3.6V çalışma aralığı, ortalama 80mA güç tüketimi, uyku modunda 20uA
  • Sadece 17 x 16 x 3 mm ebatlarında

temel özellikleriyle ekstra bir mikroişlemciye dahi gerek duymadan bir çok şey yapabilmemize olanak tanıyor. Dahili TCP/IP stack’i kaynakların sadece %20'sini kullanıyor ve geri kalan kaynakları dilediğimiz gibi kullanabilmemize imkan veriyor.

ESP8266–07S dış görünüm ve pin şeması (arkadan görünüm)

Pin şemasından görüleceği üzere modül üzerinde 1 adet reset pini, 1 adet analog giriş pini, 2 adet UART bağlantı pinleri (TX ve RX) ve 9 adet genel amaçlı I/O pinleri bulunuyor. Tüm I/O pinlerini efektif olarak kullanabiliyoruz diyemem, bazı pinler firmware yükleme esnasında farklı amaçlarla kullanılabiliyor ama bu konulara daha sonra detaylı olarak değineceğiz. Özetlemek gerekirse tecrübelerime göre geriye istediğiniz gibi yönetebileceğiniz en fazla 6 adet I/O kalıyor ki bu sayı bir çok uygulama için yeterli aslında. Yeterli olmadığı durumlarda multiplexing, 1-wire, SPI/I2C ile harici kontrol mekanizmaları vs çözüm üretmenin bir sürü yolu var..

Bu modülün bence kötü yanlarından birisi çok stabil bir güç istemesi. Güçteki kayda değer herhangi bir dalgalanma ya beklenmeyen tepkiler vermesine ya da yeniden başlamasına sebep oluyor. Bu sebeple en az 3.3V 0.5A çıkış sağlayan düzgün bir regülatör ile besliyor olmanız çok önemli. Ayrıca stabiliteyi arttırmak için VCC pinini en fazla 0.5 inç mesafede 100nF decoupling kapasitör ile beslemenizi ve bazı pinleri belirli değerlerde pull-up ve pull-down dirençlerle kullanmanızı şiddetle tavsiye ediyor, aşağıda öneri olarak hazırladığım bir şemayı paylaşıyorum:

ESP8266 varsayılan olarak AT komut seti ile kullanılabilecek bir firmware ile geliyor fakat bu firmware ile çalışmak gerçekten çok can sıkıcı ve hatalarla dolu, garip garip durumlarla sık sık karşılaşıyorsunuz, yani stabil değil. Ayrıca varsayılan firmware’i kullanacağınız zaman bu modülü bir mikroişlemciyle birlikte kullanmak zorunda kalacaksınız, çünkü içerisindeki süreçleri yönetebileceğiniz bir kod parçası gömemiyorsunuz. Dolayısıyla mikroişlemci ve modül arasındaki data akışı için FIFO gibi kavramlarla boğuşmak zorunda kalıyorsunuz.

Onun yerine size hem çok büyük kolaylık, hem yetenekli hem de mikroişlemci ihtiyacını ortadan kaldıracak bir seçenek olan NodeMCU firmware’i öneriyorum.

NodeMCU, Lua script tabanlı geliştirim yapmanıza olanak tanıyan ve C ile geliştirilmiş açık kaynak bir firmware. Açık kaynak olduğu için kodu indirip gerçekten ne yaptığınızı biliyorsanız(!) istediğiniz yerlere müdahale de edebilirsiniz. Lua script’i ben ilk defa NodeMCU sayesinde tanımış ve kullanmıştım ama emin olun tanıştığınıza çok memnun olacaksınız. Syntax olarak Python’a benzemekle beraber hız olarak da memnun edici performans sergiliyor.

NodeMCU’nun güzel yanlarından birisi de modüler olması ve çeşitli amaçlarla kullanabileceğiniz bir yığın modüle sahip olması. Bu modülleri isterseniz yukarıda paylaştığım sitede veya burada bulabileceğiniz bulut derleyici ile tek tek de seçip bir build edinebiliyorsunuz. Edindiğiniz build’i modüle yüklemek için, yine siteden de erişebileceğiniz esptool gibi bir çok seçeneğiniz var. Ben yazının devamında esptool ile devam edeceğimi belirteyim.

Nasıl Kullanılır?

Baştan belirtmeliyim ki bu modülü efektif kullanmak biraz zahmetli. Birbirinden farklı bir çok araç kullanmak ve işlem yapmak zorunda kalıyorsunuz fakat aldığınız sonuca değiyor.

ESP8266–07 veya 07S modülü aldınız, firmware build’i de edindiniz ama bir şeye daha ihtiyacınız var: CP2102 USB-UART gibi bir dönüştürücüye.

CP2102 USB-UART Dönüştürücü

Bu dönüştürücü sayesinde USB portu üzerinden sanal bir COM port oluşuyor ve modül ile doğrudan seri iletişime geçebiliyorsunuz. Firmware yükleme, komut gönderimi, hata ayıklama vs ihtiyacımız olan ne varsa bu tip bir dönüştürücü sayesinde kolayca yapabiliyorsunuz. Bu bir opsiyon değil aslında, böyle bir dönüştürücü almak zorundasınız. Dönüştürücüye ilişkin driver’ı bilgisayarınıza kurduktan sonra Windows / Denetim Masası / Aygıt Yönetici’nde veya Linux kullanıcısıysanız;

$ dmesg | grep tty

gibi bir komutla seri portları listelemeniz ve ilgili dönüştürücüyle ilişkili olanı bulmanız gerekiyor. Bu port ismini (örneğin Windows için COM8, Linux için /dev/ttyUSB0 gibi) daha sonra firmware yükleme işlemi için kullanacağız.

Bir hatırlatma yapmam gerekirse ESP modülünüzün zarar görmemesi için dönüştürücüyü, üzerinde bulunan jumper vasıtasıyla 3.3V güç modunda kullanmanız gerekiyor.

Bir diğer ipucu olarak da eğer ESP modülünü bilgisayarınızdan aldığınız güç ile beslemiyorsanız modülün GND pini ile dönüştürücünün GND pinlerini birleştirmelisiniz, aksi taktirde iletişim kuramayacaksınız.

ESP modüle firmware yükleyebilmek için BOOT modunda başlatmak gerekiyor. Yukarıdaki şemayı dikkatli inceleyecek olursanız bunun için bir switch buton göreceksiniz. Bu anahtar, firmware yüklemesi yapılacağı zaman kapalı hale getirilerek modüle güç verilmesi gerekiyor, modül açıldıktan sonra butonu kaldırsanız bile tekrar başlatana kadar boot modunda kalmaya devam edecektir.

Artık yukarıdaki şemadaki gibi bir bağlantı yaptığınızı, USB-UART dönüştürücünüzü bilgisayarınıza ve ilgili pinlerle (TX ve RX) ESP modüle bağladığınızı, dönüştürücüyü bilgisayara driver’ını yükleyerek tanıttığınızı, ESP modülün boot modu butonunu aktif hale getirdiğinizi, bilgisayarınızda Python ve esptool’un da kurulu olduğunu ve cmd konsol ekranının önünüzde açık olduğunu varsayıyorum..

Önce modüldeki 4MB’lık flash diski tamamen temizliyoruz:

Daha sonra indirdiğimiz build’i yüklüyoruz:

Bu kadar. Bu işlemleri yaptıktan sonra modülü boot modundan çıkartıp reset butonuna basarak yeniden başlatabiliriz ve artık Lua ile kod yazmaya hazırız.

Modüle kod yüklemek ve hata ayıklama için bir çok seçeneğiniz var ama arayüz ile kullanım kolaylığı açısından şahsen Java tabanlı çalışan Esplorer ‘ı tercih ettim. Bu araç ile sağ üst kısımdan dönüştürücüye ait COM portu seçip bağlantıktan sonra sol kısımda kod geliştirimi yapıp (veya dosya yükleyip) sağ tarafı da hata ayıklama ve çıktı ekranı gibi kullanarak yolunuza hızlı bir şekilde devam edebiliyorsunuz. Ayrıca bu araçla modül üzerindeki flash diskin içeriğini görüntülemenizi sağlayan küçük bir dosya yöneticisi de mevcut.

Esplorer sitesinden alıntıdır.

Önemli noktalardan biri de kullanacağınız aracın baud rate seçeneğini NodeMCU için standart değer olan 115200 ‘e getirmeniz. Aksi halde modül ile dönüştürücünün data transfer hızları eşleşmediğinden terminal ekranında garip karakterler göreceksiniz.

NodeMCU ve ESP8266 modülü konusu yazının başında da belirttiğim gibi çok geniş bir konu olduğundan, konuyla ilgili uygulamalı örneklere aşağıdaki yazılardan ayrıca ulaşabilirsiniz:

Neler Yapabiliriz?

Photo by Zan on Unsplash

ESP8266'nin uygulama alanları o kadar çok genişki; akıllı ev uygulamaları, endüstriyel kablosuz kontrol üniteleri, bebek kameraları, IP kameralar, sensör ağları, giyilebilir elektronikler.. Biraz elektronik ve yazılımla ilgilenip kablosuz kontrol ile bir şeyler yapmak istiyorsanız yukarıda detaylı olarak bahsettiğim zahmete 1 kez katlandıktan sonra ufkunuz açılacak diyebilirim.

ESP8266 Wi-Fi modülü sadece station(bir ağa bağlanan client), sadece access point (ağ erişim noktası) ya da hem station hem access point modunda aynı anda kullanılabiliyor. Bu yüzden bu modülü kullanarak neler yapabileceğiniz tamamen hayal gücünüze bağlı. Şu an aklıma gelen bazı örnekler:

Station modunda bir ağa dahil edersiniz ve belirli bir amaç için ağdaki başka bir makineye veri transferi veya komut gönderimi gerçekleştirebilirsiniz. Örneğin bir sensörünüz olduğunu, sensörden periyodik olarak veri okuyup bir sunucuya iletmek istediğinizi düşünün.

Bir modülü station modunda diğerini access point modunda yapılandırarak birbirileri arasında doğrudan iletişim kurmalarını sağlayabilirsiniz.

Access point modunda bir ağ yayını yapmasını sağlayarak bu ağa dahil edeceğiniz başka bir makineden komut almasını sağlayabilirsiniz. Örneğin bir mobil uygulamadan vereceğiniz komut ile evinizdeki herhangi bir cihazı aktif hale getirdiğinizi hayal edin. Burada aktif hale getirdiğiniz şeyin hiçbir önemi yok: Bu bir kuru kontak anahtar olabilir, lamba olabilir, televizyonunuz da, klimanız da, belki de başka işi yapacak başka bir mikroişlemci ya da IoT modül.. Sonuç olarak aktif etmek istediğiniz şey ile ESP modül I/O pini arasına koyacağınız bir röle veya transistör sizi neredeyse tüm kısıtlardan uzak tutmaya yetecektir. Gerisi size kalmış..

--

--

Zafer Altun

İ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/