FTDI yerine Arduino kullanarak ESP8266 programlama
Başka bir deyişle "ESP8266 programlayıcı Arduino Shield" yapmak. Breadboard'a kabloları söküp takmakla uğraşmak istemiyorsak ve elimizde de FTDI seri programlayıcı yoksa bu yöntemi kullanabiliriz. Ben elektronikçi değilim, çok fazla anlamam açıkçası. Aslında alt seviyeli dillere pek bulaşmadan, bir şirkette Node.JS, EcmaScript6, Python gibi üst seviyeli diller kullanan bir yazılım geliştiriciyim. Elektronikle hobi amaçlı uğraşıyorum o yüzden ben yapabiliyorsam herkes yapabilir.
Ne yalan söyleyeyim; ESP8266 ile ilk tanıştığımda, bunun Arduino'yu internete bağlayan dummy bir bileşen olduğunu zannetmiştim. Uzun süre Arduino ile ESP8266'yı nasıl haberleştiririm şeklinde arama yaptım. Kendi üzerinde MCU olduğunu tahmin etmemiştim aletin ebatlarından dolayı. Dolayısıyla gördüğüm devrelerde, Arduino'nun kodu çalıştıran bileşen olduğunu zannetmiştim. Benim gibi "akıllılar" için açıklama yapalım: Bu devrede ve yazıda aslında Arduino dummy bileşen. Her türlü kodu işleyen de, internete bağlanan da ESP'nin ta kendisi. Tek sorunu ESP8266 üzerinde bir USB girişi ya da bilgisayardan gönderdiğimiz kodu alabilecek bir seri ünite yok. Burada Arduino kendisine gönderilen kodu hiç ellemeden RX-TX üzerinden ESP8266'ya gönderiyor. Kodu gönderdikten sonra Arduino ile işimiz kalmıyor. Bu işle uğraşan hemen herkeste bir Arduino var ancak kimisinde (ben de dahil) FTDI programlayıcı veya siparişi verip bekleyecek kadar çok sabır ya da zaman yok.
Aslında bir önceki ESP8266WebServer kullanarak Web sunucusu kurmak adlı yazımda Arduino'yu bu amaçla kullanmıştım. Şimdi breadboard'da olan devreyi delikli plakete alacağız. ESP 8266'nın ayaklarını ya da Arduino UNO'nun girişlerini lehimlemeden (soket yardımıyla) ESP'yi defalarca programlayabileceğimiz basit bir sistem kuracağız. Ben aşağıdaki gibi pek de yakışıklı olmayan ancak oldukça kullanışlı bir devre kurdum.
Diyagram olarak gösterimi hali:
Burada da daha önce kullandığımız breadboard diyagramı:
Delikli soket yardımıyla ESP 8266'yı programlayıcıya defalarca yerleştirip programlayabilirim. Bunu yapmak istememin sebepleri belli. 8266 üzerine hem WIFI şifremizi hem de bazı ayarlarımızı hard-coded olarak yazıyoruz. Yazılım dünyasında "hard-coded" yazılım en büyük günahlardan birisidir. Elbette geliştirme aşamasında bazen hard-coded yazmamız gereken zamanlar oluyor. Örneğin ön yüzde geliştirme yapıyorsunuz (mesela bir React component), takım arkadaşınız ise arka yüzde bu bileşeni besleyecek API'yı yazıyor (örneğin AWS Lambda). Ancak arka yüz hazır değil. Siz arkadaşınızı beklemek yerine bazı kısımları hard-coded olarak yazıp bileşeninizi tamamlıyorsunuz. Takım arkadaşınız da kendi kısımlarını bitirdiğinde ufak bir düzenleme ile hard-coded kısımlardan kurtuluyorsunuz.
Gömülü elektronik(embedded) dünyasında hard-coded'dan kaçış mümkün değil. Teoride mümkün elbet ancak astarı yüzünden pahalıya geldiği için pratik değil. Örneğin ESP8266 üzerindeki WIFI şifresini değiştirmek için bir LCD ekrana ve bir de veri girişini yapabileceğiniz düğmeye hatta düğmelere ihtiyacınız var. ESP üzerinde yalnızca 2 tane GPIO olduğunu da hatırlatalım. O yüzden hard-coded'dan yazılımsal olarak kaçamıyorsak elektronik olarak kaçabiliriz. Elektronik dünyasının hard-coded'ı ise heralde lehimdir. Ayakları lehimlediğiniz an sistemi güncelleştirmelere kapatıyorsunuz. Ancak aşağıdaki gibi basit bir sistemle, defalarca kullanılabilecek bir shield'ımız oluyor. Arduino dünyasında buna shield diyorlar. Tüm lehimlerimiz shield üzerinde. Adeta bir kalkan görevi görüyor. Sayesinde ne Arduino ne de ESP8266 lehimleniyor.
Benim yaptığım devre, pek yakışıklı değil. Bantlar ve kocaman lehimler var. Yazılımcı adamın devresi bu kadar olur. Ancak kullanışlı.
Shield arkadan görünüm. Ön de olabilir emin değilim :))
Benzer şekilde ESP8266'yı asıl kullanacağımız devrede de soketlerimizi hazırlıyoruz. Sonrasında ESP kullanıma hazır. DHT11 sıcaklık ve nem ölçen web sunucusu.
Bir önceki yazıda herhangi bir giriş(input) olmadan web sunucusunun nasıl kurulacağından bahsetmiştik. Bu yazıda ise donanımlarımızı hazırladık ve bir sonraki yazıda da nem ve sıcaklık girişlerini okutup ESP8266 üzerinde canlı olarak sensör verilerimizi işleyen basit ama yakışıklı bir web sayfası hazırlayacağız. Söz, web sayfası devreden daha yakışıklı olacak. Ayrıca bu web sayfasını yalnızca yerel ağ üzerinden değil, tüm dünyadan görüntülenebilecek şekilde ayarlayacağız.