Arkadaşlar merhaba, Bir süredir esp yazısı yazamıyordum. Telafi etmek için bundan sonra yazacağım bir kaç yazı esp ile ilgili olacak.

Bu yazımızda ESP8266 ile bir sunucu kurup basit bir kaç cümle yazdıracağız. Açacağımız sunucuya ESP modülümüz ile aynı ağa bağlı olan cihazlardan girebileceğiz. Şuan için sadece Merhaba Dünya  gibi bir metin yazdıracağız fakat ilerleyen derslerimiz sunucu üzerinden devam edeceğinden bu ders çok temel ve çok önemli bir hale geliyor.

Bu uygulamada kullanacağımız malzemeler:

Bu yazımızda AT komutları ile sunucuyu kuracağımızdan AT komutlarının kullanımını bilmiyorsanız buradan öğrenebilirsiniz.

Sunucuyu kurduktan sonra ESP modülümüzün kendina ait IP adresini kullanarak sunucuya ulaşacağız fakat öncelikle IP adresini bulmamız gerekiyor. Bunun için devremizi öncelikle aşağıdaki gibi kuruyoruz.

esp8266 ile sunucu kurma

Dikkat etmeniz gereken nokta, uygulama esnasında bağlantılarımız bu şekilde kalmayacak Rx ve Tx bağlantılarının yerleri değişecektir. Şuan için sadece IP adresini bulmaya çalışıyoruz.

Arduinoyu usb’ye bağladıktan sonra Seri monitörü açıyoruz ve ayarlamaları aşağıdaki gibi yapıyoruz.esp8266-serial-port-ekrani

Ayarlamaları yaptıktan sonra, komut satırına AT yazdığımızda modülün bize OK cevabı ile dönmesi gerekmektedir. Bu cevabı gördüysek modülümüz çalışıyor ve bizim ile iletişime hazır demektir. Bundan sonra AT+CIFSR komutu yolladığımızda modülümüz bize IP adresini yollayacak. Bu adresi bir kenara not ediyoruz daha sonra kullanacağız.

Şimdi geldik esas bağlantıları yapmaya ve kodumuzu yazıp sunucuyu kurmaya.

Arduino Bağlantıları:
ESP8266-bağlantı-şeması-1-696x381

Bağlantıları yukarıdaki gibi yaptıysak kodda kullandığımız bir kaç noktaya değinmek istiyorum.

İlk önce AT+CIPMUX=1 komutunu kullanıyoruz. Bu TCP/UDP bağlantısını sağlıyor. Bu iki terimin ne olduğu ile ilgili ayrıntılı bilgiyi buradan ve buradan bulabilirsiniz.

Daha sonra AT+CIPSERVER=1,80 şeklinde bir komut yollayacağız. Bu komut bizim sunucumuzu açan komut. fakat 2 adet değişkenden oluşuyor. Bunlardan ilki yalnızca 1 veya 0 değerini alabilir. 1, server’ı açar, 0 ise kapatır. 80 ise açacağımız sunucunun port numarası. Günümüzde http:// şeklinde başlayan tüm siteler 80 portunu kullanmakta. Bu yüzden bende 80’i tercih ettim.

<head> Merhaba Dunya </head> Burada sunucumuza gönderdiğimiz HTML kodları yer almaktadır. <head> ile başlayan kodumuz </head> komutunu gördüğünde biter. Daha sonra yazacağımız HTML kodları bu iki bloğun arasına yazılacaktır.

AT+CIPCLOSE=0 komutumuz isminden de anlaşılabileceği gibi sunucuyu kapatmaya yarar.

Artık kodumuza geçebiliriz:

