| Ваш IP: 3.238.186.43 | Online(51) - гости: 34, боты: 17 | Загрузка сервера: 3.18 ::::::::::::

ESP32 — загрузка скетча через Wi-Fi

Загрузка скетча через Wi-Fi может применяться в случаях когда плата микроконтроллера ESP32 находится в трудно доступном месте и загрузка через USB кабель затруднительна. Конечно, для того чтобы эта функция стала доступной необходимо первоначально загрузить скетч обычным способом используя USB соединение, после чего можно перейти на локальный адрес который указан в скетче для удаленной загрузки (обновления) скетча.

Перед загрузкой скетча необходимо указать параметры Вашей Wi-Fi сети:

const char* host = «esp32-webupdate»; // локальный адрес уст-ва

const char* ssid = «ИМЯ_WI-FI_сети»;

const char* password = «ПАРОЛЬ»;

Загрузите скетч показанный ниже:

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Update.h>
 
const char* host = "esp32-webupdate";
const char* ssid = "ИМЯ_WI-FI_сети";
const char* password = "ПАРОЛЬ";
 
WebServer server(80);
const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'>"
                          "<input type='file' name='update'><input type='submit' value='Update'></form>";
 
void setup(void) {
  Serial.begin(9600);
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() == WL_CONNECTED) {
    MDNS.begin(host);
    server.on("/", HTTP_GET, []() {
    server.sendHeader("Connection", "close");
    server.send(200, "text/html", serverIndex);});
    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.setDebugOutput(true);Serial.printf("Update: %s\n", upload.filename.c_str());
        if (!Update.begin()) {}} else if (upload.status == UPLOAD_FILE_WRITE) {
        if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {Update.printError(Serial);}} 
        else if (upload.status == UPLOAD_FILE_END) {
        if (Update.end(true)) {Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
        }else {Update.printError(Serial);}Serial.setDebugOutput(false);
        }else {Serial.printf("Update Failed Unexpectedly (likely broken connection): status=%d\n", upload.status);}});
    server.begin();
    MDNS.addService("http", "tcp", 80);
    Serial.printf("http://%s.local \n", host);}else{Serial.println("WiFi Failed");}
}
 
void loop(void) {
  server.handleClient();
  delay(1);
}

Далее откройте монитор порта и нажмите на плате ESP32 кнопку EN (RESET), в мониторе порта Вы уведите примерно следующее:

Где http://esp32-webupdate.local это локальный адрес ESP32 (в скетче можно указать другой).

При переходе на на локальный адрес Вы уведите форму загрузки скетча:

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

Для примера я загружу простой скетч BLINK (мигание светодиода на плате ESP32) с поддержкой прошивки через Wi-Fi:

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Update.h>
 
const char* host = "esp32-webupdate"; 
const char* ssid = "ИМЯ_WI-FI_сети"; 
const char* password = "ПАРОЛЬ";
 
WebServer server(80);
const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'>"
                          "<input type='file' name='update'><input type='submit' value='Update'></form>";
 
void setup(void) {
  pinMode(2,OUTPUT);
 
  Serial.begin(9600);
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() == WL_CONNECTED) {
    MDNS.begin(host);
    server.on("/", HTTP_GET, []() {
    server.sendHeader("Connection", "close");
    server.send(200, "text/html", serverIndex);});
    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.setDebugOutput(true);Serial.printf("Update: %s\n", upload.filename.c_str());
        if (!Update.begin()) {}} else if (upload.status == UPLOAD_FILE_WRITE) {
        if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {Update.printError(Serial);}} 
        else if (upload.status == UPLOAD_FILE_END) {
        if (Update.end(true)) {Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
        }else {Update.printError(Serial);}Serial.setDebugOutput(false);
        }else {Serial.printf("Update Failed Unexpectedly (likely broken connection): status=%d\n", upload.status);}});
    server.begin();
    MDNS.addService("http", "tcp", 80);
    Serial.printf("http://%s.local \n", host);}else{Serial.println("WiFi Failed");}
}
 
void loop(void) {
  server.handleClient();
  // delay(1);
 
///// BLINK //////////////////
  delay(1000);
  digitalWrite(2,HIGH);
  delay(1000);
  digitalWrite(2,LOW); 
}

Как видно, второй скетч аналогичен первому, но в него добавлен дополнительный основной код скетча (код мигания светодиода на плате ESP32):

void setup(void) {
  pinMode(2,OUTPUT);
}
 
void loop(void) {
  delay(1000);
  digitalWrite(2,HIGH);
  delay(1000);
  digitalWrite(2,LOW); 
}

Далее в Arduino IDE откройте вкладку «Скетч«, выберите «Экспорт бинарного кода«. После скетч пройдет процедуру компиляции и в папке со скетчем появится файл с расширением bin.

В онлайн форме добавьте файл прошивки и нажмите «Update».

После загрузки скетча появится сообщение:

После загрузки нового скетча через Wi-Fi, по необходимости, можно снова перейти по адресу http://esp32-webupdate.local и повторить загрузку (обновление) скетча.

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Светодиодный драйвер 2Вт на таймере 555

    Светодиодный драйвер 2Вт на таймере 555

    На рисунке показана схема простого драйвера светодиода, с напряжение питания от 3 до 18В. Основу устройства составляет таймер 555 или  LMC555 на напряжение 5В. На таймере 555 собран ШИМ — регулятор выходной мощности драйвера. Светодиоды суммарной мощностью 2Вт подключены через MOSFET транзистор IRLU3802PBF. Радиатор транзистору не нужен, но если необходима дополнительная мощность (более …Подробнее...
  • Условные графические обозначения электрических машин

    А. Элементы электрических машин (табл.1) 1. Обмотка: а) общее обозначение; б) параллельного возбуждения; в) последовательного возбуждения; г) компенсационная; д) вспомогательного полюса. 2. Статор, общее обозначение. 3. Ротор: а) общее обозначение, короткозамкнутый; б) без обмотки полый немагнитный или ферромагнитный; в) без обмотки с явно выраженными полюсами (с прорезями по окружности); г) …Подробнее...
  • Предусилитель на 3 микрофона

    Предусилитель на 3 микрофона

    Схема приведенная здесь имеет три микрофонных входа, схема выполнена на микросхеме LM348 IC.LM348 обладает высоким коэффициентом усиления, схема выполнена на четырех операционных усилителя с выходным каскадом класса AB. Микросхемы имеет очень низкий ток покоя (0.6mA) и работают от двухполярного источника питания. Заметки. * Сборка схемы на хорошее качество печатной плате. …Подробнее...
  • MP7720 — миниатюрный усилитель класса D

    MP7720 — миниатюрный усилитель класса D

    На микросхеме MP7720 можно собрать миниатюрный усилитель класса D. Особенностью данной микросхемы является отсутствие радиатора охлаждения, так КПД микросхемы более 90%, что позволяет уменьшить размеры конечного устройства. Характеристики усилителя: встроенная система устранения акустических щелчков включения/выключения встроенная защита от короткого замыкания выходная мощность на нагрузке 4 Ом 20 Вт при напряжении …Подробнее...
  • УМЗЧ 2*20Вт на LA4450

    УМЗЧ 2*20Вт на LA4450

    На рисунке показана схема двухканального усилителя мощности звуковой частоты на ИМС LA4450. Выходная мощность усилителя при напряжении питания 26,4В (рекомендованное) 12Вт (на канал) на нагрузке 8 Ом и 20 Вт (на канал) на нагрузке 4 Ом. ИМС LA4450 имеет тепловую защиту, защиту от перенапряжения и импульсных помех. Основные характеристики Максимальное напряжение …Подробнее...