文章目录
系列文章
基于ESP32-S3单片机的OTA升级之移植官方代码(一)
基于ESP32-S3单片机的OTA升级之巴法云平台(二)
基于ESP32-S3单片机的OTA升级之整理官方工程(三)
基于ESP32-S3单片机的OTA升级之添加按键进行控制升级(四)
前言
近期公司有做关于基于ESP32单片机的OTA升级(基于HTTP实现,后期会出关于STM32的OTA升级,基于MQTT实现),现在有空了,就把相关步骤以及一些心得附上。最终能实现的功能(基于巴法云平台实现):
① 通过连接可用wifi(手机热点或者家用wifi都可以),实现能够上网的功能,并且使得ESP32连接上巴法云平台,然后根据对比上传到巴法云平台最新的版本号,来确定是否进行OTA升级。
② 有时候虽然最新的程序代码上传到了平台上,但是并不需要立马升级(比如说有可能工厂里有旧批次的产品,它就是需要旧版本的代码)。最终就加了两个按键,分别控制ESP32连接wifi和进行OTA升级。
1. ESP32的OTA升级是什么?
ESP32的OTA(Over-The-Air)升级是指通过无线网络(如Wi-Fi或蓝牙)对已部署在远程设备上的固件进行更新的过程。这项技术允许开发者和制造商在不物理接触设备的情况下推送新的固件版本,从而修复错误、添加新功能或优化性能。OTA升级通常涉及到将新的固件文件从服务器下载到ESP32设备,并安全地替换当前运行的固件。
2. OTA升级的主要步骤
① 准备固件:开发人员编译并生成新的固件二进制文件。
② 上传固件:将新固件上传到一个可访问的服务器上。
③ 通知设备:通过某种机制(如MQTT消息、HTTP请求等)告知ESP32设备有可用的新固件。
④ 下载固件:ESP32连接到服务器并下载新固件。
⑤ 验证固件:检查下载的固件完整性(如通过校验和或数字签名)。
⑥ 写入闪存:将新固件写入ESP32的Flash存储器中。
⑦ 切换启动分区:重启设备时加载新固件。
⑧ 回滚机制:如果新固件出现问题,可以回退到之前的稳定版本。
3. 优点
① 远程管理:不需要物理接触设备即可进行固件更新,大大简化了维护工作,尤其对于分布在广阔地理区域内的设备非常有用。
② 成本效益:减少了派遣技术人员到场更新固件的成本,同时也降低了因设备停机而带来的潜在损失。
③ 快速响应:可以迅速发布补丁来解决安全漏洞或关键问题,提高系统的可靠性和安全性。
④ 持续改进:允许在产品生命周期内不断添加新特性和服务,保持产品的竞争力和用户满意度。
⑤ 灵活性:支持多种通信协议(如HTTP(S)、MQTT),并且可以在不同的网络环境下灵活部署。
⑥ 自动化与规模化:可以实现批量更新,甚至根据特定条件自动触发更新过程,适用于大规模部署场景。
⑦ 安全性增强:现代OTA方案通常包含加密传输、数字签名验证等功能,确保只有经过授权的固件能够被安装。
⑧ 减少现场维护:对于难以到达的位置或者大量分散的小型设备来说,OTA减少了现场维护的需求,提高了效率。
⑨ 用户体验:对于消费者级产品而言,OTA更新可以无缝进行,不会打扰用户的正常使用体验。
4. ESP32进行OTA升级的机制
① OTA升级是基于分区表来实现的(分区表是用于管理flash的),想要进行OTA升级,需要配置设备的分区表,分区表中至少存在一个OTA数据分区(otadata),以及两个OTA的应用程序分区(ota_0和ota_1),当OTA功能启动后,向当前未用于启动的 OTA 应用分区写入新的应用固件镜像。镜像验证后,OTA 数据分区更新,指定在下一次启动时使用该镜像。
② ESP32分区表主要作用就是用来管理储存在flash剩余区域的数据分布,具体就是0x9000之后的数据。
③ OTA升级过程
5. OTA升级整体过程总结
① 首先是连接上网络
② 定义分区表,确定ota_0和ota_1。
③ 芯片从ota_0启动(默认情况),然后触发OTA升级。芯片将从HTTPS服务器下载新固件并将其保存到ota_1分区中,然后将自动更新otadata分区数据,指示下一次重启后应从ota_1分区启动。引导加载程序将读取otadata分区中的内容并运行所选定的应用程序分区。