#define ag_ismi "WiFi_Ismi"
#define ag_sifresi "WiFi_Sifresi"
void setup()
{
  Serial.begin(115200); //Seriport'u açıyoruz. Güncellediğimiz 
                        //ESP modülünün baudRate değeri 115200 olduğu için bizde Seriport'u 115200 şeklinde seçiyoruz
  Serial.println("AT"); //ESP modülümüz ile bağlantı kurulup kurulmadığını kontrol ediyoruz.
  
  delay(3000); //ESP ile iletişim için 3 saniye bekliyoruz.
 
  if(Serial.find("OK")){         //esp modülü ile bağlantıyı kurabilmişsek modül "AT" komutuna "OK" komutu ile geri dönüş yapıyor.
     Serial.println("AT+CWMODE=1"); //esp modülümüzün WiFi modunu STA şekline getiriyoruz. Bu mod ile modülümüz başka ağlara bağlanabilecek.
     delay(2000);
     String baglantiKomutu=String("AT+CWJAP=\"")+ag_ismi+"\",\""+ag_sifresi+"\"";
    Serial.println(baglantiKomutu);
    
     delay(5000);
 }
 
   Serial.print("AT+CIPMUX=1\r\n"); //modülümüzü TCP/UDP bağlantısına sokuyoruz.
   delay(200);
   Serial.print("AT+CIPSERVER=1,80\r\n"); //Sunucumuzu 80 portunda açıyoruz
   delay(1000);
}

void loop(){
  if(Serial.available()>0){  //Eğer gelen veri varsa gir
    if(Serial.find("+IPD,")){  //Gelen verinin içerisinde "+IPD" komutu geçiyorsa gir
      String metin = "<head> <h1>Merhaba Dunya</h1> </head>";   // Sunucuya yazdırılacak yazı
      String yollanacak_komut = "AT+CIPSEND=";  //yollayacağımız komutun boyutunu söylediğimiz kısım.
      yollanacak_komut +="0";
      yollanacak_komut +=",";
      yollanacak_komut += metin.length(); //yollayacağımız yazının uzunluğunu belirliyor.
      yollanacak_komut += "\r\n";
      Serial.print(yollanacak_komut);
      delay(500);
      Serial.println(metin);
      delay(1000);
      Serial.println("AT+CIPCLOSE=0"); //Server'ı kapatıyoruz.
    }
  }
}

Kodumuzu yazıp, gerekli yerleri değiştirip çalıştırdıktan sonra tarayıcımıza geliyoruz ve yazının başında not etmenizi söylediğim IP adresini adres satırına yazıyoruz. Biraz beklemeden sonra gelen görüntü aşağıdaki gibi olmalı.merhaba_dunya_sunucu

