ESP32 OTA空中升級步驟詳細說明
張婷婷 2019.07.22
目錄
1.2.2 修改例程simple_ota_example.c. 3
第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_0、 OTA_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...