esp32 串口,蓝牙等其他方式OTA

序言

esp32的官方例程中提供了通过通过wifi连接网络的OTA例程。例程虽然方便未必适用于所有情况,有时我们希望通过蓝牙,串口,或者别的方式进行OTA操作。下面会对OTA相关的函数进行解析,是的开发者可以通过不同的方式继续OTA。

 

OTA原理

简单的来说:OTA的基本过程如下:

1、接收程序

2、写入Flash

3、修改引导,使得下次开机的时候从新写入的程序启动。

esp32的具体实现中会一般有2个区域用来写入程序。下图是一个,OTA功能下程序在flash中的烧录情况。详细参见:https://blog.csdn.net/qq_24550925/article/details/85857351

图1

综上,从原理上来看只要能接收到数据,就可以进行OTA升级。而具体的数据来源可以是多种多样的。

需要的相关配置

1、ota功能需要对分区表进行适当的划分,可以自行划分也可以使用官方已经提供好的典型划分方式。使用官方分区表的具体设置如下:

输入make menuconfig 中:Partition Table -> Partition Table 选择 Factory app, two OTA definitions。

 

2、需要确保flash空间充足并且被正确配置,根据自己的芯片情况进行选择。官方典型的芯片为4M,以下是典型的配置方法:

输入make menuconfig 中:Serial flasher config -> Flash size 选择4 MB

 

OTA相关函数及程序流程

一下剖析的函数wifi升级中使用的OTA相关函数,具体的来说就是在esp-idf/components/esp_https_ota/src/esp_https_ota.c文件中,esp_https_ota(const esp_http_client_config_t *config)函数所使用的OTA函数。具体流程如下。其中可以通过接收完成后收尾工作中的2个函数返回值可以判断升级是否成功。

#include "esp_ota_ops.h"

//准备工作
esp_err_t err = ESP_OK;
esp_ota_handle_t update_handle = 0;
const esp_partition_t *update_partition = NULL;
update_partition = esp_ota_get_next_update_partition(NULL);
err = esp_ota_begin(update_partition, OTA_SIZE_UNKNOWN, &update_handle);


//数据接收
while(接收数据中)
{
    err  = esp_ota_write( update_handle, (const void *)data, len);
}


//接收完成后收尾工作
err = esp_ota_end(update_handle);
err = esp_ota_set_boot_partition(update_partition);

//软件复位
esp_restart();

 

 

转载于:https://www.cnblogs.com/zornlink/p/11412232.html

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32是一种具有低功耗的WiFi和蓝牙双模片,它可广泛应用于物联网项目中。而Arduino是一款开源的电子原型平台,提供简单易用的软件和硬件。在ESP32和Arduino的结合下,可以实现蓝牙OTA(Over-The-Air)功能,即通过无线方式对固件进行升级。 蓝牙OTA是一种方便且灵活的升级方式,不需要使用USB或串口进行连接,使得固件升级更加简便。使用ESP32 Arduino库,我们可以轻松地在ESP32上实现蓝牙OTA功能。 要使用蓝牙OTA功能,首先需要确保ESP32正常连接到蓝牙设备上。可以使用ESP32的BluetoothSerial库来简化蓝牙串口通信。然后,我们需要准备新的固件文件并将其传输到ESP32。可以使用ESP32的WirelessUpdate库,该库提供了OTA功能所需的基本函数和方法。 在传输固件文件期间,我们需要确保蓝牙连接的稳定性和数据传输的完整性。可以在代码中使用一些检查和验证机制,如CRC校验,以确保固件的正确传输。 最后,需要在ESP32上配置OTA服务器的相关参数,如服务器的IP地址和固件文件的位置。一旦配置完成,ESP32就可以通过蓝牙连接到OTA服务器,并根据指令进行固件升级。 总结起来,ESP32 Arduino蓝牙OTA功能是一种方便且灵活的固件升级方式,可以通过无线方式进行升级,而不需要使用USB或串口连接。通过使用ESP32 Arduino库和WirelessUpdate库,我们可以轻松地在ESP32上实现蓝牙OTA功能,并通过蓝牙连接到OTA服务器进行固件升级。这为物联网项目的开发和维护提供了便利和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值