Merhaba arkadaşlar, en son esp8266 wifi modülü ile server kurup, Merhaba Dünya yazdırmıştık. Şimdi ise biraz daha işleri zorlaştırıp sayfaya 2 tane buton ekleyeceğiz ve bu butonlar yardımı ile Arduino’nun üzerinde 13. dijital pine bağlı ledi yakıp söndüreceğiz.

Yapacağımız işlemlerin çalışma mantığından bahsedersek, önce Hypertext Markup Language(HTML) denilen ve web sayfalarını oluşturmak için kullanılan bir metin işaretleme dilini çok az da olsa kullanacağız. Bu dil, web sayfalarına yazı yazdırma, buton ekleme gibi özelliklere sahip. Bizde ledi yakıp söndüreceğimiz butonları bu dil ile yapacağız. Butona basıldığında açtığımız server, wifi modülümüze bir değer yollayacak ve daha önce belirlediğimiz bu değer geldiğinde led yakıp söndürülecek.

Bu uygulamada kullanacağımız malzemeler şunlar:

Bu malzemelere ek olarak kullanacağımız araçlar şunlardır:

Derse başlamadan önce eğer AT Komutlarının nasıl kullanılacağını bilmiyorsanız buraya tıklayıp ilgili konuyu inceleyebilirsiniz. Veya ESP modülüne özel IP adresini bilmiyorsanız bir önceki yazıdan nasıl bulunacağına bakabilirsiniz.

Derste kullanacağımız HTML kodlarrından bahsetilirse;

Öncelik olarak her html kod parçası, <html> şeklinde büyüktür ve küçüktür işaretleri içine yazılır ve işlem bittikten sonra </html> şeklinde kapatılır.

<head> Hello World </head>

<head> : Sayfamız hakkında bilgilerin bulunduğu bir etikettir. 

<br> : Satır atlamaya yarar. Bir nevi enter tuşudur. Fakat herhangi bir kapatma komutu yoktur. Yani bu koddan sonra </br> gibi bir komut yazmayacağız.

<button type=’button’> : Web sitesi üzerinde buton oluşturur ve </button> şeklinde kapatılması gerekmektedir.

<a href= : Site içerisine veya buton içerisine bir link verir.

Projede kullanacağımız html kodları bu kadar.

Arduino Bağlantı Şeması:

ESP8266-bağlantı-şeması-1-696x381-1-696x511

Bağlantıları bu şekilde yaptıktan sonra Aşağıdaki kodu Arduino’ya yüklememiz gerekiyor.

NOT: RX ve TX pinleri takılı iken Arduino’ya kod atılamıyor, RX ve TX pinlerini çıkartıp kod attıktan sonra tekrar takmamız gerekmekte.

Kod içerisinde bir tane daha önce kullanmadığımız komut var. indexOf komutu.

degisken.indexOf(); komutu bir string içerisinde başka bir string parçasını aramaya yarar. Bulursa o değeri, bulamaz ise -1 değerini döndürür.

#define ag_ismi "Wifi Adresi"
#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.
  pinMode(13,OUTPUT);
  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");
   delay(200);
   Serial.print("AT+CIPSERVER=1,80\r\n");
   delay(1000);
}
void loop(){
  if(Serial.available()>0){
    if(Serial.find("+IPD,")){
      String metin = "<head> Hello World </head>";
      metin += "<br><a href=\" ?pin=on\"><button type='button'>ON</button></a>"; 
      metin += "<br><a href=\" ?pin=off\"><button type='button'>OFF</button></a>";      
      String cipsend = "AT+CIPSEND=";
      cipsend +="0";
      cipsend +=",";
      cipsend += metin.length();
      cipsend += "\r\n";
      Serial.print(cipsend);
      delay(500);
      Serial.println(metin);
      led_yakma();
      Serial.println("AT+CIPCLOSE=0");
      
    }
  }
}

void led_yakma(){
 String gelen ="";
 char serialdenokunan;
 while(Serial.available()>0){
 serialdenokunan = Serial.read();
 gelen +=serialdenokunan;
 
 }
 Serial.println(gelen);
 if((gelen.indexOf(":GET /?pin=on")>1)){  //on butonuna basıldığında server adresinde /?pin=on var ise
  digitalWrite(13,HIGH);                  //ledi yakar
 }
  if((gelen.indexOf(":GET /?pin=off")>1)){ // off butonuna basıldığında server adresinde /?pin=off var ise
  digitalWrite(13,LOW);                    //ledi söndürür
 }
 }

Kod üzerinde wifi ismi ve şifresi gibi gerekli değişiklikleri yaptıktan sonra Arduino’ya yüklüyoruz ve aşağı yukarı 10 saniye sonra server açılmış oluyor(Kod içerisindeki delay yani bekleme komutlarından dolayı). Server açıldığında aşağıdaki gibi gözükecektir.

server_gorunusu

Sırası ile OF ve OFF butonlarına basıldığında ise aşağıdaki gibi link değişecek ve Arduino’ya veri yollayacaktır.

off_butonuna_basilinca_goruntu on_butonuna_basilinca_goruntu

NOT: HTML bilgim yetersiz olduğu için en fazla bu şekilde bir site oluşturabildim. HTML konusunda sizde benim gibi iseniz şu siteden yardım alabilirsiniz.

