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区,循环下去