Bu yazımızda özellikle Nesnelerin İnterneti (IoT) başlığı altında toplanan uygulamalarda wifi üzerinden kontrol sağlayabildiğimiz ESP8266’nın en ucuz ve basit modeli olan ESP-01 modülü hakkında bilgi vermeye çalışacağım. Daha sonra gelişmiş modelleri (ESP12, ESP32 gibi) ile çalışmalar yapabiliriz. Bu modülün çok ucuz olması nedeniyle birçok basit uygulaması mevcut. Hatta ucuzluğu nedeniyle basit bluetooth projelerinde bu HC-05, HC-06 modüllerinin yerine kullanıldığı uygulamalar da gördüm. Ayrıca Arduino ile kullanılabiliyor, kendisini programlamak gerektiğinde de Arduino (bir UART modülü gibi) kullanılabiliyor.

Bu modülün fiziksel yapısı daha önce çalıştığımız nRF24 modeline çok benziyor. Neredeyse aynı (24.8mmx14.3mm) boyutlarda. Üzerinde asıl işi yapan bir entegre, hafıza entegresi, kristal ve dahili anten ile 8 adet pin ile bir dahili anten var. Entegre içinde 1MB flaş bellek bulunuyor ve seri iletişimle çalışıyor. Aslında entegre 16 giriş/çıkış bacağına sahip ancak bu modelde (01) sadece 2 pin giriş çıkış olarak kullanılıyor (4 olarak da kullanılabilir, bacak tanımlarında anlatılacak).

Pinler 2×4 şeklinde standart olduğundan board üzerinde kullanılması mümkün değil. Ya bir aparat yapacaksınız ya da dişi header kablo kullanmak zorundasınız. Yukarıdaki resme göre sol sütun yukarıdan aşağıya doğru

TX (GPIO1): Seri iletişimdeki veri yollama bacağı/Aynı zamanda yukarıda bahsettiğim (eğer çalışma sırasında bu bacak kullanılmayacaksa) fazladan giriş/çıkış bacağı olarak da kullanılabilir.

CH_PD/EN: Modülün çalışması için (Enable) +Vcc hattına bağlanması gereken bacak.

RST: Reset (yeniden başlatma) butonu. Resetlemek için Gnd hattına çekilmeli.

Vcc: +3.3 volt besleme. Evet bu modül 3.3 volt gerilimle çalışıyor ve 5 volt zarar verebilir. Bu besleme olayı biraz sıkıntılı. En fazla 200 mA akım çektiği açıklamada bulunan bu modül akım yeterli gelmezse, gerilim 3 voltun altına düşerse ya da bu gerilim yeterince filtre edilmezse modül kararlı çalışmıyor, yeniden başlayabiliyor. O yüzden normal kullanımda mümkünse Arduino’dan değil harici bir kaynaktan beslenmesi ve Vcc-Gnd arasına 100uF ve daha üzeri bir kondansatör ile kullanılması öneriliyor.

Gnd: Tahmin ettiğiniz gibi. Eğer modülü Arduino ile birlikte ve Harici bir güç kaynağı ile besliyorsanız bu hat hem Arduino hem de harici güç kaynağının Gnd hattına bağlanmalı. Yine yukarıdaki resme göre sağ sütun yukarıdan aşağıya;

GPIO2: 2 numaralı giriş/çıkış bacağı.

GPIO0: 0 numaralı giriş çıkış bacağı. (Ayrıca aynı Arduino’da olduğu gibi kart üzerinde bir LED bulunmakta. Bu LED GPIO1(Tx) bacağına bağlı). Karta program yüklenirken bu bacak 10k direnç ile 3.3 volt hattına çekilmeli, çalışma esnasında buradan ayrılmalı.