71 Yorumlar

    • Merhaba, ağ adı ve şifresini yazarken tırnak işaretlerini kaldırmadığınıza emin misiniz? Hatayı yazarsanız daha doğru bir cevap verebilirim.

    • Teşekkür ederim Orhan Bey benim de sorunum sunucunun sorunlu(sayfanın yüklenmemesi vb.) ve sayfanın sürekli yenileniyor vaziyette olmasıydı. 2 saniyelik gecikme sorunu halletti.

  1. ilk açıldığında düzgün çalışıyor fakat kısa bir süre sonra sayfa görüntülemiyor mesajı alıyorum. bir daha bağlanamıyorum. reset attıgım zaman seri port ekranınını açmadan tekrar aktif olmuyor. bir çalışıp bir çalışmıyor

  2. Abi şimdi bu butonların yanında benim gaz sensorunden yararlanarak gaz algilandiginda gaz var algilanmadiginda stabil yazdirmam gerekiyor bu kodlarda ne gibi değişiklikler yapmam gerek bu proje benim için çok önemli ustalardan ve adminden yardım bekliyorum. Teşekkürler.

  3. Abilerim kablosun ağ kurmayı Access point ı de gosterecekmisiniz hiç bir yerde bulamadım da birde bağlanmayı değil de kablosuz ağ oluşturmayı yaptığımızda yine devre semasi aynimi olur yoksa rx tx ı de 3.3 volt mu düsurmemiz gerekir bazi yerlerde rx tx için de dusurulmeli diyorlar direkt baglarsam arduino uno ya yanarmi

  4. Merhabalar. Yazınız için çok teşekkürler son derece faydalı.Bir sorum olacaktı esp8266 ile server kurulumunu gerçekleştirdim.Bu kurduğum servera atardığım bilgileri java oluşturduğum cliente nasıl çekebilirim.Bununla alakalı yardımcı olabilir misiniz veyahut yönlendirebileceğiniz bir kaynak var mı?

    • Merhabalar. Yazınız için çok teşekkürler son derece faydalı.Bir sorum olacaktı esp8266 ile server kurulumunu gerçekleştirdim.Bu kurduğum servera aktardığım bilgileri, javada oluşturduğum cliente nasıl çekebilirim.Bununla alakalı yardımcı olabilir misiniz veyahut yönlendirebileceğiniz bir kaynak var mı?

  5. BU KODLARI ÇİPE YÜKLEMEYECEK MİYİZ? ARDUİNONUN ÇİPİNE YÜKLEDİM BAĞLANTILARI YAPIP. COMPORTTAN AÇMAYACAK MIYIZ? BİRAZ DETAYLI ANLATIRSANIZ.

  6. merhabalar peki internet olarak sunucuya nasıl bağlanabilirim herşeyi soylemişsiniz bir tek onu söylememişsiniz rica etsem onuda söylermisiniz.

  7. Arkadaşlar Normalde Serial Porttan bağlantı kuruyorum ben fakat bu kodları arduinoya yükleyip yaptınca server açılmıyor ama normalde serial porttan server falan kurunca herşey yerinde oluyor fakat bu sefer serial porttan diger ayarlamaları yapamıyorum Biraz daha yardımcı olabilirseniz sevinirim

  8. merhaba
    arduino yu her açıp kapattıgımızda veya modemi acıp kapattıgımızda yeniden ip alıyor acaba ip yi nasıl sabitleyebiliriz

    • Modemin DHCP ayarlarından arduinonun mac adresine sabit ip verebilirsiniz. Bu sayede mopdem kapanıp açıldığında arduinonun local ipsi değişmemiş olur.

  9. bütün bağlantılar ve kodlar aynı olduğu halde sayfa görüntülenemiyor diyo.
    yerel ağda ESP nin IP sini yazdığımda server a bağlanamıyorum.
    neden olabilir ? Çözümü nedir ?

  10. Programı yükledim . Devreyi kurdum . Yalnız serial monitorde AT yazıyor başka birşey yok url ye giriyorum ordada bişey yak sizce sıkıntı nedir .

  11. Programı çalıştırdıktan sonra seri port ekranında AT, AT+CIPMUX=1 , AT+CIPSERVER=1,80 komutlarını geri döndürüyor. Ancak bu aşamadan sonra web sayfasını oluşturmuyor. Yardım için teşekkürler.

  12. Merhaba;

    Benim bir sorum olacakti. Arduino uno nun (2,3) pinlerini software serial kullanrak ESP8266 nin uart i ile konusturmak istiyorum.
    1. soracagim. Baudrate 115200 olabilir mi yoksa 9600 mu secmek iyi?
    2. soracagim. Ben lambayi_yak gibi uzun bir string data yi esp den nasil gonderirim, uno da bunu nasil okurum? Baya ugrastim bir sorun var. iki arduino ile bu istedigimi yapiyorum ayni kodlarla. Fakat 1 arduino bir esp ile ayni sekilde calismiyor. Neden olabilir, hata nerde olabilir?

    • Soft serial kullanıyorsanız genellikle 38400 baud üzerindeki hızlara çıkmanız pek önerilmez. Bu yüzden 9600 seçmeniz daha mantıklı olacaktır. UART’tan gelen veriyi Arduino’da Serial.readString() komutu ile okuyabilirsiniz. Karşılaştığınız sorun, ESP8266’nın lojik seviyesinin 3.3V, Arduino’nun 5V olmasından kaynaklı da olabilir. Arada bir lojik seviye çevirici kullanmayı deneyebilirsiniz.

  13. Konunun açılış tarihi çok eski biliyorum ama yazdım edeceğinizi düşünerek , öncelikle merhaba bnim yapmak istediğim proje aruinoya buttonlar bağlicam ve bu butonlara tıklayınca kurulan sidedeki birtakım verileri değiştiricek örneğin bit yazıyı ve bu yazıya bnim bilgisayardan kodladığım .exe uzantılı uygulama okuyabilecek . Yani ortada bir site olacak aruino oraya veri yollicak ve programda bunu çekicek . Eğer arduino ile veri yollamayı yapabilirsem program ile o bilgiyi okutabilirim diye düşünüyorum . Böyle bir şey yapmam mümkünmüdür . Yardımcı olursanız sevinirim . Şimdiden teşekkürler .

  14. Robotistan ekibi selamlar, çok güzel açıklamalar okudum. İlk önceleri ESP8266 elektronikçi arkadaşların daha çok ilgisini çekecek. Kablolu iletişime son. Hem de wi-fi

  15. Selam. Bu işlemi yaptıgımızda 5 kere ıslem yaptıktan sonra bir daha hamle yapamıyorum. Serial monıtorde gelen degere bakıyorum en son 4,178 oluyor 5. hamlede ondan sonra ıslem yapılmıyor. sebebi ne olabılır?

  16. Hocam kablosuz iletişimi belli bir mesafede servo kontrolünü herhangi bir buton olmadan wifi yada Bluetooth modülü ile yapabilirmiyim yardımcı olabilirmisiniz

    • Yapabilirsiniz. Tam olarak nasıl bir çözüm aradığınızı anlayamadım, biraz daha detay vermeniz mümkün mü?

      • Servo ile otopark ödevim var araç belli mesafeye geldiği zaman servo 90 derece kalkıcak belli süre sonra araç geçtikten sonra kapanıcak ve bunu buton veya başka bir kontrol olmadan Bluetooth veya wifi gibi modüllerle yapmam getekiyor telefondan Bluetooth ile kontrolünü yaptım ama otomatik olarak nasıl yapabilirim

  17. Bağlantıyı birebir yapmama rağmen sonuç alamıyorum. Anlatım çok kapalı. Sorun nedir çözemedim. Hayatımda ilk defa böyle bir shield’a rastladım ve bir yaşıma daha girdim.

  18. İyi akşamlar kurduğum web server da fotoğraf koymak istiyorum fakat html kodlarını nasıl koyacağım arduino ya onu çözemedim yardım eder misiniz?

  19. Yaptım devreyi falan kurdum.

    2 şey var.

    1 İlk başta bi çalıştı şimdi sayfa gelmiyor modemden kontrol ediyorum bağlanıp IP alıyor IP browser a yazınca sayfa gelmiyor

    2 Çalıştığı zaman şöyle br sorun çıkıyor karşımıza ON butonuna basınca örn 192.168.1.55/?pin=on sayfasına yönleniyor öyle bir sayfa olmadığından sayfa bulunamadı hatası veriyor haliyle

    • Raspberry Pi üzerinde yer alan UART pinleri (TX ve RX) ile bağlantı yaparak ve Raspberry Pi üzerinde minicom ya da benzer bir seri terminal uygulaması kullanarak haberleşme yapabilirsiniz.

  20. İyi günler arkadaşlar. Yukardaki işlemi eksiksiz uyguladım. Bir sorun ile karşılaştım yardımcı olursanız sevinirim. Karşılaştığım sorun şu arduino seri port ekranına girmeden hiç bir şekilde IP sitesine giriş yapamıyorum. Belkide sistem çalışmıyor bundan dolayı. Bu durumu nasıl çözebilirim? Seri port ekranına girmeden sadece ceryan vererek IP adresime ulaşmak istiyorum çözümler için şimdiden çok teşekkür ederim.

  21. AT
    AT+CIPMUX=1
    AT+CIPSERVER=1,80
    bende böyle diyor ne yapsam olmuyor ıhopy one ile deniyorum kartı 3.3 volta aldım ama olmuyor AT yazıyom cevap yazmıyor ne yazsam cevap yok çözüm nedir? birde güncelleme olayını beceremedim olmadı ondan mı acep

  22. BEN AT KOMUTLARINI SERİ PORT EKRANINA YAZIP GÖNDERDİĞİMDE BİR CEVAP ALAMIYORUM. AYARLARINDA BAZI DEĞİŞİKLİKLER YAPTIM. 115200 BAUT YAPTIĞİMDA ………. ŞEKLİNDE GİDİYOR AMA BEN DAHA AT KOMUDUNU YAZMADIM AT KOMUDUN yazdığımdada bir değişiklik olmuyor 250000 baut yaptığımda ise⸮⸮⸮⸮⸮⸮⸮⸮⸮ şeklinde gidiyor. genel ayarlarım ise nodemcu0.9(esp-12 modüle) . uploat speed ise 115200 ,CPU frequency 80 mhz , flash size m4(spffsp) , debug port ise serial 1 ,
    debug level hiçbiri . ıwıp variant w2 lower memory , erase flash skatch +wifi setting , programcı AVRISP mkıı olarak ayarladım ve bu sorunu yaşıyorum sorun nedir nasıl yapabiliri yardım ederseniz sevinirim

  23. Bu siteye ulaşılamıyor 192.168.2.4 ana makinesinin yanıt vermesi çok uzun sürdü.
    Aşağıdakileri deneyin:

    Bağlantınızı kontrol etme
    Proxy’yi ve güvenlik duvarını kontrol etme
    Windows Ağ Teşhislerini Çalıştırma
    ERR_CONNECTION_TIMED_OUT

    böle bir hata sebebiyle servera giremiyorum

  24. Uygulamalar çok güzel hepsi de çalıştı. Elinize sağlık daha kapsamlı ve geniş uygulamalar da bekliyoruz. Emeğinize sağlık.

  25. Kendi yapacağım bir uygulamaya veri göndermek istiyorum. Bunu nasıl sağlayabilirim? çok önemli bilen birisi varsa yardımcı olabilir mi?

  26. merhaba
    nodemcudan arduino nanoya veri göndermek istiyorum. nodemcunun rx tx uçlarını arduinonun rx ve tx uçlarına çapraz bağladım. cep telefonundan veri gönderdigim zaman arduino nanoda motorları kontrol etmek istiyorum acil yardım. yardımcı olursanız sevinirim.

  27. Merhaba arkadaşlar ben daha yeni başladım internetten led yakmak kodu buldum ama bende ardunio uno dahili fiwi modülü içinde ama çıkış pinleri uymuyor yardımcı olurmusunuz nerde hata yapıyorum.

    // Load Wi-Fi library
    #include
    // Replace with your network credentials
    const char* ssid = “Asus”;
    const char* password = “28001724”;
    // Set web server port number to 80
    WiFiServer server(80);

    // Variable to store the HTTP request
    String header;

    // Mevcut çıkış durumunu depolamak için bilinen değişkenler
    String output5State = “off”;
    String output4State = “off”;
    String output14State = “off”;
    String output12State = “off”;

    //Variables gestion compteur
    int Etat_D8; // D8 girişinin durumunu kaydeden değişken
    boolean memoire=0; // D8 girişindeki sekmeleri gizlemek için kullanılacak bellek biti
    long cpt = 0; // nabız sayacı

    // GPIO pinlerine çıkış değişkenleri atama
    int Led5 = 5; //GPIO5 – D1 – Relais 1
    int Led4 = 4; //GPIO4 – D2 – Relais 2
    int Led14 = 14; //GPIO14 – D5 – Relais 3
    int Led12 = 12; //GPIO12 – D6 – Relais 4
    int impulsion = 15; //GPIO15 – D8 – Compteur WATTS
    long variable = 0;
    void setup() {
    Serial.begin(115200);

    // Çıkış değişkenlerini çıkış olarak başlat
    pinMode(Led5, OUTPUT);
    pinMode(Led4, OUTPUT);
    pinMode(Led14, OUTPUT);
    pinMode(Led12, OUTPUT);
    pinMode(impulsion, INPUT);

    // Çıkışları LOW olarak ayarlayın
    digitalWrite(Led5, LOW);
    digitalWrite(Led4, LOW);
    digitalWrite(Led14, LOW);
    digitalWrite(Led12, LOW);

    // Connect to Wi-Fi network with SSID and password
    Serial.print(“Connecting to “);
    Serial.println(ssid);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(“.”);
    }
    // Print local IP address and start web server
    Serial.println(“”);
    Serial.println(“WiFi connected.”);
    Serial.println(“IP address: “);
    Serial.println(WiFi.localIP());
    server.begin();
    }

CEVAP VER

Please enter your comment!
Please enter your name here