цифровая электроника
вычислительная техника
встраиваемые системы

 

Как запрограммировать ESP32 по воздуху (Over The Air)

Автор: Mike(admin) от 27-07-2020, 05:55

Прошивка ESP32 по воздуху методом OTA


Программирование OTA (Over The Air или прошивка по воздуху) – это функция любого микроконтроллера с поддержкой WiFi, такого как ESP32 и ESP8266, которая позволяет этим устройствам обновлять свои прошивки или программное обеспечение по беспроводной сети. Эта функция может использоваться для перепрограммирования устройств, которые закреплены на крыше или в любом другом месте, где подключение кабеля затруднено. Используя OTA, вы можете отправить обновление нескольким микроконтроллерам или устройствам, которые находятся в одной сети. Например, эту функцию можно использовать для отправки обновлений для устранения ошибок, добавления некоторых функций и т.д. Обновления OTA также играют важную роль в рамках Интернета вещей (IoT). Такой метод используется для удаленного обновления подключенных к Интернету устройств новыми настройками, программным обеспечением и прошивкой.


Как запрограммировать ESP32 по воздуху (Over The Air)

В этом примере мы будем использовать беспроводное (OTA) программирование ESP32 с использованием OTA Web Updater в Arduino IDE.


Чтобы использовать функцию OTA, сначала необходимо загрузить один скетч через последовательный порт. Этот скетч содержит HTML-код для создания OTA Web Updater, чтобы вы могли позже загрузить код с помощью браузера. Когда код загружается через последовательный порт, он создает веб-сервер, на котором вы можете выбрать и загрузить новый скетч через веб-браузер.


Чтобы загрузить первый код, подключите ESP32 к компьютеру и откройте Arduino IDE, выберите тип платы ESP32 Dev Kit и выберите правильный последовательный порт. Затем перейдите в Файл-Примеры-ArduinoOTA-OTAWebUpdater (File-Example-ArduinoOTA-OTAWebUpdater).


Как запрограммировать ESP32 по воздуху (Over The Air)

Измените имя и пароль сети Wi-Fi в исходном коде. Затем загрузите код на свою плату ESP32. После успешной загрузки кода откройте последовательный монитор. Измените скорость передачи 115200 в последовательном мониторе и нажмите кнопку сброса на ESP32, и монитор в итоге должен вывести IP-адрес ESP32.


Как запрограммировать ESP32 по воздуху (Over The Air)

Теперь откройте браузер по умолчанию и вставьте IP-адрес ESP32. Он должен открыть веб-сервер для программирования по воздуху, как показано на рисунке далее. Имя пользователя и пароль по умолчанию – admin.


Как запрограммировать ESP32 по воздуху (Over The Air)

Затем введите имя пользователя и пароль и нажмите на страницу входа, откроется новая вкладка. Здесь вы можете загрузить код.


Как запрограммировать ESP32 по воздуху (Over The Air)

Здесь мы собираемся загрузить простой код мигания светодиодна. Каждый код, который вы загружаете по беспроводной сети, должен содержать код OTA. Поэтому добавьте часть кода со светодиодом в исходный код OTA. Полный код может выглядеть следующим образом.



#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Update.h>
const char* host = "esp32";
const char* ssid = "Galaxy-M20";
const char* password = "ac312129";
//variabls to blink without delay:
const int led = 2;
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>ESP32 Login Page</b></font></center>"
                "<br>"
            "</td>"
            "<br>"
            "<br>"
        "</tr>"
        "<td>Username:</td>"
        "<td><input type='text' size=25 name='userid'><br></td>"
        "</tr>"
        "<br>"
        "<br>"
        "<tr>"
            "<td>Password:</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('Error Password or Username')/*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
 */
void setup(void) {
  pinMode(led, OUTPUT);
  Serial.begin(115200);
  // Connect to WiFi network
  WiFi.begin(ssid, password);
  Serial.println("");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  /*use mdns for host name resolution*/
  if (!MDNS.begin(host)) { //http://esp32.local
    Serial.println("Error setting up MDNS responder!");
    while (1) {
      delay(1000);
    }
  }
  Serial.println("mDNS responder started");
  /*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("Update: %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("Update Success: %u\nRebooting...\n", upload.totalSize);
      } else {
        Update.printError(Serial);
      }
    }
  });
  server.begin();
}
void loop(void) {
  server.handleClient();
  delay(1);
  digitalWrite(led, HIGH);
  delay(600);
  digitalWrite(led, LOW);
  delay(600);
 }

Сохраните ваш код под новым именем, а затем перейдите в Скетч – Экспорт скомпилированного двоичного файла (Sketch – Export compiled Binary). Это создаст новый файл .bin в папке скетчей.


Как запрограммировать ESP32 по воздуху (Over The Air)

Теперь перейдите на веб-страницу OTA, затем нажмите кнопку «Выбрать файл» (Choose File) и выберите файл .bin. После этого нажмите кнопку «Обновить» (Update), чтобы загрузить скетч. Вот как ESP32 может быть запрограммирован по воздуху методом OTA без использования последовательной проводной связи.




© digitrode.ru


Теги: ESP32




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий