ESP32_IDF_OTA_HTTP升級固件
前言:一個項目的主控使用的是ESP32,因為封裝外殼的原因,所以需要采用OTA的方式進行升級,因為之前有對WIFI的OTA有所了解,所以在此基礎上,使用官方提供的native_ota_example例程實現OTA的功能
一,準備待升級程序
1、我這邊測試使用官方的hello程序(一字不改)
2、程序正常打印信息可以運行
3、修改一個版本號(OTA程序升級需要對比版本號,不一樣才行)
4、查看待升級固件(build->ota_test.bin)
二、準備native_ota_example例程
1、新建官方例程的工程
2、直接編譯運行(一字不改)
3、設置連接的WIFI
4、利用第三方工具建立一個http服務器
5、設置http的服務器地址
6、下載運行驗證(連接wifi->去http服務器請求文件->重啟運行->新程序執行)
三、將這個native_ota_example移植到自己工程里面
1、將整個文件復制到自己的文件夾ota.c里面
2、修改工程配置(將native_ota_example例程工程配置搬過來)
3、配置分區表(保證不能超過總內存)
4、為方便調試打開分區表打印日志信息
5、測試功能,我這邊是收到藍牙的升級指令(mySystem.mySystem_device_ota = 1)就開始升級
四、踩坑點
1、使用默認分區表,編譯的固件體積過大,導致編譯都過不了(選擇自定義分區表,指定分區表位置)
2、分區表詳解(尤其關注后三項0x140000是指的是固件大小)
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,16K,
otadata,data,ota,0xd000,8K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,,0x140000,
ota_0,app,ota_0,,0x140000,
ota_1,app,ota_1,,0x140000,
3、OTA升級需要校驗當前版本號和新升級的版本號,如果版本號一樣會升級失敗
4、OTA升級邏輯,串口直接燒錄的默認就是factory區,第一次OTA到ota_0區,第二次OTA到ota_1區,第三次OTA到ota_0區,循環下去