1 引言
产品功能实现后,就要对产品的维护进行考虑。产品出来后,卖了N台出去,如果突然发现自己一行代码写错了,怎么办,肯定不能去现场吧N台设备,免费出差旅游也累啊,所以一般需要有远程升级设备的功能,此篇为对ESP32 OTA实验经验总结。
2 问题
当前ESP32官方例程,以及网络上的经验例程,都是factory APP + 双OTA_x 方式。我选用的esp32是4M flash的,现在编译的固件大小是1.3M,按照上述的方式,需要用到的空间是:1.3M * 3 =3.9M。
只有4M大小flash的我,很明显,这看起来马上就不能用,也不够用了。所以,按照网上或官网那种分区的方式,肯定不行。

然后在继续查找经验过程中,发现有人没有用官方的factory APP+双OTA_X方式,而是直接双OTA_0和OTA_1,没有factory这个东东,省下了1倍固件大小的空间,所以只有4M flash的我,就采用这个方案了。
3 双OTA no factory APP实现
要做OTA升级,需要了解的内容是:
1.如何对flash划分分区?
2.升级机制是怎样的?
3.如何将固件从网络上download下来并写到flash中,以及标记相关参数?
对于问题1:如何对flash进行分区划分?
对这个问题,我一开始比较迷惑。因为esp32给出的ota升级的demo,是需要三个分区,即factory app+OTA1+OTA2,按照这算法,所需flash的大小是单个app的三倍。
然后我固件大小是1.3M,整块flash大小4M,这样算下来3*1.3 = 3.9M,显然不够,所以一开始迷惑了。官方怎么不给只有两个的,完全两个就搞定了,然后经过资料搜索,和尝试,最后确认两个OTA分区,不需要factory app也是可以的,所以就敲定了以下的分区划分。

对于问题2:升级机制是怎样的?
esp32 OTA的升级机制跟传统的机制是一样的,来回切换,就这样。。。。
对于问题3:如何将固件从网络上download下来并写到flash中,以及标记相关参数?
下载的话,我采用了httpget方式,将文件从http服务器下载下来。至于下载下来的文件写入flash和如何标记OTA_data相关参数,直接参考官方例程即可。整个搞下来其实不难,要花一点时间调试而已。
本实验采用的方式是模块化编程,所以下面给出的代码都是模块独立的,稍微移植就可以用。
#includ

本文介绍了在ESP32资源有限(4M flash)的情况下,如何通过使用双OTA分区而非factoryAPP,成功实现固件的远程升级,包括分区划分、升级机制和下载写入过程。作者提供了详细的模块化代码示例和关键步骤。
最低0.47元/天 解锁文章
2171

被折叠的 条评论
为什么被折叠?



