ESP32之本地HTTP服務器OTA固件升級流程,基于VSCode環境下的ESP-IDF開發(附源碼)

背景知識:

本實驗利用編譯鏈內Python內置的 HTTP 服務器,將升級包通過http發送給設備,實現OTA固件升級。

目錄

背景知識:

1.創建工程

1.1 創建OTA基礎工程

3.編寫、修改代碼

3.1 修改menuconfig配置文件

3.1.1 配置WiFi賬號和密碼

3.1.2配置flash和partition分區表

(1)不修改分區大小

(2)要修改分區大小

3.2 設置版本號

3.2.1 設置版本號

3.2.2 打印版本號

(1)編寫獲取版本號函數

(2)調用獲取版本號函數

4.驗證功能

4.1?運行HTTP本地服務器

(1)建立本地服務器

方式1:利用cmd命令窗口

方式2:利用VSCode窗口

(2)打開瀏覽器,獲取http下載地址

4.2 修改http的url下載地址

4.2.1 更改url下載地址

4.2.2 燒錄測試升級

(1)生成正式升級包

(2)燒錄初始代碼

(3)觀察OTA升級現象

5.注意事項

6.總結

7.參考文檔

8.源碼下載


1.創建工程

1.1 創建OTA基礎工程

3.編寫、修改代碼

3.1 修改menuconfig配置文件

3.1.1 配置WiFi賬號和密碼

3.1.2配置flash和partition分區表

(1)不修改分區大小

如果不修改分區大小,選擇默認配置即可:

(2)要修改分區大小

如果需要修改分區大小,則需從\Espressif\frameworks\esp-idf-v5.3.2\components\partition_table路徑中復制一個partitions_two_ota.csv文件到工程路徑,并將factory、ota_0、ota_1三者的size改成合適大小。

放到這里,并更改分區大小:

注意:修改分區大小后,

  • 注意Flash大小是否足夠,不夠則需要修改大小;
  • 要將Partition Table的值改成Custom partition table CSV;
  • 要將Custom partition CSV file的值改成partitions_two_ota.csv。

3.2 設置版本號

3.2.1 設置版本號

在工程根目錄的cMakeList.txt中加入set(PROJECT_VER "1.0.0") 設置當前版本號:

3.2.2 打印版本號