RX (GPIO3): Kartın seri bilgiyi okuduğu bacak. Şimdi bunu Arduino ile kullanacaksak oradan gelen 5volt seviyesindeki verilerin zarar vermemesi için 1k ve 2k dirençler kullanılarak bir gerilim bölücü yapılması tavsiye ediliyor. Bazı örneklerde adamlar kullanmamış ama dediğim gibi tavsiye ediliyor(devreyle ilgili deneyimlerime göre program yükleme sırasında direnç kullanmadan RX pininin direkt Arduino RX pinine bağlanınca daha kararlı yükleme yapılıyor-en alt resime ekledim). Gerilim bölücü konusunu da Arduino ile voltmetre konusunda işlemiştik. Peki neden TX pinine böyle bir uygulama yapmadık? Çünkü RX pini bu modülden Arduino’ya 3.3 volt seviyesinde bir veri yolluyor. Arduino bu veriyi okuyacak kadar hassas zaten.

Bu arada ESP modülleri hakkında her türlü bilgi ve dökümana https://www.espressif.com sitesi üzerinden ulaşabilirsiniz.

Bu arkadaşlar seri iletişimde AT komutları ile haberleşiyorlar. Biz de bir seri iletişim ekranı üzerinden (tabiki ben Arduino IDE kullandım) haberleşebiliyoruz. Bu komutlar modemlerde, GSM modüllerinde, GPRS modüllerinde de kullanılıyormuş. Resmen Seri ekranda AT ile başlayıp ‘+’ işaretinden sonra yazığınız kısaltmalara modül cevap veriyor, ona göre modunu değiştiriyor, etraftaki ağları buluyor, kendisi de bir Access Point olarak ayarlanıp, şifresi, adı değiştiriliyor. Bu konuda Türkçe de çok kaynak var incelenebilir.

Bir, şimdi bu komutların işlenmesi için modüllerin yazılımlarının (SDK-Software Development Kit) güncellenmesi gerekiyor! Bazı komutlardaki hatalar bu güncelleştirmeler (bin dosyaları) ile giderilmiş! Ben yaklaşık 4 yıl önce bu modülle tanıştım o zaman da güncelleme konusunda çok sıkıntı çekmiştim. Şimdi bir proje için kullanmam gerektiği için yine güncelleme yaptım. Elimdeki 5 adet modülü en güncel haliyle güncelledim. Hem de kendi sitesindeki bilgiler ve diğer yayınlarla. Hepsi de normal programda çalışmasına rağmen AT komutlarına cevap veremez hale geldi. İnanın yaklaşık 20 gün uğraştıktan sonra bulduğum eski versiyonu ile tekrar çalıştırmayı başardım. Çalışan güncellemeyi bu sayfadan tek tek hepsini indirerek yüklemeye çalıştım. Sıkıntı şu ki bu modellerin bellekleri 4MB, 8MB, 16MB ve 32MB olarak yeni modellerde değişmiş. Hepsi için de güncellenecek dosyalar ve dosyaların bellek üzerinde güncelleme yapılacak adresleri farklı. Bendeki 5 modül de 2.2.0 versiyonu (2018 güncellemesi!) ile hayata döndü.

İki, bu güncellemeleri yapmak için de bir güncelleme programına ihtiyacınız var. Bu konuda yeterince kaynak var ama ben bu espresif üzerinden ESP flash Download Tool 3.9.3 kullandım. Bu yükleyici üzerinde bin dosyaları ve adresleri aşağıdaki gibi ayarlayınca çalıştı. (8M, 512+512)

Ve üç, yukarıdaki ayarlardan gördüğümüz com ve boud ayarları. Biz bu ayarları Arduino IDE’den tanıyoruz. Yukarıdaki ayarlamalar iyi de bu ayarları modüle hangi bağlantı ile yüklüyoruz. Bunun için promini gibi üzerinde CH340 çipi olmayan modülleri programlamak için kullandığımız USB/TTL, UART vb. modüller kullanılıyor, ya da benim yaptığım gibi Arduino. Arduino aşağıdaki gibi modüle bağlanıyor. Şemada Arduino üzerinden 3.3 volt alınıyor ve 100 uF kondansatör gösteriliyor.

