esp8266 statik ip

Başlatan burç tankal, 11 Şubat 2018, 17:53:18

burç tankal

Arkadaşlar uzun zamandır öğrenmek istediğim wifi modülümle biraz vakit buluduğum içim birşeyler yapmaya başladım. Şimdilik HTML kodları ile "hello world" yazdırıp buna yerel ağdan ve genel ağdan ulaşmak yeterli olacaktır. İnternetteki anlatımları kullanarak bunu başardım. Arduino üzerinden hazır kod kullanıyorum. İlk olarak ESP8266Flasher-x86-v0.9.2.3 programını kullarak eso modülünü update ettim. (statik ip verebilmek için şartmış sanırım) daha sonra ESP8266 User Program Ver1.1 kullanarak AT+CIPSTA="192.168.1.157" istediğim ip'yi verdim ve AT+CIPSTA? komutu ile bu adresi aldığını doğruladım. Tabi modülün enerjisini kesip verdiğimizde verdiğim ip'nin sabit kalmadığını farkettim. Sanırım her seferinde AT komutu ile baştan ip vermek gerekiyor. Ancak zaten arduino ile kullanacağım için AT+CIPSTA komutunu koda gömersem her açılışta aynı ip'yi alacağını düşündüm. Bu komutun yazımından da tam emin değilim.
kimi yerde 3 parametreli       : Serial.println("AT+CIPSTA=\"192.168.1.88\",\"192.168.1.1\",\"255.255.255.0\"");
kimi yerde de tek parametreli: Serial.println("AT+CIPSTA=\"192.168.1.88\"");
olarak belirtilmiş. Tabi bu komutu programıma eklediğimde modül çalışmamaya başlıyor, sildiğimde ise kafasına göre bir ip alıp gayet düzgün çalışıyor. Sizlere sorum Esp8266 modülüne sabit bir ip verebilmek için aşağıdaki hello world projesinin neresine hangi kodu eklemem gerektiği.

#define ag_ismi "xxxxxxxxxxxxx"
#define ag_sifresi "xxxxxxxxxxx"
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);  

     //KAFAMA GÖRE EKLEDİĞİM ANCAK ÇALIŞMAYAN KOMUTLAR BUNLAR
     //Serial.println("AT+CIPSTA=\"192.168.1.88\",\"192.168.1.1\",\"255.255.255.0\"");
     //Serial.println("AT+CIPSTA=\"192.168.1.88\"");
     //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.
    }
  }
}


Yardımlarınız için şimdiden teşekkür ederim.

mehmet

Bana göre;
Dhcp aygıtları sabit ip vermelidir. Eğer
kendi kendine ip tanımlamasını yaparsa,
değişim olan ağda uyumsuzluk ve ip
çakışması olabilir.
Bu nedenle mac id öğrenilip; modem, router, vs.
ile bu ağ cihazının sabit ip alması sağlanabilir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

burç tankal

Haklısınız, mac ile sabit ip vermek daha sağlıklı olabilir. Aklıma takılan bir diğer konu da arduino rx ve tx pinleri 5v olduğu halde nasıl olur da direk bu modüle bağlayabiliyoruz. 3.3v'nin geçilmemesi gerektiği bahsediliyor ancak bu pinler direk arduino'ya bağlanıyor. Acaba yanlış mı yapıyorum?

mg1980

Arduino Tx pinine 1-2k ohm.ile gerilim bölücü yaparak kullanmıştım.

burç tankal

Evet kimi yerde o şekilde de kullanılıyor, ancak direk de bağlanabiliyor. Direk bağlamak sıkıntılı mı acaba?