(1)編寫獲取版本號函數
//獲取當前應用版本號
const char* get_app_version(void)
{static char app_version[32] = {0};if (app_version[0] == 0){//獲取當前分區的基本信息const esp_partition_t* running = esp_ota_get_running_partition();//獲取更多的分區信息esp_app_desc_t running_desc;esp_ota_get_partition_description(running, &running_desc);snprintf(app_version, sizeof(app_version), "%s", running_desc.version);}return app_version;
}
(2)調用獲取版本號函數

4.驗證功能

4.1?運行HTTP本地服務器

先編譯生成的bin文件作為臨時升級包,然后隨便找個目錄新建個文件夾取名Server,并將臨時升級包放到文件夾內,改名為update_pack.bin。

若 Python 版本是 3.X,則指令為:

python -m http.server 8070

若 Python 版本是 2.X,則指令為:

python -m SimpleHTTPServer 8070

(1)建立本地服務器

方式1:利用cmd命令窗口

在Server文件夾下打開cmd命令窗口,并輸入命令python -m http.server 8070,然后回車:

方式2:利用VSCode窗口

用VSCode打開用于升級的程序(Server文件夾),在終端ESP-IDF Terminal窗口輸入命令python -m http.server 8070后回車,即可運行HTTP本地服務器:

(2)打開瀏覽器,獲取http下載地址

輸入http://192.168.1.100:8070/(輸入電腦實際IP地址,可以在cmd命令窗口輸入ipconfig查看),然后鼠標右鍵點擊update_pack.bin,選擇復制鏈接地址(http://:8070/update_pack.binhttp://192.168.1.100:8070/update_pack.binhttp://:8070/update_pack.bin):

4.2 修改http的url下載地址

4.2.1 更改url下載地址

將復制的地址http://192.168.1.100:8070/update_pack.bin粘貼到menuconfig的firmware upgrade url endpoint中:

4.2.2 燒錄測試升級

(1)生成正式升級包

先把版本號改成v1.0.1,編譯工程生成bin文件用做正式升級包,然后改名為update_pack.bin,并復制到Sever中替換原本的update_pack.bin,接著按照步驟4.1打開本地服務器。

(2)燒錄初始代碼

將版本號改回v1.0.0,編譯下載,并打開串口監視。

(3)觀察OTA升級現象

運行時顯示當前版本為1.0.0:

升級過程:

復位后運行升級后的版本,發現變成v1.0.1了,說明升級成功了:

后續如有新的版本,照此方法放到Server文件夾中替換原本的update_pack.bin文件,即可完成升級。

5.注意事項

  • 電腦端和ESP32必須連接同一個WiFi熱點,即電腦端和設備端必須連接同一個局域網。
  • 這種方法升級完成后如果不及時關閉本地服務器則會一直重復執行升級,要么升級完后及時關閉服務器,要么在代碼中加入限制,防止重復升級。

6.總結

OTA升級的關鍵步驟:

  1. 修改flash大小和OTA分區
  2. 修改WiFi賬號、密碼
  3. 固件的下載地址

7.參考文檔

圖文手把手教程--ESP32 OTA空中升級(VSCODE+IDF)-CSDN博客

【ESP32】通過本地服務器實現OTA功能_esp32 ota-CSDN博客

2022.05 ESP32 空中升級 OTA_esp32c3 ota-CSDN博客

8.源碼下載

https://download.csdn.net/download/Freddy_Ssc/90641093

思考:這種方式只能通過局域網升級,感覺有點雞肋,在現實中有什么用處呢?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77362.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BootStrap:進階使用(其一)

今天我要講述的是在BootStrap中進一步使用的方法與代碼舉例; 導航條 作為在應用或網站中作為導航頁頭的響應式基礎組件。導航條在移動設備上可以折疊(且可開可關),在視口(viewport)寬度增加時逐漸變為水平展開模式 …

ffmpeg無損轉格式的命令行

將ffmpeg.exe拖入命令行窗口 c:\users\zhangsan>D:\ffmpeg-2025-03-11\bin\ffmpeg.exe -i happy.mp4 -c:v copy -c:a copy 格式轉換后.mkv -c:v copy 僅做拷貝視頻,不重新編碼 -c:a copy 僅做拷貝音頻 ,不重新編碼

【Linux】深入理解Linux文件系統:從C接口到內核設計哲學

文章目錄 前言一、C語言中的文件接口1. 文件指針(句柄)FILE*以寫方式打開文件,若文件不存在會新建一個文件W寫入方式,在打開文件之前都會將文件內容全部清空追加寫方式,其用法與寫方法一致,不同在于a方法可…

國產品牌芯洲科技100V降壓芯片系列

SCT2A25采用帶集成環路補償的恒導通時間(COT)模式控制,大大簡化了轉換器的片外配置。SCT2A25具有典型的140uA低靜態電流,采用脈沖頻率調制(PFM)模式,它使轉換器在輕載或空載條件下實現高轉換效率。 芯洲科技100V降壓芯片系列提供豐富的48V系…

ctfshow-大賽原題-web702

因為該題沒有理解到位,導致看wp也一直出錯,特此反思一下。 參考yu22x師傅的文章 :CTFSHOW大賽原題篇(web696-web710)_ctfshow 大賽原題-CSDN博客 首先拿到題目: // www.zip 下載源碼 我們的思路就是包含一個css文件,…

LabVIEW技巧——獲取文件版本信息

獲取可執行文件(exe)版本信息的幾種方法 方法1. LabVIEW自帶函數 labview自帶了獲取文件版本號的VI,但是沒有開放到程序框圖的函數選板中,在該目錄下可以找到:...\LabVIEW 20xx\vi.lib\Platform\fileVersionInfo.llb…

三格電子——CAN 轉光纖(點對點)布線常見問題

1、CAN 布線 (1)H 接 H ,L 接 L (2)兩端設備掛 120 歐姆電阻 2、假如用點對點的 CAN 轉光纖現實遠程傳輸 (1)H 接 H ,L 接 L (2)光端機都掛 120 歐姆電阻 每個光端機掛的設備有一個加…

python進階: 深入了解調試利器 Pdb

Python是一種廣泛使用的編程語言,以其簡潔和可讀性著稱。在開發和調試過程中,遇到錯誤和問題是不可避免的。Python為此提供了一個強大的調試工具——Pdb(Python Debugger)。 Pdb是Python標準庫中自帶的調試器,可以幫助…

React 設計藝術:如何精確拆分組件接口,實現接口隔離原則

接口隔離原則 接口隔離原則(Interface Segregation Principle,簡稱 ISP)也是面向對象設計中的重要原則之一。它的核心思想是,一個類不應該依賴它不需要的接口。在 React 開發中,遵循接口隔離原則可以提高代碼的可維護性…

內部聊天軟件,BeeWorks-安全的企業內部通訊軟件

企業在享受數據便利的同時,如何保障企業數據安全已經成為無法回避的重要課題。BeeWorks作為一款專為企業設計的內部通訊軟件,通過全鏈路的安全能力升維,為企業提供了一個安全、高效、便捷的溝通協作平臺,全面保障企業數據安全。 …

【零基礎】基于 MATLAB + Gurobi + YALMIP 的優化建模與求解全流程指南

MATLAB Gurobi YALMIP 綜合優化教程(進階) 本教程系統介紹如何在 MATLAB 環境中使用 YALMIP 建模,并通過 Gurobi 求解器高效求解線性、整數及非線性優化問題。適用于工程、運營研究、能源系統等領域的高級優化建模需求。 一、工具概覽 1.…

Freertos----互斥量

一、為什么要使用互斥量? 我們想讓任務A、B都執行add_a函數,a的最終結果是18817。 假設任務A運行完代碼①,在執行代碼②之前被任務B搶占了:現在任務A的R0等于1。 任務B執行完add_a函數,a等于9。 任務A繼續運行&#…

高級java每日一道面試題-2025年4月11日-微服務篇[Nacos篇]-Nacos使用的數據庫及其數據同步機制是什么?

如果有遺漏,評論區告訴我進行補充 面試官: Nacos使用的數據庫及其數據同步機制是什么? 我回答: Nacos 使用的數據庫及其數據同步機制詳解 在微服務架構中,Nacos 作為服務注冊與配置管理的核心組件,其數據存儲和同步機制對系統的高可用性和…

揭秘大數據 | 22、軟件定義存儲

揭秘大數據 | 19、軟件定義的世界-CSDN博客 揭秘大數據 | 20、軟件定義數據中心-CSDN博客 揭秘大數據 | 21、軟件定義計算-CSDN博客 老規矩,先把這個小系列的前三篇奉上。今天書接上文,接著敘軟件定義存儲的那些事兒。 軟件定義存儲源于VMware公司于…

git常用修改命令

1. 代碼回退與歷史修改 git reset 模式命令示例作用范圍適用場景--softgit reset --soft HEAD~1僅移動 HEAD 指針重新提交之前的修改--mixedgit reset HEAD~1 (默認)重置暫存區取消已 add 但未提交的文件--hardgit reset --hard a1b2c3d徹底丟棄工作區和暫存區徹底回退到某個…

【ubuntu】linux開機自啟動

目錄 開機自啟動: /etc/rc.loacl system V 使用/etc/rc*.d/系統運行優先級 遇到的問題: 1. Linux 系統啟動階段概述 方法1:/etc/rc5.d/ 腳本延時日志 方法二:使用 udev 規則來觸發腳本執行 開機自啟動: /etc/…

Python深度學習基礎——深度神經網絡(DNN)(PyTorch)

張量 數組與張量 PyTorch 作為當前首屈一指的深度學習庫,其將 NumPy 數組的語法盡數吸收,作為自己處理張量的基本語法,且運算速度從使用 CPU 的數組進步到使用 GPU 的張量。 NumPy 和 PyTorch 的基礎語法幾乎一致,具體表現為&am…

光伏產品研發項目如何降本增效?8Manage 項目管理軟件在復合材料制造的應用

在復合材料制造領域,特別是光伏PECVD石墨舟和燃料電池石墨雙極板等高精尖產品的研發過程中,高效的項目管理直接決定了產品開發周期、質量和市場競爭力。然而,許多企業在項目立項、進度跟蹤、資源分配和質量控制等環節面臨挑戰。 針對這些痛點…

linux的glib庫使用

glib常用接口使用 1. glib介紹2. glib命令安裝3. 獲取glib的版本信息和兼容信息4. glib使用例子4.1 鏈表例子4.2 哈希表例子4.3 使用面向對象例子 1. glib介紹 廣泛應用于桌面環境、嵌入式系統、GNOME等項目中。它提供了完整的面向對象編程模型(GObject&#xff09…

vs2022使用git方法

1、創建git 2、在cmd下執行 git push -f origin master ,會把本地代碼全部推送到遠程,同時會覆蓋遠程代碼。 3、需要設置【Git全局設置】,修改的代碼才會顯示可以提交,否則是灰色的不能提交。 4、創建的分支,只要點擊…