Duyuru

Çöküş
Henüz duyuru yok

Web Update, Deneyap Mini, Sabit IP, Deneyim paylaşımı

Çöküş
X
 
  • Filtrele
  • Zaman
  • Göster
Hepsini Sil
yeni mesajlar

  • Web Update, Deneyap Mini, Sabit IP, Deneyim paylaşımı

    Merhaba,

    Birkaç gün uğraştığım ve sonunda başarabildiğim konuyu mümkün olduğunca detaylı anlatmak istiyorum.
    Umarım benim gibi acemilere bir yol gösterir ve içerik anlamında foruma katkı sağlar.

    Uygulamayı Deneyap Mini üzerinde denedim.

    Gerekliler:
    Deneyap Mini
    Arduino IDE
    Bağlanabileceğimiz bir kablosuz ağ bağlantısı (modem/Router)
    USB data kablosu

    Öncelikle ilk aşama:
    * Aşağıdaki kodda "ssid" ve "password" kısımlarını değiştirip kartımıza ilk seferde usb kablo üzerinden atıyoruz . (İşlem tamamlandığında kabloyu çıkarabiliriz. )
    * Denemek için kartımıza enerji verip, internete bağlanması için biraz bekliyoruz.
    * Bilgisayarımızda tarayıcıyı açıp adres kısmına tırnaklar olmadan "192.168.1.199" yazıyoruz. (Denediğim tarayıcı [firefox] IP adresinin başına "https://" ekliyor. Bunu silmediğimde hata verdi. )
    * Kullanıcı adı ve şifre isteyen bir sayfayla karşılaştıysak işlem muhtemelen tamamdır. Burada kullanıcı adı 'admin' ve şifre de 'admin' dir.
    * Gelen sayfada üstlerinde 'Browse' ve 'Update' yazan iki buton olmalı.

    Daha Sonrası:
    * Aynı uygulamanın "web server" ile alakalı kısımlarına dokunmadan çalıştırmak istediğimiz kodu ekliyoruz. (Bu kısmı farklı kaydetmenizi tavsiye ederim. İleride tekrar kullanabilmenizi kolaylaştır.)
    * Bu sefer arduino IDE menüsünde 'Sketch / Export compiled Binary' ye tıklıyoruz. (Bir hata yoksa Arduino IDE derlemeyi tamamlayıp dosyayı arduino sketcimizle aynı klasöre kaydedecek.)

    * Tarayıcımıza dönüp 'Browse' butonuna tıklıyoruz. Sketchimizi kaydettiğimiz klasöre gidip 'bin' uzantılı dosyamızı seçiyoruz.
    * 'Update' butonuna tıklayıp tamamlanmasını bekliyoruz.

    Kartımız işlemden sonra kodumuzu çalıştırmaya başlamalı.
    Deneyap mini ile gelen örnek kodda ufak değişiklikler yaptım. Modemden sabit IP almasını sağladım. Test amacıyla Deneyap Mini üzerinde bulunan ledleri kullandım.
    Aşağıdaki 'IPAddress local_IP(192, 168, 1, 199);' satırında sabit IP adresi belirledim. Siz bu adresi modeminize uygun şekilde değiştirebilirsiniz. (dikkat! aralarda nokta [.]değil virgül[,] var !)
    Çalıştırmak isteğim kodun başına "//********************************" satırları daha sonradan bulmam kolay olsun diye ekledim.
    Farklı kaynaklardan okuduklarıma göre uzun (>1000ms) delay süreleri güncelleme yapmaya engel olabiliyormuş.

    Not: İmla ve kodlamada hatalar olabilir. Acemiliğime verin...

    Kod:
    /*
    * WebtenFirmwareGuncelleme örenği,
    * Bu uygulamada seri port ekrana yazan IP adresini tarayıcı yazılması gerekmektedir.
    * Açılan ekranda kullanıcı adına "admin" şifre yerine "admin" yazarak giriş yapılmaktadır.
    * Daha sonra açılan ekran ile güncelleme işlemi gerçekleştirilmektedir.
    *
    */
    #include <WiFi.h>
    #include <WiFiClient.h>
    #include <WebServer.h>
    #include <ESPmDNS.h>
    #include <Update.h>
    
    // Define an SSID name and a password to access the ESP32 access point.
    
    const char* ssid = "Wifi SSID";
    const char* password = "Wifi Şifreniz";
    
    const char* host = "deneyap";
    
    WebServer server(80);
    
    /*
    * Login page
    */
    
    const char* loginIndex =
    "<form name='loginForm'>"
    "<table width='20%' bgcolor='A09F9F' align='center'>"
    "<tr>"
    "<td colspan=2>"
    "<center><font size=4><b>Deneyap Kart Oturum Acma Ekrani</b></font></center>"
    "<br>"
    "</td>"
    "<br>"
    "<br>"
    "</tr>"
    "<tr>"
    "<td>Kullanic adi:</td>"
    "<td><input type='text' size=25 name='userid'><br></td>"
    "</tr>"
    "<br>"
    "<br>"
    "<tr>"
    "<td>Sifre:</td>"
    "<td><input type='Password' size=25 name='pwd'><br></td>"
    "<br>"
    "<br>"
    "</tr>"
    "<tr>"
    "<td><input type='submit' onclick='check(this.form)' value='Login'></td>"
    "</tr>"
    "</table>"
    "</form>"
    "<script>"
    "function check(form)"
    "{"
    "if(form.userid.value=='admin' && form.pwd.value=='admin')"
    "{"
    "window.open('/serverIndex')"
    "}"
    "else"
    "{"
    " alert('Kullanici adi ya da sifre hatasi')/*displays error message*/"
    "}"
    "}"
    "</script>";
    
    /*
    * Server Index Page
    */
    
    const char* serverIndex =
    "<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>"
    "<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
    "<input type='file' name='update'>"
    "<input type='submit' value='Update'>"
    "</form>"
    "<div id='prg'>progress: 0%</div>"
    "<script>"
    "$('form').submit(function(e){"
    "e.preventDefault();"
    "var form = $('#upload_form')[0];"
    "var data = new FormData(form);"
    " $.ajax({"
    "url: '/update',"
    "type: 'POST',"
    "data: data,"
    "contentType: false,"
    "processData:false,"
    "xhr: function() {"
    "var xhr = new window.XMLHttpRequest();"
    "xhr.upload.addEventListener('progress', function(evt) {"
    "if (evt.lengthComputable) {"
    "var per = evt.loaded / evt.total;"
    "$('#prg').html('progress: ' + Math.round(per*100) + '%');"
    "}"
    "}, false);"
    "return xhr;"
    "},"
    "success:function(d, s) {"
    "console.log('success!')"
    "},"
    "error: function (a, b, c) {"
    "}"
    "});"
    "});"
    "</script>";
    
    /*
    * setup function
    */
    //************************************************** ************************************************** **********************
    #define ledB D14
    #define ledG D15
    #define ledR D16
    
    void setup(void) {
    Serial.begin(115200);
    
    // Set your Static IP address
    IPAddress local_IP(192, 168, 1, 199);
    // Set your Gateway IP address
    IPAddress gateway(192, 168, 1, 1);
    
    IPAddress subnet(255, 255, 0, 0);
    IPAddress primaryDNS(8, 8, 8, 8); //optional
    IPAddress secondaryDNS(8, 8, 4, 4); //optional
    // Configures static IP address
    if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
    Serial.println("STA Failed to configure");
    }
    
    wifiRouterconnection();
    
    Serial.println("");
    
    
    /*use mdns for host name resolution*/
    if (!MDNS.begin(host)) { //http://esp32.local
    Serial.println("mDNS yanitlayici hatasi!");
    while (1) {
    delay(1000);
    }
    }
    Serial.println("mDNS yanitlayici baslatildi");
    /*return index page which is stored in serverIndex */
    server.on("/", HTTP_GET, []() {
    server.sendHeader("Connection", "close");
    server.send(200, "text/html", loginIndex);
    });
    server.on("/serverIndex", HTTP_GET, []() {
    server.sendHeader("Connection", "close");
    server.send(200, "text/html", serverIndex);
    });
    /*handling uploading firmware file */
    server.on("/update", HTTP_POST, []() {
    server.sendHeader("Connection", "close");
    server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
    ESP.restart();
    }, []() {
    HTTPUpload& upload = server.upload();
    if (upload.status == UPLOAD_FILE_START) {
    Serial.printf("Guncelleme: %s\n", upload.filename.c_str());
    if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
    Update.printError(Serial);
    }
    } else if (upload.status == UPLOAD_FILE_WRITE) {
    /* flashing firmware to ESP*/
    if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
    Update.printError(Serial);
    }
    } else if (upload.status == UPLOAD_FILE_END) {
    if (Update.end(true)) { //true to set the size to the current progress
    Serial.printf("Guncelleme basarili: %u\nYeniden baslatiliyor...\n", upload.totalSize);
    } else {
    Update.printError(Serial);
    }
    }
    });
    server.begin();
    
    
    //************************************************** ************************************************** **********************
    pinMode (ledB,OUTPUT);
    pinMode (ledG,OUTPUT);
    pinMode (ledR,OUTPUT);
    }
    
    void loop(void) {
    server.handleClient();
    delay(1);
    //************************************************** ************************************************** *********************
    analogWrite (ledR, 25);
    delay(100);
    analogWrite (ledR, 0);
    delay(100);
    analogWrite (ledG, 25);
    delay(100);
    analogWrite (ledG, 0);
    delay(100);
    analogWrite (ledB, 25);
    delay(100);
    analogWrite (ledB, 0);
    delay(100);
    }
    
    
    void wifiRouterconnection() {
    
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected");
    
    Serial.println(WiFi.localIP());
    }
Hazırlanıyor...
X