Posted by : MC 11 Temmuz 2015 Cumartesi


Merhabalar
Bu yazımızda esp8266 ile arduino üzerinden wifi bağlantısı üzerinde webserver olarak çalışmaktan bahsedeceğiz.

Esp8266 gerçtektende ucuz ve haberleşmesi basit bir wifi modül uygulaması.Aslına bakarsanız kendisine sadece wifi modül demek haksızlık olur.Esp8266 kendi başına çalışabilen başalı başına bir modül.İsterseniz Arduino yu es geçip direkt olarak esp8266 üzerinde uygulamalar geliştirebilirsiniz.Bunun için FTDI dönüştürücü birazda lua programlama bilgisi işinizi görecektir.

Biz gelelim asıl konumuz olan arduino nano ve esp8266 ile nasıl bir wireless webserver oluşturabiliriz.

Esp8266 seri haberleşme üzerinden basit AT komutları ile etkileşimde bulunur.Bunun içinde bizim bir seri haberleşmeye ihtiyacımız bulunmaktadır.Peki arduino nano üzerinde sadece 1 adet seri haberleşme bulunurken onu kullanmak doğru olacak mıdır?.

Onu kullanmamızdaki tek sakınca programlama esnasında arduino nano ve esp8266 arasındaki bağlantıyı koparma ihtiyacı doğmasıdır.Ancak bu durumda yardımımıza Software serial kütüphanesi koşmaktadır.Bu uygulamamızda bu kütüphane ile bir software serial birimi oluşturup,arduino ve esp8266 arasındaki bağlantıyı bu arabirim üzerinden sağlayacağız.

Esp8266 nın bir diğer güzelliği DHCP özelliği sayesinde sizin son olarak girmiş olduğunuz wireless ağının bilgilerini rom unda saklayarak yeniden enerjilendirilmesi halinde bile o ağa bağlanabilmesi.Bu ne demek herhangi bir aksilik olması yani sisteminizin enerjisinin kesilmesi durumunda esp8266 son ağ ayarlarını hatırlayarak  o ağa tekrar bağlanmayı başaracaktır.Tek sıkıntımız esp8266 her ağa tekrar bağlanışında farklı bir ip adresi alabilmektedir.Bunu çözmek içinde yazının başında bahsettiğimiz FTDI çevirici ve lua programlama bilgisine haiz olmanız gerekmektedir.

Peki Esp8266 üzerinden bir ağa nasıl bağlanırım ?
Aşağıda görmüş olduğunuz program sizin normal seri ekran üzerinden esp8266 ya AT komutlarını göndermenizi ve esp8266 tarafından size gelecek olan komutların yine aynı seri ekran üzerinden takip edilmesini sağlayacaktır.

#include <SoftwareSerial.h>
SoftwareSerial Serial1(10,11);//10RX,11TX pini oldu
void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
}
void loop()
{
  if(Serial1.available())
  {
    Serial.println(Serial1.readString());//esp8266 dan gelen veriler okundu
  }
  if(Serial.available())
  {
    Serial1.println(Serial.readString());//serial ekrandan esp8266 ya komut gönderildi
  }
}

At komutları nelerdir uzun uzadıya burada ondan bahsetmeyeceğim ilgilenen arkadaşlar At komutlarına buradan ulaşabilirler.

At komutları içerisinde bulunan AT+CWJAP="ağ adınız","ağ parolanız"

yukarıda görmüş olduğunuz serial birimlerle gerçekleştirdiğimiz programı arduino içerisine attıktan sonra seri ekranı açık yukarıdaki AT+CWJAP komu satırlarını giriyoruz.

Sonrasında bağlanılması durumunda esp8266 bize OK mesajı,aksilik olması durumunda ise FAILED mesajı döndürecektir.

Şimdi Esp8266 bizim ağımıza bağlı ve biz onun enejisi kesilse bile bizim ağımıza tekrar bağlanacağını biliyoruz.Sırada bizim modemimizden hangi ip adresini aldığını öğrenmek var.

Seri ekranı tekrar açıyoruz ve

AT+CIFSR komutunu gönderiyoruz.Bu komut sonrasında bize eğer ki esp8266 ağa bağlı ise bize almış olduğu ip adresini döndürecektir.

Esp8266 nın ağa bağlandığını ve ağda hangi ip adresine sahip olduğunu öğrendik gelelim asıl kodlarımıza

#include <SoftwareSerial.h>
SoftwareSerial Serial1(10,11);//10Rx,11Tx
void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);

  Serial.flush();
   Serial1.print("AT+RST\r\n");//esp8266 reset
   delay(500);
   Serial1.flush();
  Serial1.print("AT+CIFSR\r\n");//hangi ip adresini aldın
  delay(500);
  if(Serial1.find("ready"))
  {
    Serial1.flush();
     Serial1.print("AT+CIFSR\r\n");
  delay(500);
  Serial.println("CIHAZ IP ADRESI:"+Serial1.readString());//aldığın ipyi yazdır

  }
  else
  {
    Serial.println("INTERNET BAGLANTISI YOK");//ip yoksa bağlantı yok
  }
  Serial1.print("AT+CIPMUX=1\r\n");//mux 1 ile birden fazla client bağlansı
  delay(500);
  if(Serial1.find("OK"))
  {
    Serial.println("Mux BASARILI");//mux tamam
  }
  else
  {
    Serial.println("MUX basarisiz");//mux başarısız
  }
  Serial1.print("AT+CIPSERVER=1,23\r\n");//23 portu üzerinden tcp bağlantı başlat
  delay(500);
  if(Serial1.find("OK"))
  {
    Serial.println("SERVER BASLATILDI");
  }
  else
  {
    Serial.println("SERVER BASLATILAMADI");
  }

}

void loop()
{
      if(Serial1.available())//client tarafından gelen mesaj var mı ?
      {
          Serial.print(Serial1.readString());//client tarafıdan gelen verileri seri ekrana bastır.
      }
}

Bu projede dikkat edilmesi gereken çoğu esp8266 çipleri baud rate 9600 ile gelmektedir.Eğer ki sizin çipiniz farklı bir baud rate e sahipse ve arduinonun mevcut serial baud rate değerini aşmadığınız sürece yukarıdaki baud rate değerlerini sizin esp8266 çipinize göre ayarlamalısınız.

Sıkıntı yaşamanız durumuda ise FTDI dönüştürücü yardımı ile esp8266 içerisine bağlanarak firmware içerisinden baudrate i istediğiniz değere ayarlayabilirsiniz.

{ 3 Comments... read them below or Comment }

  1. İkinci verilen kodlarda SoftwareSerial Serial1(10,11);/10Rx,11Tx yerine
    SoftwareSerial Serial1(10,11);//10Rx,11Tx olması gerekiyor bir / eksik

    YanıtlaSil
    Yanıtlar
    1. yanlışlık yok hocam ters bağlanıyor onlar

      Sil
  2. Tamam da yani yazdığını kopyalayamadıktan sonra ne anlamı var. zaman kaybı.

    YanıtlaSil

ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger