arduino ESP8266

ESP8266’DA ARDUINO IDESİNİ KULLANARAK WİFİ ADI VE ŞİFRESİNİ EEPROMDA KAYDETME

Bu yazımda daha önce yazmış olduğum stamod ve apmod arasındaki geçiş yapan çalışmanın devamını anlatacağım. Burada esp8266 modülümüz eepromda wifi ve şifre’yi kaydedecektir. Ancak eepromda başta hiç kayıt yoksa veya mevcut kayıtla 10 saniye sonra otomatik olarak access point moda geçer ve wifiden bir bağlantı beklemeye başlar bağlantı kurulunca gelen mesajı analiz eder ve wifi adını ve şifreyi okuyup eeproma kaydeder ardından station modda çalışıp wifiye bağlanır.

————————————–DUYURU—————————————————-

e-mail: fatih22alparslan@gmail.com

Ücret karşılığı proje için whatsapp:

+905304471674

https://wa.me/message/4DTQQTTMLPFWC1

 

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <EEPROM.h>//EEPROM fonksiyonları için ekledik.
WiFiServer wifiServer(80);//wifi server 80 porttan çalışacak
int i=0;//stamod fonksiyonundaki for döngüsü için kullanılacak
int j=0;//wifi bağlantısı kontrolü için oluşturulan for döngüsünde kullanılmıştır.
bool apmoddurum,stamoddurum,conn=false,degis=false;//
const char *APssid = "esp_erisim";
const char *APpassword = "espsifre";

char ssid[30] = "";
char password[30]= "";

AP_ssid ve AP_password  değişkenlerini access point mode için kullanacağız. ssid ve password değişkenlerine ise bağlanacağımız wifi adını ve şifresini atayacağız.

void stamod(){
WiFi.softAPdisconnect();
WiFi.mode(WIFI_STA);
for(int i=0;i<10;i++){
WiFi.begin(ssid,password);
}
stamoddurum=1;
apmoddurum=0;
delay(10000);
Serial.print("stamoddurum:");
Serial.println(stamoddurum);

}

Yukarıdaki stamod fonksiyonu WiFi.softAPdisconnect() ile access point modu bitirilir. Wifi modu station mod olur. bir for döngüsüyle wifiye 10 defa bağlanmaya çalışılır. 10 stamoddurum değişkeni 1 ,apmoddurum değişkeni 0 yapılır.

void setup() {
Serial.begin(115200);
EEPROM.begin(512);
read_string(30,0).toCharArray(ssid,30); 
read_string(30,100).toCharArray(password,30); 

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
stamoddurum=1;
apmoddurum=0;
delay(10000);


Serial.println(ssid);
Serial.println(password);

 wifiServer.begin();
}

Seri haberleşme 115200 baud rate ile başlatıldı. EEPROM fonksiyonları 512 kb için aktif edildi(esp-01). kullandım.  read_string fonksiyonları EEPROMdan ssid ve şifreokunup char dizisine çevirilip, ssid ve password değişkenlerine atandı. stamoddurum=1, apmoddurum=0 yapıldı.

void loop() {

if( (WiFi.status()==1)&(apmoddurum==0)){
WiFi.disconnect();
apmoddurum=1;
WiFi.softAP(APssid, APpassword);
stamoddurum=0;
  }

Yukarıda void loop tanımlanmış olunup eğer wifi ile bağlantı kurulmamışsa ve daha önce acces point moda girilmemiş ise stamod için wifi bağı WiFi.disconnect() kesilir. apmoddurum=1,stamoddurum=0 yapılır. WiFi.softAP(APssid, APpassword) fonksiyonu ile bir erişim noktası oluşturulur.

if(apmoddurum==1){

  char wifiadi[30]="";
  char pass[30]="";
  WiFiClient client = wifiServer.available();
 
  if (client) {
 
    while (client.connected()) {
 
      while (client.available()) {
        char c = client.read();
        Serial.write(c);

        
  if(c=='#'){
    degis=true;
    i=0;
    }else{
  if(degis==false){
    wifiadi[i]=c;
    i++;
    }else{
      pass[i]=c;
      i++;
    }
    }
    }
    }
    degis=false;
    i=0;
    
    client.stop();
  write_to_Memory(String(wifiadi),String(pass));
  
stamod();
  }
  
  }

  delay(1000);

}

Yukarıda Eğer acces point modu aktif ise EEPROMa  ssid ve wifi şifresini taşıyacak değişkenler oluşturuldu. Eğer server yeni bağlantılara hazır ve ardından bağlandığı istemciden veri gelirse, gelen mesajın(tcp/udp) # işaretine kadar olan kısmı ssid ,# işaretinden sonraki kısmı ise şifre olarak eeproma kaydedilir. En son olarak stamod fonksiyonu çalıştırılarak alınan şifre ve ssid ile bir ağa bağlanılmaya çalışılır.

Aşağıda hafızaya veri yazma ve okuma fonksiyonları bulunur.

void write_to_Memory(String s, String p) {
  s += ";";
  write_EEPROM(s, 0);
  p += ";";
  write_EEPROM(p, 100);
  EEPROM.commit();
}

void write_EEPROM(String x, int pos) {
  for (int n = pos; n < x.length() + pos; n++) {
    EEPROM.write(n, x[n - pos]);
  }
}

String read_string(int l, int p){
  String temp;
  for (int n = p; n < l+p; ++n)
    {
     if(char(EEPROM.read(n))!=';'){
        if(isWhitespace(char(EEPROM.read(n)))){

        }else temp += String(char(EEPROM.read(n)));
      
     }else n=l+p;
     
    }
  return temp;
}

 

23/04/2017 İSTANBUL

1071053-dennis-ritchie-i-m-still-uncertain-about-the-language-declaration-syntax

ESP8266’DA ARDUINO IDESİNİ KULLANARAK WİFİ ADI VE ŞİFRESİNİ EEPROMDA KAYDETME&rdquo için 1 yorum

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

%d blogcu bunu beğendi: