esp32开发与应用(OTA升级)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

作为程序员来说,嵌入式烧入不是什么复杂的事情。不管是命令行烧入,还是flash_download_tool烧入,亦或者是idf烧入,都是可以的。反正,最终的烧入结果都是利用串口进行的。但是一旦产品销售出去了,基本上只能靠ota升级了。

1、传统烧入方式的场景

esp32传统的烧入方式,就是串口烧入。这种方式有一定专业性,多用于程序开发、工厂烧入以及售后烧入,是比较经典的烧入方式。

2、ota应用的场景

和串口烧入不同,客户能理解的烧入方式,就是一键烧入。比如屏幕上就有一个升级按钮,通过云端获得升级包之后,接下来就可以自动烧入、自动重启了,整个过程不再需要客户的参与。

3、ota依赖无线网络

升级包通常依赖于网络,这意味着产品软件需要支持wifi station模式。这也是esp32的特点。当然其实也可以通过usb、tf卡烧入,但是不如网络来的方便。

4、ota需要bootloader和app分开

在esp32镜像里面,加载和应用是两个bin文件。哪怕是其他mcu芯片,bootloader和app一般也是分开来的。如果没有按键按下,bootloader就是正常加载模式,启动并运行app。一旦发现某个按键被按下,那么接下来就是升级模式。升级模式下,bootloader通常会用串口等待上位机的通信,从而完成后续的升级开发和部署。

不过esp32稍微有点区别,它的升级模式一般是在app里面进行的。

5、分区表需要有app a/b区

为了防止失败,一般app会分成a、b分区的形式。一方面,运行a 的时候,如果需要升级,把bin保存到b分区即可,反之亦然。这样就不存在自己烧入自己的情况,也可以预防出现断电后无法烧入、或者是烧入一半然后断电的场景。

6、升级只升级app层

所有的升级,一般就是app的bin文件升级,不会涉及到bootloader和分区表。

7、还需要一个ota data分区

判断应该从哪个分区启动。

8、用户的数据不能动

如前面所说,升级的时候其实就是升级app的bin文件,其他分区和数据都不会碰。尤其是用户自己的数据,都不会去处理。一般的用户数据,比如说使用习惯等等,这些数据价值一般。但如果涉及到客户自己的高价值数据,比如采集的数据、图片、文字、视频等等,这些数据一旦丢了,或者是不小心被erase掉了,这就比较麻烦了。所以升级的时候需要慎之又慎。

通常情况下,一般都是开发者自己本地用治具,借助于不同的板子,测试几千次,确保没问题之后,再发布出去,这才是比较保险的办法。

9、esp32的ota升级

本质上,esp32的ota替我们做了很多的事情,剩下来个人需要做的,就是三部分。1)创建一个ab ota分区;2)创建ota data分区;3)调用类似esp_https_ota这样的api,来实现bin文件的网络下载和安装。

复制代码
#include "esp_https_ota.h"
#include "esp_http_client.h"

esp_err_t do_firmware_upgrade()
{
    esp_http_client_config_t config = {
        .url = "https://your-server.com/firmware.bin",
        //.cert_pem = (char *)server_cert_pem_start, // server certificate
        .skip_cert_common_name_check = true
    };
    esp_https_ota_config_t ota_config = {
        .http_config = &config,
    };
    
    esp_err_t ret = esp_https_ota(&ota_config);
    if (ret == ESP_OK) {
        esp_restart(); // result is ok,just reboot it instantly
    } else {
        return ESP_FAIL;
    }
    return ESP_OK;
}

最后就是服务器上准备好app bin文件,等待被esp32下载和升级就好了。最简单的服务器,可以用python+webpy搭建,这样又快又好。

相关推荐
2CM_Embed7 小时前
Altium Designer 原理图与 PCB 快速相互定位:Cross Probe 交叉探针
嵌入式硬件·pcb·altium designer·c2000
恒锐丰-罗生8 小时前
宽压大电流同步降压优选|CN3906 DC-DC 电源芯片,车载 / 工控 / IoT 全能供电方案
嵌入式硬件·硬件工程
happygrilclh11 小时前
STM32,串口单字节中断接受,每次上电后,会收到一个0x00的解决办法。
单片机·嵌入式硬件
智闲电子设计12 小时前
STM32 独立看门狗 IWDG 实战:系统跑飞,它来兜底复位
stm32·单片机·嵌入式硬件
zcmodeltech14 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
程序员与背包客_CoderZ14 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
嵌入式阿蔡15 小时前
HAL库 vs LL库 vs 寄存器:到底用哪个?
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
天空'之城16 小时前
单片机基础核心知识点汇总(三)
单片机·嵌入式硬件
嵌入式阿蔡17 小时前
CAN总线入门:从协议帧到STM32实战
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
恒锐丰科技韩生18 小时前
率能 SS8847E|2.7~15V 双通道 H 桥电机驱动 ETSSOP16 散热封装 家电 / 打印 / 舞台灯光专用
嵌入式硬件·硬件工程