Aynı resmi iki kere koymadım merak etmeyin. Birinci resimde Arduino sadece ESP’ye program yüklenirken ikinci Arduino ile çalışırken. Şimdi önce AT güncellemeleri (hiç tavsiye etmiyorum!) sonra da program yüklemelerini madde madde sıralayalım.

-Asıl Çalışan Devre Budur-

Önce üstteki devreyi (programlama modu) kurup enerji veriyoruz. İki devre arasındaki tek farkın GPIO0 pininin programlama modunda +3.3 volt hattına çekilmesi. Şunu söylemekte fayda var; devre çalıştıktan sonra bu pini + hattına çekmeniz bir şey ifade etmiyor. Modül çalışırken bu pinin + 3.3. volta bağlı olması onun programlama modunda başlatılmasını sağlıyor. Yani bu şekilde başlatın, isterseniz sonra bu bacağı ayırın fark etmiyor, modül programlama modunda kalıyor.

Daha sonra Arduino IDE üzerinden seri port ekranını açıyorsunuz. Boud rate 115200 seçildiğinde ekranda garip şekillerden sonra “ready” görüyorsanız ve “AT” yazdığınızda “ok” cevabı alıyorsanız, yani AT komutları çalışıyorsa güncelleme işine hiç girmeyin derim. Artık AT komutlarını yazıp modül ile haberleşebilirsiniz. Bu komutlar için yine espressif sitesinden faydalanabilirsiniz. Yok ben güncelleme yapmak istiyorum derseniz;

Sırada en son sürüm yazılım (firmware) ve bu yazılımı modüle yüklemek var. Bunu için espresif üzerinden ESP flash Download Tool ve en güncel yazılımı (firmware) indirip yüklemeniz gerekecek. Burada ESP86-01(512×512) için sanırım güncellemeler 3.0 versiyonu ile sona erdi. Umuyorum yukarıdaki flasher ayarları işinize yarar.

Yükleme başarılı olduysa ” Daha sonra” adımındakileri tekrarlayın, sistem çalışıyor mu deneyin.

Modüle program yüklemek için; kartı IDE üzerinde tanıtmalısınız. Bunun için önce IDE üzerinde Dosya/Tercihler bölümünde Arduino Devre Ek Kart Yöneticisi URL’ler bölümüne ” http://arduino.esp8266.com/stable/package_esp8266com_index.json ” adresinin eklenmesi gerekiyor. Orada daha önceden eklediğiniz bir link varsa, üzerine tıklayıp, sonuna kadar gidip “enter” tuşuna bastıktan sonra bu adresi ekleyin ki önceki linki bozmayalım. Bende daha önce eklenen var mesela.

Sonra, Araçlar menüsü üzerinden, Kart, ESP Boards üzerinden “Generic ESP Boards” seçilmeli. Ama o programın çalışması için kart özelliklerinde “builtin LED” i 1 seçmelisiniz ki kart üzerindeki LED yanıp sönsün.

Daha sonra test etmek için Dosya/örnekler/ESP8266/ “blink” yüklenebilir.

Yine bir uyarı; programı yükledikten sonra GPIO0 pinini Gnd hattından ayırıp (İkinci şema) ESP modülünü yeniden başlatmamız (reset) gerekiyor. Aslında!: ikinci şemaya da ihtiyacınız yok! Devre çalıştıysa ESP modülü direk güç kaynağına bağlayıp çalıştırabilirsiniz artık.

Bununla ilgili bir kaç örnek yapacağız ileride.

Hoşça kalın…

Flash Yükleme Programı : https://www.espressif.com/en/support/download/other-tools

Güncellemeler: https://github.com/espressif/ESP8266_NONOS_SDK/releases

Örnek Uygulama:https://www.instructables.com/Home-Automation-With-ESP8266-WiFi-Without-Using-Bl/

AT Konutları için: https://www.espressif.com/en/support/documents/technical-documents?keys=AT+commands