40 Yorumlar

  1. AT+CIFSR

    +CIFSR:STAIP,”0.0.0.0″
    +CIFSR:STAMAC,”18:fe:34:e1:18:11″

    Bu şekilde bir yazı geliyor bir IP adres alamıyorum ben yardımcı olabilir misiniz ?

      • AT+CWJAP? komutunu gönderin “,” komutu ile dönüş yapılıyorsa bir ağa bağlı değilsiniz demektir. Ağa bağlanmak için AT+CWJAP=”Wİ-Fİ ADI”,”Wİ-Fİ ŞİFRESİ” girin yollayın gelen cevabın ok olması gerekir. Ağa bağlanmak 5 saniye kadar sürüyor.

  2. iyi ünler ben bağlantıları bu şekilde yaparak gerçekleştirdim ancak bu şkilde yükleme hatası alıyorum ? bu konuda bana yardımcı olabilirmisiniz teşekkürler.Saygılarımla.

    Arduino:1.6.9 (Windows 10), Kart:”Arduino/Genuino Uno”

    C:\Users\UÄŸurcan\Desktop\sketch_may11a\sketch_may11a.ino: In function ‘void setup()’:

    C:\Users\UÄŸurcan\Desktop\sketch_may11a\sketch_may11a.ino:10:22: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    C:\Users\UÄŸurcan\Desktop\sketch_may11a\sketch_may11a.ino: In function ‘void loop()’:

    C:\Users\UÄŸurcan\Desktop\sketch_may11a\sketch_may11a.ino:26:27: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    Çalışmanız programın 5.040 bayt (15 %) saklama alanını kullandı. Maksimum 32.256 bayt.
    Global değişkenler belleğin 374 byte kadarını (18%) kullanıyor. Yerel değişkenler için 1.674 byte yer kalıyor. En fazla 2.048 byte kullanılabilir.
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    Karta yüklenirken sorun oluştu. Tavsiyeler için http://www.arduino.cc/en/Guide/Troubleshooting#upload adresine göz atabilirsiniz.
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x31
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x31

    • Nedenini anlayamadığım bir şekilde Arduino 1.6.9 da çalışmıyor kod. Sanırım ide’nin yeni olmasından dolayı kaynaklanan bir hata. Ben denediğimde Serial.find(); fonksiyonunu tanıyamadı. İsterseniz 1.0.6 idesi ile deneyin birde

    • ESP ile aynı ağa bağlı bir cihazdan deniyorsunuz değil mi? Yani ESP ev ağına bağlıyken, telefonun mobil internetinden girmeyi denerseniz çalışmaz

  3. Merhaba ,
    Bağlantıları ve güncellemeyi belirttiğiniz şekilde yaptım.AT komutlarını serial monitor e kendim yazıp yolladığımda OK dönüşünü alıyorum ancak serial.println(“AT”) koduyla komut verince serial monitor de sadece AT yazıyor herhangi bir dönüş olmuyor.

    • Serial.println(“AT”); şeklinde kod içerisinde seri porttan haberleşme yapacaksanız, tx ve tx’in yeri değişiyor. İlk derslere bakarsanız, birinde ESP’nin rx’i Arduino’nun rx’ine bağlıyken diğerinde tx’ine bağlıdır.

    • Serial özelliğinde rx ve tx pinleri eğer seri monitörünüz açıksa ekranla (monitör) ile ilişkilendirilir. eğer mega kullanıyorsanız serial 1 2 veya 3 kullanmak daha mantıklı. sizin yazdığınız AT komutu string olarak alınıp serial e yazdırılıyor ki mevcut kurulumda da bu seri monitör oluyor. RX ve TX pinlerinin kullanımı ile ilgili kullandığınız arduino modelinin veri sayfasını (datasheet) inceleyin. Bilgisayara bağlı iken (hele ki serial monitör açıkken) Serial iletişimin başka bir modülle kullanılması pek önerilmez.

  4. Merhaba
    Seri port ekranında AT komutunu yazınca önce OK diyor ardından bu oluyor.

    OK
    €€ÀÀ€À€€€€À€À€€À€€€€€€€€€€K
    €€ÀÀ€À€€€€À€À€€À€€€€€€€€€€
    ets Jan 8 2013,
    xlrl 0 oS 0M Sz
    sl
    ready
    wdt reset
    loX‚Áh0L‚‚‚‚ba•¹�²Å‰q‘½½m0Lj
    tXY¢j
    ,kkÕµ�‚ÂÅ’j
    load 0x3ffe8000, len 788, rool
    tXY‚j
    ,kkÕµ�‚ÂÕ
    l84
    ks
    r
    dMo IS
    usl
    ready

    böyle şeyler oluyor sorun ne olabilir acaba esp yi de güncelledim .

    • Baud Rate’niz 9600 veya başka bir baud rate de kalmış olabilir. 115200 de olup olmadığını kontrol edebilir misiniz serial port ekranından

    • ESP8266 modülümüz ile oluşturduğumuz kablosuz ağın ismini ve şifresini ne yapmak istiyorsak onu yazmamız gerekiyor.

  5. kolay gelsin. ben arduinoya dış dünyadan herhangi bir internet bilgisayarından girmek istiyorum. bu nedenle esp ye sabit ip ve bir port vermem gerekecek bunu nasıl yapıyoruz.

    • Bu işlemi internete bağlandığınız modem/router üzerinden yapmanız gereklidir. Marka modele göre değişmekle birlikte genellikle “LAN settings” kısmında bulunan “DHCP address reservation” seçeneği altından ESP modülünüzün MAC adresini sabit bir IP alacak şekilde ayarlamanız gereklidir. Daha sonra bu IP’ye “NAT” veya “Port forwarding” menüsü altından istediğiniz portları yönlendirebilirsiniz.

  6. Bir defa yazıyı gördükten sonra tekrar göremeyenler sayfayı yenilemenize rağmen yazı hala gelmemekte ise, void loop() içindeki
    Serial.println(“AT+CIPCLOSE=0”); //Server’ı kapatıyoruz.
    kodunun hemen sonrasına
    Serial.print(“AT+CIPMUX=1\r\n”); //modülümüzü TCP/UDP bağlantısına sokuyoruz.
    delay(200);
    Serial.print(“AT+CIPSERVER=1,80\r\n”); //Sunucumuzu 80 portunda açıyoruz
    delay(1000);
    kodunu yapıştırın. Böylece her seferinde sunucu kapatılınca yeniden sunucu açılacaktır. Her yenilemede Merhaba Dunya yazısını göreceksinizdir.

    Eğer sadece
    Serial.println(“AT+CIPCLOSE=0”); //Server’ı kapatıyoruz.
    kodunu silerseniz ve sonrasına yeni bir kod eklemezseniz, yazıyı kararlı biçimde görürsünüz. Ancak sunucu kapanmadığından sayfa sürekli yenileme döngüsünde kalacaktır.

  7. Merhaba, bağlantıları 50 kere ve hatta 51. kere kontrol ettim serial monitöre AT yazıyorum ama hiç bir dönüş olmuyor. Yeniyim yardımcı olursanız sevinirim. Herkese başarılar.

  8. Merhaba, her şey tamam fakat tarayıcıda sayfa sürekli yükleniyor olarak görünüyor. Tarayıcıdan ilgili IP’ye bağlandığımda Arduino’daki seri monitörde merhaba dünya yazısını görüyorum ama tarayıcıya görüntü gelmiyor. Bununla ilgili bir çözüm öneriniz var mı?

  9. SERİ PORT EKRANINDA HERŞEY YOLUNDA GİDİYOR.SERVER OLUŞTURULUYOR.
    AT+CIPSERVER=1,80 GÖRÜYORUM.
    AMA İNTERNET TARAYICISINA GİRİP
    İP ADRESİMİ YAZINCA SAYFA AÇILMIYOR
    SERİ PORT EKRANINDA
    AT+CIPSEND=0,37 YAZIYOR VE ALTINDA
    Merhaba Dunya YAZIYOR.SAYFAYI HER AÇMAYA ÇALIŞTIĞIMDA AYNI ŞEYLER OLUYOR.

  10. String baglantiKomutu=String(“AT+CWJAP=\””)+Connectify-Local+”\”,\””+mstfydz16+”\””;
    ********************************
    sketch_mar04a.ino: In function ‘void setup()’:
    sketch_mar04a:14: error: ‘Connectify’ was not declared in this scope
    sketch_mar04a:14: error: ‘Local’ was not declared in this scope
    sketch_mar04a:14: error: ‘mstfydz16’ was not declared in this scope

    arkadaşlar bu hatayı alıyorum lütfen yardım edin.

  11. Yükle’ye bastığımda şu hataları alıyorum ve Seri port ekranında AT+CIPMUX=1 gibi komutlar çalışmıyor. Bağlantıyı değiştirdikten sonra komutlar çalışmadı yani kısacası.

    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    Karta yüklenirken sorun oluştu. Tavsiyeler için http://www.arduino.cc/en/Guide/Troubleshooting#upload adresine göz atabilirsiniz.
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x78
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x78

  12. Merhaba her şeyi dediğiniz gibi yapıyorum.Örnek olarak şöyle;
    AT
    AT+CWMODE=1
    AT+CWJAP=”xxxxxx”,”xxxxxxx”
    AT+CIPMUX=1
    AT+CIPSERVER=1,80

    Burada kalıyor.IP adresine gelen bir veri olmuyor.Sayfayı açtığımda hiç bir yazı göremiyorum.Sorun nedir ?

  13. IP aldım 192.168.1.113 tarayıcıya yazdığımda sayfaya ulaşılamıyor sayfası geliyor, farklı tarayıcılarla da denedim.

  14. Selamlar,
    Seri monitor ekranindan her turlu baglantiyi yapabiliyorum ama Serial.println ile gonderdigim AT komutlarina hic cevap alamiyorum.
    \r\n gondermeyi denedim, Serial.print denedim, Seri monitoru kapatip sunucuya baglanmayi denedim. bir sekilde olmuyor.
    yardim edebilir misiniz? 2 gun oldu kilitlendim

  15. Merhaba, karta yüklerken hata alıyorum.Yardımcı olabilirmisiniz.

    Çalışmanız programın 4464 bayt (13 %) saklama alanını kullandı. Maksimum 32256 bayt.
    Global değişkenler belleğin 346 byte kadarını (16%) kullanıyor. Yerel değişkenler için 1702 byte yer kalıyor. En fazla 2048 byte kullanılabilir.
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x9b
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x9b
    Karta yüklenirken sorun oluştu. Tavsiyeler için http://www.arduino.cc/en/Guide/Troubleshooting#upload adresine göz atabilirsiniz.

  16. Bu siteye ulaşılamıyor hatası alıyorum siteye girerken modem üzerinden baktığımda modeme bağlı gözüküyor esp8266

CEVAP VER