Esp8266 Programlama (Arduinoyla)

Bu yazımda yakın zamanda kullanma ve programlama tecrübesi edindiğim  esp8266 isimli Wifi modülünün programlamlanmasından bahsedeceğim.

http://benlo.com/esp8266/ESP8266-ESP01.jpg

Çipler ya tek sefer programlanabilr özelliktedir yada tekrara tekrara programlanabilirler. Esp8266 çok gez programlanabilri çiplerden yani bir flash belleğe sahip. Tıpkı bir Arduino- Waspmote kartı özünde mikrodenetleyiciler hepsi gibi programlamak mümkün.

Örenk iki senaryo üzerinden anlatayım :

  1. Bir arduinoya yazdığınız program Seri haberleşme sonucu aldığı komutu icrada edebilir. Mesela “{Yak,Led1}”, “{Sondur,Led1}” , {Ölç, SIcaklık} şeklinde örneklendirlecilecek bir programda tasarlanabilir.
  2.  Sadce led yakacaksanız Bu kadar komut içeren bir sistemi kullanmak yerine daha basit, özelleştirilmiş ve kullanışlı bir sistem geliştirmek mükündür. Bu senaryodada ona bir örnek verelim. Ledleri digital çıkışlara bağladığınızı düşünürrsek “{PinNo, Durum}” şeklinde basit bir komut sistemi oluşturabiliriz. Bunu ebnf ile ifade edersek uno için {  (1|2|3|4|5|6|7|8|9|10|11|12|13 , (0|1)  } şeklinde olabilir. Örn: {1,1} Digital 1 pinindeki ledi yakacaktır.

Senryo 1 de örnekleri verilmiş olan komutlar arttırlılarak tüm sistemin yönetilmesi mümkündür. Fakat ihtiyacınız özelse bu komplexlikten kurtamak anlamlı labilir sistemi. Bunuda senaryo 2 ile örneklemeye çalıştım.

Gelelim esp8266ya. Esp8266 satın alındığında genelde her donanımın yönetilmesinde ve yapılandırılmasında kullanılan AT komutlarıyla kontrol edilebilecek bir şekilde programlanmış olarak geliyor. Ve standart RX-TX bağlantısını yaparak At komutları üzerinden çalıştırabiliyorsunuz. Bu genel ve komplex kullanımdan kurtulmak isteyenler ise modülle At komutları üzerinden konuşmaktansa direk programlamayı tercih ediyorlar

Esp8266 modülü ve en popiler kütüphanenin kullanımı gitbook.com da krzychb takma adlı kullanıcı tarafından hazırlanmış kılavuz   yeni kılavuz da anlatılmış. Bizde bu yazıda aynı projenin (Github da barınıdırılan esp8266/Arduino projesin) derlenmesinden ve kullanılmasından bahsedeceğiz.

  1. Derleme ve yazılım geliştirme ortamının hazırlanması,
  2. Programlama için donanımsal hazırlıkların yapılması,
  3. Geliştirilen yazılımın yüklenmesi

şeklinde 3 ana başlıkta açıklanacaktır.

Derleme ve yazılım geliştirme ortamının hazırlanması

Programlama için Arduino IDEsinin kullanımı tercih edilmiş ve uygun geliştirmeler yapılmış o yzüden bizde arduino idesi üzerinden ilerleyeceğiz. IDE’nin Son sürümünü buradan indirebilirsiniz. Son sürümle denemeniz tavsiye olunur. Sürüm değiştikçe geliştirmeler yapıldığı için eski sürüm kullandığınızda uyum problemi yaşayabilirisiniz.

IDE’ ye esp8266 yı programlamak için gerekli kart ve kütüphane tanımlamalrının yapılması gerekiyor. Fakat bu iş gerçekten kolaylaştırılmış.

IDE’yi açıp Dosya-> Tercihlere tıklayıp Ek devre kartları Yöneticisi URL’leri yazan kısıma projenin README.md sinde yazan Boards Menager linkini: http://arduino.esp8266.com/stable/package_esp8266com_index.json kopyalayıp yapıştırıyoruz. Tamam diyerek seçeneklerden çıkıyoruz.

Yine Araçlar-> Kart -> Kart Yöneticisi ne tıklayarak açılan listeden esp8266 by ESP8266 Comunity yazan kart setini bulup Kur butonuna basarak yüklüyoruz.

Programlama için donanımsal hazırlıkların yapılması

Genel olarak modüller farklı modlarla başlatılmak istendiğinde (buna farklı yetkiler veya programlama modu örnek verilebilir) donanımsal olarak bazı pinlere farklı gerilim bağlantıları yaparak başlatılması gerekir.

Esp8266 da ise programlama moduna geçebilmek için donanımsal ololarak yapılması gerekenler:

  1. 3.3 V u arduinoda 3.3 volta bağlayın
  2. RX ‘i RX e
  3. TX i TX e
  4. Gnd yi Gnd ye
  5. Ch_PD yi 5 Volta
  6. GPIO_0’ı GND ye
  7. Arduinonun üzerindeki (esp8266’nın reseti değil) reset bacağı gnd ye bağlanmalı (bu sayede arduino devre dışı kalır. Wifi programlanır).

Bağlamanız gerekli. Tüm bağlantıları yaptıktan sonra 3.3 volt gücü çekip tekrar takarsanız modül programlama modunda çalışacaktır. Ve arduinodan program yükleyebileceksiniz. Program yüklendikten sonra direk çalışmaya başlayacaktır. Programlama yapmadan çalıştırmak isterseniz GPIO_0’i gnd bacağından çıkartmalısınız.

alıntı : http://www.electroschematics.com/11276/esp8266-datasheet/

Esp8266 pin Diyagramı

Geliştirilen yazılımın yüklenmesi

Yükleme için donanımsal atarlamlaır yaptığınızı var sayarak devam ediyorum.

  • Araçlar-> Kart -> Sekmesinden Generic ESP8266 Modüle kart olarak seçilmelidir.
  • Port kımında ise arduino ile programlayacağımız kullancağımız arduinonun ilişkili olduğu com port seçilmelidir.

Klavuzdaki örnek program yeni_program veya Blink.ino örneği yüklenebilir. Yükleme aynen arduinoya yüklermiş gibi derle ve yükle butonuna basılarak yapılmaktadır.

 

Güncelleme:

1.0.1:  kılavuz ve program linki güncellendi. uyarısı için okuyuma teşekkürler.

Esp8266 Programlama (Arduinoyla)” hakkında 49 yorum

  1. Öncelikle paylaşımınız için teşekkürler. Modülün güncellemesini yapabiliyorum. Ayrıca kod da yükleyebiliyorum (her ikisi de arduino uno üzerinden) ancak modül bir türlü AT komutlarına cevap vermiyor. Bunun sebebi ne olabilir acaba ?
    Teşekkürler..

    • Eğer kod yüklüyorsanız, At komutlarıyla çalışmayacak hale getiriyorsunuz demektir. Cihazı at komutları ile kullanmak yerine direk programlamak için ESP kütüphanesi.
      Eğer At komutlarıyla kullanmak istiyorsanız varsayılan firmwareyi yüklemelisiniz. Esp nin standart at ile çalışan programını indirip esp ye tekrardan yazın, bu şekilde esp yi at ile kullanabilirsiniz.

  2. hocam ben lcd ekrana internetten aldığım saati yazmak istiyorum. Saat blgisini almayı başardım. Şu anda esp yi programlamdım anladığım kadarıyla. Peki esp den bu saat bilgisini arduinoya yani glcd ekrana nasıl yazıcam. ?

    • Eğer saat bilgisini alabildiyseniz (debug yapmadığınızı kabul ederek) uart tan yani Serial.Println le yazdırıyorsunuz demektir. Uarttan arduino ya oradanda lcd ekrana göndermeniz lazım.

      Wifi deki program
      {
      saat = get saat()
      Serial Print ln (saat)
      }

      Arduinodaki program
      {
      if (Serial.available)
      char a = Serial read() // tanımlama yukarıda olsun
      Lcd. write (a);
      }

      gibi birşey olacak .

    • Emre Efe Kardeş merhaba…
      Ben de saat bilgisini almak istiyorum ESP ile. Yardımcı olur musunuz? ESP8266 ‘yı ilk defa kullanacağım.

  3. Selam ellerinize sağlık çok güzel bir çalışma.
    arduino nano kullanıyorum. uno ile aynı pinlere denk gelecek şekilde bağlantıları yaptım. video da 15: 38 e kadar herşey aynı ama blink yüklemesini yapınca yani yükleme %100 olunca arduinonun kırmızı ledi yanmaya devam ediyor ama esp8622 nin gücü kesilmiş gibi oluyor kırmızı led sönüyor ve mavi led yanıp sönmüyor. arduino ide deki port menusü pasif hale geliyor. yardımcı olabilirseniz sevinirim. teşekkürler.

    • Gücü kesilmiş gibi oluyorsa ki portun gözükmüyor olması da buna bir işaret . Bir yerlerde kısa devre oluyor olabilir mi ?

      Esp de güç haricinde sorun olsa bile uno orada bir TTL dönüştürücü olarak kullanıldığından dolayı portun gözükmesini engellememeli (yani port bağlantısının kapamasını sağlamamalı).

  4. hocam merhabalar yükleme işlemine kadar başarılı bir şekilde yaptım .Ama 100% olmasına rağmen mavi led yanıp sönmüyor.Yani sonuçta kod espye yüklenmiştir değilmi?
    2.sorumda , herşey tamam peki arduino yokken pen esp yi nasıl ve hangi pinlerden beslemeliyim?
    Bu ara arduino mega kullanıyorum (klon);
    YAZINIZ GÜZEL OLMUŞ HOCAM ELİNİZE SAĞLIK!…

    • Merhaba Burhan,
      100 % ise yüklenmiş olmalı.
      Esp nin çalışması için aşağıdaki bacakların bağlanmış bağlanmış olması gerekiyor.
      3.3 V u arduinoda 3.3 volta bağlayın
      Gnd yi Gnd ye
      Ch_PD yi 5 Volta

      Haberleşme için ise
      RX ‘i RX e
      TX’i TX e

      NOT : 5volt yerine 3.3 volt kullanilabilirmi bilemiyorum şuan incelemek lazım dokümanları.

      Allah c.c. den ümmete hayırlı ve faydalı ilimler dilerim.

  5. Merhabalar, kod %100 yükleniyor fakat daha sonra led yanıp sönmüyor. Yükleme tamamlandıktan sonra bilgisayardan cihazı çıkarmışım gibi bir ses geliyor. Neden olabilir acaba?

    • Merhaba, çıkmış gibi sesin gelmesi normal. Işık hiçbir zaman yanıp sönmüyor mu ? Başka kod yüklemeyi denediniz mi ?

  6. merhaba hocam ben yüklemeyi yaptım ama internete bağlanmamakla beraber port ekranında hiçbirşey görünmüyor. Sebebi ne olabilir acaba yardım edebilir misiniz?

    • Port ekranından kastınız serial Monitör ise orada birşey gözükmemesinin 3 sebebi vardır . Kontrol ediniz:
      1. serial port bağlantınız (usb kablo) bilgisayara takılı mı?
      2. Serial monitör açılmadan port uygun seçildi mi? veya açarkaen hata vermeden açabildi mi?
      3. yaılımda olarak serial portu açtınız mı (serial.begin(…)) ?
      Hepsi tamamsa Serial setup fonksiyonun en üstünde açıp araya başka kod yazmadan Serial.printlen(“print test”); yazarak deneme yapın. kodda takılmalar oluyor olabilir.

  7. arduino ide üzerinden esp8266 generic kart seçip istediğimiz yazılımı yükledik.
    bundan sonra , AT komutları çalışmaya devam edecek mi? yoksa sadece bizim yüklediğimiz yazılım mı çalışacak.???
    bu cevaba göre nasıl bir yol seçeceğime karar vereceğim.

    • Hayır. AT komutları için AT komutlarının çalıştığı standart firmware(yazılım) yüklenmeli. Siz her program yüklemeniz de yeni bir firmware yüklemiş gibi oluyorsunuz.

  8. hocam merhaba, okulda yaptığımız bir proje kapsamında rfid modül ile wi-fi modülü birbirine entegre etmemiz gerekiyor. rfid modülden aldığımız verileri hocamız internetten görmek istiyor. bu konuda yardımcı olabilir misiniz?

  9. hocam blınk uygulaması yapamak ıstıyorum ama dosya bulunamadı dıyor ne yapmam lazım baglantılar dogru frımware atabılıyorum.fakat ardunıo ıde ıle programlanamıyor dosya bulumadı dıyor

  10. generic Kartı (esp8266 platformu, esp8266 paketi) bilinmiyor.

    Error compiling for board Generic ESP8266 Module
    sıkıntı bu hocam

    • Ayni modülü mu kullaniyorsunuz ? Bulunamadi dediginiz nedir ? Baska bir uygulama yükleyebildiniz mi? Calistiginiz versiyonlar nedir ?( Arduino ide , firmware)

  11. ben esp8266 ile istediğim siteye istek atabiliyorum ve geri dönen sayfa kodlarını arduino ile okuyobiliyorum lakin arduinodan hangi siteye gideceğini seri haberleşme ile esp ye gönderiyorum ama bana geri bad request sayfası döndürüyor bu konuda yardımcı olabilir misiniz?

    • adresi düzgün gönderemiyorsunuzdur. Öncelikle seri haberleşmeyle gönderdiğiniz linkin seri kanaldan doğru bir şekilde esp’ye ulaşıp ulaşmadığını denetleyin.

    • Merhaba, bana da esp 8266 ile internetten veriyi okuyup ardiuno ile gelen veriye göre işlem yapıcam nasıl yaptınız acaba ben bir türlü gelen veriyi okuyamadım.

      • Merhaba,
        Gelen veriyi serial ile yazıp serial portta görmeniz lazım. Veri geliyor mu önce ondan emin olmak lazım.
        İsterseniz daha Öncesinde döngü içinde Serial.println(“Aranızda Selamı yayınız”) . Yazıp serial çalışıyor mu diye kontrol ediniz.

  12. Hocam Merhaba ben url ı ek devre kart yöneticisine yazıyorum fakat kart yöneticisine geldiğimde indirirken hata oluştu diyor bu sorunu nasıl çözebilirim

    • Linki test ettim hala çalışıyor. Arduino IDE versiyonunuzu güncelleyin (test ettiğim verisyon 1.8.5). İnternet bağlantınızı kontrol edin.
      Başka bir bilgisayarda deneyin.
      README.md deki diğer kurulum yöntemlerini deneyin.

  13. tüm adımları tarif ettiğiniz şekilde yapıyorum yükleme sorunsuz tamamlanıyor. sora bacağı değiştirip çalıştırdığımda serial port ekranında anlamsız karakterler sürekli ilerliyor. bunun sebebi ne olabilir baud rate hızını portu kabloları defalarca denedim yetmedi üstüne modülü değiştirdim ama hep aynı.

    • Yine bir seial problmei gibi ttl_uart dönüştürücüde hata olabilir.
      Sizde döngü içinde Serial.println(“Aranızda Selamı yayınız”) . Yazıp serial çalışıyor mu diye kontrol ediniz. Baudrate’i zaten Serial.init de ayarlıyorsunuz. Aynısını seçin.

      Kodu önce örnek kod | basit kod yükleyerek deneyin eğer hardware bir hata alıyorsanız başka bir baudratte sürekli hata yazıyor olabilir.

  14. Merhaba;

    Ben ESP8266 dan Arduinoya b aşarılı bir şekilde veri gönderebiliyorum ve Arduino üzerndeki pinleri kullanıyorum. Şimdi Yapmak istediğim ise Arduino üzerinden ESP8266 ya veri göndermek istiyorum. Veriden kastım bir integer veya string değer. Bunu nasıl yapabilirim?

    Şimdiden teşekkürler…

    • Merhaba,
      Esp den arduinoya veri göndermek için Esp kodunuz içinde serial print ile veriyi gönderiyor olmanız lazım ve gerekli rx tx bağlantısını yapış olmanız lazım. Tersi yönde veri göndermek içinse Durum yine aynı Yani Esp kodunuzun içinde göndermek istediğiniz değerleri serial print ile gönderin (ters yönde rx tx te bağlı olmalı). Öncelikle string göndermenizi tavsiye ederim. Sonra ise struct yapısı kullanarak int vs. de gönderebilirsiniz. (int leri string olark göndermek her zaman mümkün yinede).

      ESP Arduino
      Rx <---- TX TX ----> Rx

  15. Merhaba,

    Videoda izlediğim her şeyi harfiyen uyguladım.Dakika 19’a kadar her şey aynı,fakat ben ıp adresi alamıyorum.Dk 19 daki gibi serial ekran boş hiç bir yazı gelmiyor.Yorumlarda diğer arkadaşlara dediğiniz gibi Serial.println(“…”) komutu ile yazı yazdım fakat serial ekranda herhangi bir şey görmüyorum.Bu sorunu nasıl aşabilirim.Emeğinize sağlık teşekkürler..

    • Yalnızca reset attığımda serial monitörde uzun ve saçma harf,rakam,şekiller çıkıyor.Bunun dışında herhangi bir yazı yok.Esp8266 dan kaynaklanacak bir sorun için modül değiştirdim sonuç aynı.

      • Boudrate i ayarayarak ekranda çıkan şeyleri anlamlı bir hale getirip okumayı deneyebilirsiniz. Özellikle son kısımda error vs yazıyor olabilir.

    • Merhaba,
      Hiç birşey yazmadan Serial Begin yazıp serial println yazdığınızda ve serial begindeki baudrate ile serial monitörünüzden yazıyı göremezseniz ilerlemenin anlamı yok.
      Ürünün resetten sonra kod yüklemeye değilde çalışma moduna geçtiğinden emin olun. RX tx bağlantınızı düzgün yaptığınızdan emin olun. Sonuç elde edemezseniz tekrar yazın.

  16. Sadece begin ve println yazılı bir kod yükledim herhangi bir yazı gene göremedim.
    Rx-Rx
    Tx-Tx
    3.3 v – 3.3v
    EN- 5v
    IO0-GND
    GND-GND

    Bağlantılarım yukarıdaki gibidir.Modüle programı yükledikten sonra.IO0 bağlantısını çıkarıp reset atıyorum.Ok işaretleri vb. gibi bir çok anlamsız şekil çıkıyor(115200).Diğer baudrateleri tek tek denedim 74880 baudrate de anlamlı bir kaç satır yazıyor ama program çıkışı ile alakalı değil.İlginiz için teşekkür ederim.

    • Programlama yapmadan çalıştırmak isterseniz GPIO_0’i gnd bacağından çıkartmalısınız. Çıkartarak reset atın olmaz ise. 3.3 volt vererek reset atın.

      Ok işareti gibi dediğiniz anlamsız şeylerin anlam kazanması lazım. Yani bir şekilde Düzgün metni görmelisiniz.

      Şöyle testler yapın önce:
      İki kere reset atın çıkan anlamsız şeylerin uzunluğu eşit mi diye bakın.
      Mesela “Selam” yazdıysanız “SelamSelam” yazarak bir de çıktıyı gözleyin.
      Üçüncü bir değişikliği UART usb dönüştürücünüzde bir problem olabilir gibi duruyor.
      Dördüncü bir durumda ise Arduino IDE Serial Monitör kullanmak yerine başka bir program ile deneyin( PUTTY olabilir.)

  17. Merhabalar,

    Nodemcu ( ESP8266) ile bir proje yapmaya çalışmaktayım.

    Bu projede 3 buton, 6 röle çıkışı, 2 adet sensör ( DHT11), I2C oled

    Yani

    I2C için 2 pin

    Butonlar için 3 pin giriş

    Sensörler için 2 pin giriş

    Röleler için 6 pin çıkış kullanmalıyım.

    Fakat Nodemcu da bu kadar pini aktif etmem için pin ayarlarını yapmak için baya uğraştım fakat sonuç alamadım.

    Pin ayarlarını yapmam konusunda yardımcı olabilene misiniz?

    • Merhaba, Kusura bakmayın biraz uzun bir süre geçmiş siz yazalı.

      Pin ayarlarından kastınız mesela butonlar için bu pinleri: pinMode(INPUT) yapıp sonra digatalRead donskiyonuyla okuyabilirsiniz.

      Röleler için ise OUTPUT yapıp digitalWrite kullanabilirsiniz.

      Sensörler özel protokoller kullanıyorlar ise onlar için o protokolleri kullanmanız gerekir. Birebir kod pinleri başlatmak yerine protokolü başlatmanız diğer ayarları yapacaktır. Mesela I2C için bir kütüphane var arduinoda ve yine I2C oled içinde vardır. I2C oled kütüphanesi arkaplanda I2C kütüphanesini kullanır/kulanması beklenir. Sizde direk I2C oled kütüphanesini kullanıp basit bir I2C.begin fonsiyonu ile kulanmaya başlarsınız. Açıklayamadığım biryerler var ise yazınız kolay gelsin.

  18. sayın Abdullah Salih BAYRAKTAR;
    videoda gösterdiğiniz ve ayrıca yazınızda resimli olarak anlattığınız bağlantıları yapıyorum, ancak esp kartım aşırı şekilde ısınmaktadır (elimi yakacak kadar) bu normal midir. yoksa bir şeyi yanlış mı yapmaktayım.

    teşekkürler

    • Osman Bey,
      Belirli bir seviye ısnması normal sonuçta rf sinyali üretiliyor. Evinizdeki modemde ve eğer var ise Wifi adaptöründe de ısınma göreceksiniz. Cihazların çalışma sıcaklık aralıklarını kontrol edebilirsiniz.Sizin çipide bir termometre ile ölçebilirsiniz. Sınırlarda ise elinmizi yakması çokta önemli olmayabilir. Emin olmamakla birlite setup ve loop’unu boş bıraktığınız bir kodu esp ye yükleyerek bir sıcaklık testi yapabilirsiniz. Bu durumda çevre elemanları ve rf kullanılmadığı için kullanılan durmdaki gibi çok ısınmaması gerektiği kanaatindeyim.

      Isınma snırların üzerinde ise elektronik bağlantılarınızı kontrol ediniz.

  19. hocam merhabalar esp01 modül ile blynk uygulaması üzerinden ardunio mega ya bağlanıp ev otomasyonu sistemi çalıştırmak istiyorum ama esp not responding hatasıyla karşılaşıyorum elimde siyah pcb li olan modülden var bağlantıları doğru yapıyorum ama esp not responding uyarısı ile karşılaşıyorum. Yardımınıza muhtacım geri dönüşlerinizi merakle bekliyorum, şimdiden teşekkür ediyorum…
    saygılarımla

  20. hocam merhabalar esp 01 modülle alakalı yardımınıza ihtiyacım at komutlarına cevap alabiliyorum amja program yüklediğim zaman esp not responding hatası alıyorum yardımcı olabilirseniz sevinirim…
    saygılarımla …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir