女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ESP32通過OTA無線局域網遠程升級下載程序

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2025-07-22 13:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概要

ESP32 的 OTA(Over-The-Air)升級功能允許通過無線網絡Wi-Fi遠程更新設備固件程序,無需物理連接(如 USB/UART)。比如ESP32設備在機殼內部不好拆卸,人離設備比較遠,不好接線的環境可用到OTA方式給ESP32設備下載程序。為實現此功能每次更新程序的時候都要在代碼里面加入OTA的相關代碼。

遠程OTA.jpg

創建ESP32-OTA無線局域網網頁版遠程升級入口

打開Arduino IDE中自帶ESP32—OTAWebUpdater示例
在這里插入圖片描述

#include < WiFi.h >
#include < WiFiClient.h >
#include < WebServer.h >
#include < ESPmDNS.h >
#include < Update.h >

const char* host = "esp32";
const char* ssid = "YXDZ1";
const char* password = "YXDZ#2023#1";

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 >ESP32 Login Page< /font >< /center >"
                "
"
            "< /td >"
            "
"
            "
"
        "< /tr >"
        "< tr >"
             "< td >Username:< /td >"
             "< td >< input type='text' size=25 name='userid' >
< /td >"
        "< /tr >"
        "
"
        "
"
        "< tr >"
            "< td >Password:< /td >"
            "< td >< input type='Password' size=25 name='pwd' >
< /td >"
            "
"
            "
"
        "< /tr >"
        "< tr >"
            "< td >< input type='submit' onclick='check(this.form)' value='Login' >< /td >"
        "< /tr >"
    "< /table >"
"< /form >"
"< script >"
    "function check(form)"
    "{"
    "if(form.userid.value=='ESP32-OTA' && form.pwd.value=='ESP32-OTA')"
    "{"
    "window.open('/serverIndex')"
    "}"
    "else"
    "{"
    " alert('Error Password or Username')/*displays error message*/"
    "}"
    "}"
"< /script >";

/*
 * Server Index Page
 */

const char* serverIndex =
"< script src='http://www.asorrir.com/images/chaijie_default.png' >< /script >"
"< form method='POST' action='#' enctype='multipart/form-data' id='upload_form' >"
   "< input type='file' name='update' >"
        "< input type='submit' value='Update' >"
    "< /form >"
 "progress: 0%"
 "< 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) {
  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: %sn", 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: %unRebooting...n", upload.totalSize);
      } else {
        Update.printError(Serial);
      }
    }
  });
  server.begin();
}

void loop(void) {
  server.handleClient();
  delay(1);
}

并對其中的代碼做如下更改:
給ESP32開發板連接到自己電腦所在的局域網的路由器WIFI上,填上WIFI名稱ssis和密碼password

const char* host = "esp32";
const char* ssid = "YXDZ1";
const char* password = "YXDZ#2023#1";

host為ESP32作為Web服務器時,將ESP32以易記的主機名(如esp32.local)廣播到局域網,其他設備可直接通過該名稱訪問,用戶可通過http://esp32.local直接訪問,無需記憶IP地址

const char* host = "esp32";

  /*use mdns for host name resolution*/
  if (!MDNS.begin(host)) { //http://esp32.local
    Serial.println("Error setting up MDNS responder!");
    while (1) {
      delay(1000);
    }
  }

更改好OTA無線局域網網頁版入口的用戶名和密碼,這里都更改為ESP32-OTA

"if(form.userid.value=='ESP32-OTA' && form.pwd.value=='ESP32-OTA')"

通過有線方式連接電腦和ESP32開發板,并把代碼編譯通過先通過有線方式下載到ESP32開發板,讓開發板創建無線OTA遠程升級網頁版入口
打開串口助手,按下ESP32開發板復位,會顯示出所連接的局域網的IP地址,mDNS域名訪問創建成功。
在這里插入圖片描述
在瀏覽器輸入IP地址或創建的http://esp32.local域名即可跳轉到OTA遠程升級網頁版入口,輸入創建好的用戶名和密碼并登錄
在這里插入圖片描述
此時再跳轉到程序下載界面,選擇編譯好的程序文件并上傳到開發板內
在這里插入圖片描述

創建一個ESP32開發板進行OTA升級應用程序示例

若要每次都要對ESP32開發板進行OTA升級,新的應用程序中都要加入上述OTA無線局域網網頁版遠程升級入口的相關代碼。下面為一個ESP32開發板GPIO2引腳上的閃燈程序的代碼,并加入了OTA的相關代碼,然后對OTA部分的代碼進行上述一樣的更改。

#include < WiFi.h >
#include < WiFiClient.h >
#include < WebServer.h >
#include < ESPmDNS.h >
#include < Update.h >

const char* host = "esp32";
const char* ssid = "YXDZ1";
const char* password = "YXDZ#2023#1";

//variabls to blink without delay:
const int led = 2;
unsigned long previousMillis = 0;        // will store last time LED was updated
const long interval = 1000;           // interval at which to blink (milliseconds)
int ledState = LOW;             // ledState used to set the LED

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 >ESP32 Login Page< /font >< /center >"
                "
"
            "< /td >"
            "
"
            "
"
        "< /tr >"
        "< td >Username:< /td >"
        "< td >< input type='text' size=25 name='userid' >
< /td >"
        "< /tr >"
        "
"
        "
"
        "< tr >"
            "< td >Password:< /td >"
            "< td >< input type='Password' size=25 name='pwd' >
< /td >"
            "
"
            "
"
        "< /tr >"
        "< tr >"
            "< td >< input type='submit' onclick='check(this.form)' value='Login' >< /td >"
        "< /tr >"
    "< /table >"
"< /form >"
"< script >"
    "function check(form)"
    "{"
    "if(form.userid.value=='ESP32-OTA' && form.pwd.value=='ESP32-OTA')"
    "{"
    "window.open('/serverIndex')"
    "}"
    "else"
    "{"
    " alert('Error Password or Username')/*displays error message*/"
    "}"
    "}"
"< /script >";
 
/*
 * Server Index Page
 */
 
const char* serverIndex = 
"< script src='http://www.asorrir.com/images/chaijie_default.png' >< /script >"
"< form method='POST' action='#' enctype='multipart/form-data' id='upload_form' >"
   "< input type='file' name='update' >"
        "< input type='submit' value='Update' >"
    "< /form >"
 "progress: 0%"
 "< 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: %sn", 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: %unRebooting...n", upload.totalSize);
      } else {
        Update.printError(Serial);
      }
    }
  });
  server.begin();
}

void loop(void) {
  server.handleClient();
  delay(1);

  //loop to blink without delay
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    ledState = not(ledState);

    // set the LED with the ledState of the variable:
    digitalWrite(led, ledState);
  }
}

ESP32開發板OTA升級下載應用程序

編譯并導出可供OTA升級下載的二進制bin應用程序文件
在這里插入圖片描述
在項目文件夾下的build文件夾里可看到可供下載的bin應用程序文件
在這里插入圖片描述
進入OTA無線局域網網頁版遠程升級入口,打開應用程序bin文件,并對ESP32開發板進行遠程下載程序

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 無線局域網
    +關注

    關注

    1

    文章

    240

    瀏覽量

    30415
  • 程序
    +關注

    關注

    117

    文章

    3827

    瀏覽量

    83058
  • OTA
    OTA
    +關注

    關注

    7

    文章

    614

    瀏覽量

    36634
  • ESP32
    +關注

    關注

    21

    文章

    1022

    瀏覽量

    19334
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    GD32單片機STM32遠程下載手機程序升級固件下載局域網網頁升級工具

    GD32、STM32單片機,是我們最常見的一種MCU。通常我們在使用STM32單片機都會遇到程序在線升級下載的問題。使用該方法可以完成手機網頁在線程序
    的頭像 發表于 11-09 12:31 ?2829次閱讀
    GD32單片機STM32<b class='flag-5'>遠程</b><b class='flag-5'>下載</b>手機<b class='flag-5'>程序</b><b class='flag-5'>升級</b>固件<b class='flag-5'>下載</b><b class='flag-5'>局域網</b>網頁<b class='flag-5'>升級</b>工具

    淺析思科無線局域網

    思科無線局域網(WLAN)基礎?! ?b class='flag-5'>無線局域網(WLAN)  11.1 WLAN基礎  WLAN(Wireless Local Area Network,
    發表于 07-01 07:04

    嵌人式系統的無線局域網接入怎么實現?

    設備驅動的深入理解和分析,成功地移植在Atmel 9261 ARM處理器上。實現了嵌人式系統的無線局域網接入。利用該平臺,可以進一步設計完善醫用伽馬相機和小型SPECT設備的手持數據采集系統,使得控制人員能夠遠離數據采集現場,而通過遠程
    發表于 03-06 06:27

    樂鑫ESP32空中下載(OTA)解決方案實操

    前言 OTA(Over-the-AirTechnology)即空中下載技術,是通過移動通信的空中接口實現對移動終端設備及SIM卡數據進行遠程管理的技術。
    發表于 06-30 10:39

    OTA的具體應用場景及遠程升級遠程的含義具體是什么?

    OTA遠程升級一直有一個疑問,希望各位道友解答一下。不勝感激疑問1通過看官方的OTA升級的文檔
    發表于 11-14 14:21

    如何用esp32組建局域網?

    大家好,我想用esp32組建一個局域網,請大家幫我參考一下,要求如下:一個局域網內數量不超過100臺。一臺主機,可以同其他的設備通訊,其余均為從機,只能和主機通訊,從機之間不能直接通訊。通訊的有效
    發表于 03-09 08:02

    無線局域網(WLAN)是什么?

    據傳輸。   WLAN 的工作原理   無線局域網的工作原理是通過發送和接收無線電信號來完成數據傳輸。接入點將有線網絡連接到無線網絡,允許
    發表于 05-17 17:11

    GD32單片機STM32遠程下載手機程序升級固件下載局域網網頁升級工具

    ,即可瀏覽到上傳的文件。點擊文件后面對應的Flash按鈕即可完成STM32單片機的在線升級。 該服務器還支持FTP方式遠程下載固件的功能,能夠完成局域網、互聯網的
    發表于 11-10 15:03

    無線局域網簡介

    無線局域網無線局域網絡(Wireless Local Area Networks; WLAN)是相當便利的數據傳輸系統,它利用射頻(Radio Frequency; RF)的技術,
    發表于 11-24 03:21 ?2448次閱讀

    淺談無線局域網的優點

    無線局域網,其英文縮寫為WLAN。無線局域網無線通信技術與網絡技術相結合的產物。從專業角度講,無線
    發表于 11-14 15:51 ?3322次閱讀

    解答無線局域網該如何設置

    近些年來,網絡技術發展日新月異,隨著無線技術的不斷發展,現在我們生活當中的網絡,以及從過去的局域網發展成現在的無線局域網,無線
    發表于 11-14 19:17 ?4041次閱讀

    無線局域網的優點有哪些

    無線局域網是計算機網絡與無線通信技術相結合的產物,無線局域網的基礎還是傳統的有線局域網,是有線
    的頭像 發表于 01-10 08:56 ?9885次閱讀

    ESP32通信amp;局域網刺破

    ESP32局域網中通訊非常簡單,按照模塊的AT指令集發送指令即可。常規情況下,需要局域網內部的IP與局域網外界通訊,需要穿透局域網,此時需
    的頭像 發表于 02-13 13:38 ?2084次閱讀

    wlan是無線網還是局域網 wlan包括哪些無線局域網協議

    WLAN是無線局域網(Wireless Local Area Network)的縮寫,意味著它是一種在有限范圍內使用無線技術進行數據傳輸的局域網。相比有線
    發表于 06-14 17:18 ?3584次閱讀

    ESP32ESP32通過Internet進行通信

    電子發燒友網站提供《ESP32ESP32通過Internet進行通信.zip》資料免費下載
    發表于 06-15 09:58 ?5次下載
    <b class='flag-5'>ESP32</b>到<b class='flag-5'>ESP32</b><b class='flag-5'>通過</b>Internet進行通信