ESP32 OTA空中升級步驟詳細說明

ESP32 OTA空中升級步驟詳細說明

 

                                                                                                                                                                          張婷婷   2019.07.22

 

目錄

第1節 http本地空中升級... 2

1.1打開服務器... 2

1.2修改官方例程... 2

1.2.1 修改庫文件esp_https_ota.c. 2

1.2.2 修改例程simple_ota_example.c. 3

1.2.2.1 修改OTA分區爲雙 OTA 分區... 4

1.2.2.2 修改下載端口 port 5

1.2.2.3 修改WiFi賬號密碼以及url 5

1.3 編譯下載... 7

1.4 實驗驗證... 7

 

 

 

第1節 http本地空中升級

1.1打開服務器

官方編譯鏈內 Python 有一個內置的 HTTP 服務器,可以直接使用它;以esp-idf-v3.1.4\examples\get-started\hello_world作爲需要更新的固。

打開mingw32官方編譯鏈,輸入以下指令:

 

cd $IDF_PATH/examples/get-started/hello_world //進入 helloworld 路徑make                                              //編譯

cd build                                    //進入編譯文件.bin 目錄python -m SimpleHTTPServer 8070               //運行 http 服務器(本地)

   

 

服務器運行後, 構建目錄的內容可以通過網址 http://localhost:8070/ 瀏覽到。升級期間需要保持服務器開啓,升級完成後如果想要關閉服務器關閉這個編譯鏈即可。

1.2修改官方例程

1.2.1 修改庫文件esp_https_ota.c

修改庫文件esp-idf-v3.1.4\components\esp_https_ota\src下的esp_https_ota.c內容:註釋下圖兩個紅框中內容,這兩處是https空中升級用到的。

 

1.2.2 修改例程simple_ota_example.c

接下來修改例程,這裏使用esp-idf-v3.1.4\examples\system\ota\simple_ota_example

修改其main文件夾下的simple_ota_example.c中內容:修改替換如下圖

 

最後修改文件配置,另外再打開一個mingw32官方編譯鏈修改simple_ota_example

配置,輸入以下指令:

 

cd $IDF_PATH examples\system\ota\simple_ota_example //進入路徑

make menuconfig                                        //進入配置

 

1.2.2.1 修改OTA分區爲OTA 分區

首次進行 OTA 升級時, OTA example OTA_0 分區燒錄目標 App, 並在燒錄完成後, 更新 OTA data 分區數據並重啓。系統重啓時獲取 OTA data 分區數據進行計算, 決定此後加載 OTA_0 分區的 App 執行(而不是默認的 Factory App 分區內的 App) , 從而實現升級。同理, 若某次升級後 ESP32 已經在執行 OTA_0 內的 App, 此時再升級時, OTA Demo 就會向 OTA_1 分區寫入目標 App。 再次啓動後, 執行 OTA_1 分區實現升級。 以此類推, 升級的目標 App 始終在 OTA_0OTA_1 兩個分區之間交互燒錄, 不會影響到出廠時的 Factory App 固件。

 

1.2.2.2 修改下載端口 port

此次的example下載是通過串口下載的,修改配置文件中下載端口爲自己下載器的端口。Port會應不同電腦不同下載器而不同,寫入自己實際的COM口,我的是COM6。

1.2.2.3 修改WiFi賬號密碼以及url

WiFi賬號密碼是ESP32啓動後聯網的,由於http模式是本地模式,所以WiFi賬號和密碼需要和第一節打開服務器的電腦在同一個局域網內。url就是ESP32 連接上服務器之後要去訪問的目標地址。

WiFi SSID和WiFi Password填上你電腦連接的WiFi賬號密碼,如果你的電腦是網線聯網這裏只要保證填入的WiFi賬號密碼是該網關下的無線網絡即可,url馬賽克部分192.168.xx.xx是本機IP,可通過運行cmd輸入ipconfig查看,這裏填上自己本機ip 。

以上三步修改均需要單步保存,即選擇 <Save> 。至此修改就全部完成了,單步全保存之後一路點擊 <Exit> 推出即可,接下來就是編譯下載了。

1.3 編譯下載

Windows下的編譯非常之慢,由於上面修改了配置文件所以編譯是更加慢的。輸入 make 編譯,大約需要5-10min,耐心等待一會。

編譯成功後輸入 make erase_flash flash 全擦除並下載。

 

1.4 實驗驗證

編譯下載通過之後,就可以運行了,等待ESP32 成功聯網之後就開始連接服務器了,ping通服務器之後就開始下載 hello-world.bin ,這個過程需要3min左右等待日誌打印結果即可。以下是日誌文件:灰色部分是simple_ota_example例程的日誌文件,青色部分就是hello-world例程的日誌文件。

 

ets Jun  8 2016 00:22:57

 

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 0, SPIWP:0xee

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:DIO, clock div:2

load:0x3fff0018,len:4

load:0x3fff001c,len:5812

load:0x40078000,len:9188

ho 0 tail 12 room 4

load:0x40080000,len:6092

entry 0x4008032c

[0;32mI (30) boot: ESP-IDF v3.1.4-dirty 2nd stage bootloader[0m

[0;32mI (30) boot: compile time 15:28:57[0m

[0;32mI (31) boot: Enabling RNG early entropy source...[0m

[0;32mI (35) boot: SPI Speed      : 40MHz[0m

[0;32mI (40) boot: SPI Mode       : DIO[0m

[0;32mI (44) boot: SPI Flash Size : 4MB[0m

[0;32mI (48) boot: Partition Table:[0m

[0;32mI (51) boot: ## Label            Usage          Type ST Offset   Length[0m

[0;32mI (59) boot:  0 nvs              WiFi data        01 02 00009000 00004000[0m

[0;32mI (66) boot:  1 otadata          OTA data         01 00 0000d000 00002000[0m

[0;32mI (73) boot:  2 phy_init         RF data          01 01 0000f000 00001000[0m

[0;32mI (81) boot:  3 factory          factory app      00 00 00010000 00100000[0m

[0;32mI (88) boot:  4 ota_0            OTA app          00 10 00110000 00100000[0m

[0;32mI (96) boot:  5 ota_1            OTA app          00 11 00210000 00100000[0m

[0;32mI (103) boot: End of partition table[0m

[0;32mI (108) boot: Defaulting to factory image[0m

[0;32mI (112) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f400020 size=0x1a420 (107552) map[0m

[0;32mI (159) esp_image: segment 1: paddr=0x0002a448 vaddr=0x3ffb0000 size=0x033fc ( 13308) load[0m

[0;32mI (164) esp_image: segment 2: paddr=0x0002d84c vaddr=0x40080000 size=0x00400 (  1024) load[0m

[0;32mI (166) esp_image: segment 3: paddr=0x0002dc54 vaddr=0x40080400 size=0x023bc (  9148) load[0m

[0;32mI (178) esp_image: segment 4: paddr=0x00030018 vaddr=0x400d0018 size=0x7f0b8 (520376) map[0m

[0;32mI (366) esp_image: segment 5: paddr=0x000af0d8 vaddr=0x400827bc size=0x0e2c8 ( 58056) load[0m

[0;32mI (400) boot: Loaded app from partition at offset 0x10000[0m

[0;32mI (400) boot: Disabling RNG early entropy source...[0m

[0;32mI (401) cpu_start: Pro cpu up.[0m

[0;32mI (404) cpu_start: Starting app cpu, entry point is 0x40080fc8[0m

[0;32mI (0) cpu_start: App cpu up.[0m

[0;32mI (415) heap_init: Initializing. RAM available for dynamic allocation:[0m

[0;32mI (422) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM[0m

[0;32mI (428) heap_init: At 3FFB9440 len 00026BC0 (154 KiB): DRAM[0m

[0;32mI (434) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM[0m

[0;32mI (440) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM[0m

[0;32mI (447) heap_init: At 40090A84 len 0000F57C (61 KiB): IRAM[0m

[0;32mI (453) cpu_start: Pro cpu start user code[0m

[0;32mI (135) cpu_start: Starting scheduler on PRO CPU.[0m

[0;32mI (0) cpu_start: Starting scheduler on APP CPU.[0m

I (179) wifi: wifi driver task: 3ffc0b90, prio:23, stack:3584, core=0

I (179) wifi: wifi firmware version: ad331b4

I (179) wifi: config NVS flash: enabled

I (179) wifi: config nano formating: disabled

[0;32mI (189) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE[0m

[0;32mI (199) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE[0m

I (219) wifi: Init dynamic tx buffer num: 32

I (219) wifi: Init data frame dynamic rx buffer num: 32

I (219) wifi: Init management frame dynamic rx buffer num: 32

I (219) wifi: Init management short buffer num: 32

I (229) wifi: Init static rx buffer size: 1600

I (229) wifi: Init static rx buffer num: 10

I (239) wifi: Init dynamic rx buffer num: 32

[0;32mI (239) simple_ota_example: Setting WiFi configuration SSID future1324...[0m

[0;32mI (309) phy: phy_version: 4008, c9ae59f, Jan 25 2019, 16:54:06, 0, 0[0m

I (319) wifi: mode : sta (bc:dd:c2:ca:83:40)

[0;32mI (319) simple_ota_example: Starting OTA example...[0m

I (1159) wifi: n:7 2, o:1 0, ap:255 255, sta:7 2, prof:1

I (2149) wifi: state: init -> auth (b0)

I (2149) wifi: n:7 0, o:7 2, ap:255 255, sta:7 0, prof:1

I (2149) wifi: state: auth -> assoc (0)

I (2179) wifi: state: assoc -> run (10)

I (2239) wifi: connected with future1324, channel 7

I (2239) wifi: pm start, type: 1

 

I (3019) wifi: n:7 2, o:7 0, ap:255 255, sta:7 2, prof:1

[0;32mI (3179) event: sta ip: 192.168.0.184, mask: 255.255.255.0, gw: 192.168.0.1[0m

[0;32mI (3179) simple_ota_example: Connect to Wifi ! Start to Connect to Server....[0m

[0;32mI (3279) esp_https_ota: Starting OTA...[0m

[0;32mI (3279) esp_https_ota: Writing to partition subtype 16 at offset 0x110000[0m

[0;32mI (3449) esp_https_ota: esp_ota_begin succeeded[0m

[0;32mI (3449) esp_https_ota: Please Wait. This may take time[0m

[0;32mI (6139) esp_https_ota: Connection closed,all data received[0m

[0;32mI (6139) esp_image: segment 0: paddr=0x00110020 vaddr=0x3f400020 size=0x071c4 ( 29124) map[0m

[0;32mI (6169) esp_image: segment 1: paddr=0x001171ec vaddr=0x3ffb0000 size=0x022a0 (  8864) [0m

[0;32mI (6179) esp_image: segment 2: paddr=0x00119494 vaddr=0x40080000 size=0x00400 (  1024) [0m

[0;32mI (6179) esp_image: segment 3: paddr=0x0011989c vaddr=0x40080400 size=0x06774 ( 26484) [0m

[0;32mI (6209) esp_image: segment 4: paddr=0x00120018 vaddr=0x400d0018 size=0x111c8 ( 70088) map[0m

[0;32mI (6259) esp_image: segment 5: paddr=0x001311e8 vaddr=0x40086b74 size=0x02198 (  8600) [0m

[0;32mI (6269) esp_image: segment 0: paddr=0x00110020 vaddr=0x3f400020 size=0x071c4 ( 29124) map[0m

[0;32mI (6289) esp_image: segment 1: paddr=0x001171ec vaddr=0x3ffb0000 size=0x022a0 (  8864) [0m

[0;32mI (6299) esp_image: segment 2: paddr=0x00119494 vaddr=0x40080000 size=0x00400 (  1024) [0m

[0;32mI (6309) esp_image: segment 3: paddr=0x0011989c vaddr=0x40080400 size=0x06774 ( 26484) [0m

[0;32mI (6329) esp_image: segment 4: paddr=0x00120018 vaddr=0x400d0018 size=0x111c8 ( 70088) map[0m

[0;32mI (6389) esp_image: segment 5: paddr=0x001311e8 vaddr=0x40086b74 size=0x02198 (  8600) [0m

[0;32mI (6399) esp_https_ota: esp_ota_set_boot_partition succeeded[0m

I (6399) wifi: state: run -> init (0)

I (6399) wifi: pm stop, total sleep time: 2183901 us / 7148823 us

 

I (6399) wifi: n:7 0, o:7 2, ap:255 255, sta:7 2, prof:1

I (6419) wifi: flush txq

I (6419) wifi: stop sw txq

I (6419) wifi: lmac stop hw txq

ets Jun  8 2016 00:22:57

 

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 0, SPIWP:0xee

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:DIO, clock div:2

load:0x3fff0018,len:4

load:0x3fff001c,len:5812

load:0x40078000,len:9188

ho 0 tail 12 room 4

load:0x40080000,len:6092

entry 0x4008032c

[0;32mI (30) boot: ESP-IDF v3.1.4-dirty 2nd stage bootloader[0m

[0;32mI (31) boot: compile time 15:28:57[0m

[0;32mI (31) boot: Enabling RNG early entropy source...[0m

[0;32mI (36) boot: SPI Speed      : 40MHz[0m

[0;32mI (40) boot: SPI Mode       : DIO[0m

[0;32mI (44) boot: SPI Flash Size : 4MB[0m

[0;32mI (48) boot: Partition Table:[0m

[0;32mI (52) boot: ## Label            Usage          Type ST Offset   Length[0m

[0;32mI (59) boot:  0 nvs              WiFi data        01 02 00009000 00004000[0m

[0;32mI (66) boot:  1 otadata          OTA data         01 00 0000d000 00002000[0m

[0;32mI (74) boot:  2 phy_init         RF data          01 01 0000f000 00001000[0m

[0;32mI (81) boot:  3 factory          factory app      00 00 00010000 00100000[0m

[0;32mI (89) boot:  4 ota_0            OTA app          00 10 00110000 00100000[0m

[0;32mI (96) boot:  5 ota_1            OTA app          00 11 00210000 00100000[0m

[0;32mI (104) boot: End of partition table[0m

[0;32mI (108) esp_image: segment 0: paddr=0x00110020 vaddr=0x3f400020 size=0x071c4 ( 29124) map[0m

[0;32mI (127) esp_image: segment 1: paddr=0x001171ec vaddr=0x3ffb0000 size=0x022a0 (  8864) load[0m

[0;32mI (131) esp_image: segment 2: paddr=0x00119494 vaddr=0x40080000 size=0x00400 (  1024) load[0m

[0;32mI (135) esp_image: segment 3: paddr=0x0011989c vaddr=0x40080400 size=0x06774 ( 26484) load[0m

[0;32mI (155) esp_image: segment 4: paddr=0x00120018 vaddr=0x400d0018 size=0x111c8 ( 70088) map[0m

[0;32mI (180) esp_image: segment 5: paddr=0x001311e8 vaddr=0x40086b74 size=0x02198 (  8600) load[0m

[0;32mI (189) boot: Loaded app from partition at offset 0x110000[0m

[0;32mI (189) boot: Disabling RNG early entropy source...[0m

[0;32mI (191) cpu_start: Pro cpu up.[0m

[0;32mI (195) cpu_start: Starting app cpu, entry point is 0x40080e60[0m

[0;32mI (186) cpu_start: App cpu up.[0m

[0;32mI (206) heap_init: Initializing. RAM available for dynamic allocation:[0m

[0;32mI (212) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM[0m

[0;32mI (218) heap_init: At 3FFB32F0 len 0002CD10 (179 KiB): DRAM[0m

[0;32mI (225) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM[0m

[0;32mI (231) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM[0m

[0;32mI (238) heap_init: At 40088D0C len 000172F4 (92 KiB): IRAM[0m

[0;32mI (244) cpu_start: Pro cpu start user code[0m

[0;32mI (262) cpu_start: Starting scheduler on PRO CPU.[0m

[0;32mI (0) cpu_start: Starting scheduler on APP CPU.[0m

Hello world!

This is ESP32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 4MB external flash

Restarting in 10 seconds...

Restarting in 9 seconds...

Restarting in 8 seconds...

Restarting in 7 seconds...

Restarting in 6 seconds...

Restarting in 5 seconds...

Restarting in 4 seconds...

Restarting in 3 seconds...

Restarting in 2 seconds...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章