| Ваш IP: 3.239.7.207 | Online(28) - гости: 9, боты: 19 | Загрузка сервера: 3.25 ::::::::::::

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 и повторить загрузку (обновление) скетча.

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

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

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

  • Регулятор громкости на полевом транзисторе

    Регулятор громкости на полевом транзисторе

    На рисунке показана схема простого регулятора громкости на полевом транзисторе. Регулировка громкости осуществляется подачей отрицательного напряжения от 0 до -3 В на затвор полевого транзистора. Напряжение 0 В на затворе транзистора соответствует минимальному уровню громкости, а напряжение -3 В — максимальной громкости. Источник — https://freecircuitdiagram.com/4656-voltage-controlled-attenuator-volume-control-using-fet/Подробнее...
  • Выходной каскад (ламповые усилители)

    Однотактовый выходной каскад лампового усилителя содержит минимум деталей и прост в сборке и регулировке. Пентоды в выходном каскаде могут использоваться только ультралинейном включении, триодном или обычном режимах. При триодном включении экранирующая сетка соединяется с анодом через резистор 100…1000Ом. В ультралинейном включении каскад охвачен ОС по экранирующей сетке, что дает снижение …Подробнее...
  • ТЕРМОСТАБИЛЬНЫЙ УСИЛИТЕЛЬ МОЩНОСТИ

    ТЕРМОСТАБИЛЬНЫЙ УСИЛИТЕЛЬ МОЩНОСТИ

    С целью уменьшения нелинейных искажений при малой гром­кости режим работы транзисторов выходного каскада усилителя мощности обычно выбирают таким, чтобы в отсутствие сигнала через них протекал довольно большой ток (нередко до сотен миллиампер). Во избежание теплового пробоя, обусловленного нагреванием переходов из-за большой рассеиваемой на них мощ­ности, транзисторы выходного каскада приходится устанавливать …Подробнее...
  • Светодиодная мигалка

    Светодиодная мигалка

    Светодиодная мигалка состоит из 20 диодов в два ряда. Основа уст-ва — мультивибратор, который поочередно зажигает светодиоды. Схема очень простая, регулировка сводится к подбору С3 и С4 которые входят во время-задающую цепь мультивибратора. Усто-во работает от бестрансформаторного источника питания, который состоит из балластного конденсатора С1, резистора R2, который разряжает конденсатор С1 …Подробнее...
  • Электронный термометр (от 0 до 100°С)

    На рис. приведена принципиальная схема, предлагаемого электронного термометра. Он способен измерять температуру от 0 до 100°С, от 0 до 50°С или от — 50 до +50°С — все зависит от стрелочного индикатора РА1, используемого в приборе. Так, с показанным на схеме микроамперметром на 100 мкА термометр рассчитан на работу в …Подробнее...