【ESP32日记003】EPS32S3上使用自身WiFi热点,用于OTA升级的代码实现

最近客户突然新增一个本地OTA需求,要求能实现让用户通过手机按需对设备进行程序更新,经评估后,考虑直接使用芯片自带的WiFi功能,以实现上电后,5分钟内开启WiFi热点,用于进行OTA升级,具体实现代码如下:
1、WiFi热点配置以及简易网页效果优化(居于esp32 ota demo修改,手机页面效果见下方图片),先贴代码段
wifi_conf.h:

#ifndef _WIFI_CONF_H_
#define _WIFI_CONF_H_

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Update.h>

const char* AP_SSID = "FO1_PLUS";  //热点名称
const char* host = "esp32";
const char* ssid = "ssid";       //用户名
const char* password = "password";    //密码

static char web_ack_buf[40];

WebServer server(80);

/*
 * Login page
 */

const char* loginIndex =
 "<!DOCTYPE html> "
 "<html>"
    "<head>"
		"<title>FO1_PLUS Login</title>"
		"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> "
	"</head>"
    "<body>"
        "<form name='loginForm'>"
            "<div></div>"
            "<table width='50%' bgcolor='A09F9F' align='center'>"
                "<tr>"
                    "<td colspan=2>"
                        "<center><font size=4><b>FO1 PLUS Login Page</b></font></center>"
                        "<br>"
                    "</td>"
                    "<br>"
                    "<br>"
                "</tr>"
                "<tr>"
                    "<td>Username:</td>"
                    "<td><input type='text' size=15 name='userid'><br></td>"
                    "<br>"
                    "<br>"
                "</tr>"
                "<tr>"
                    "<td>Password:</td>"
                    "<td><input type='Password' size=15 name='pwd'><br></td>"
                    "<br>"
                    "<br>"
                "</tr>"
                "<tr>"
                    "<td colspan=2>"
                        "<center><input type='submit' size=15 onclick='check(this.form)' value='Login'></center>"
                        "<br>"
                    "</td>"
                    "<br>"
                    "<br>"   
                "</tr>"
            "</table>"
        "</form>"
    "</body>"
"</html>"
"<script>"
    "function check(form)"
    "{"
        "if(form.userid.value=='admin' && form.pwd.value=='admin')"
        "{"
            "window.open('/s
### ESP32-S3 OTA 更新教程 #### 实现OTA更新的主要流程 在ESP32-S3设备上执行OTA更新主要依赖于`esp_https_ota()`函数,该函数负责管理整个OTA过程。当启动OTA任务时,程序会调用此函数来下载并验证新版本的应用程序固件文件[^1]。 ```c esp_err_t ret = esp_https_ota(&config); if (ret == ESP_OK) { // 成功完成OTA更新后的重启逻辑 } else { // 处理失败的情况 } ``` 对于希望深入了解OTA内部机制以及需要自定义错误处理逻辑的开发者而言,仅依靠简化版的OTA接口可能无法满足需求。因此建议采用更详细的API来进行细粒度控制[^2]。 #### 常见问题及其解决方案 - **重复尝试发起OTA请求** 如果当前已经有未完成的OTA进程存在,则再次调用OTA API将会返回`ESP_ERR_HTTPS_OTA_IN_PROGRESS`错误码。这意味着之前的OTA尚未结束,在这种情况下应该等待现有操作完成后重试或取消前一次的操作再重新开始新的OTA流程[^3]。 - **网络连接不稳定导致传输中断** 网络条件不佳可能会造成数据包丢失从而影响到OTA的成功率。为了提高成功率可以在代码设计阶段加入断点续传的支持或是设置合理的超时时间以便及时发现并应对潜在的问题。 - **校验失败** 下载下来的镜像文件与服务器端提供的哈希值不匹配也会使得OTA最终失败。确保所使用的HTTP(S)链接指向的是正确的、未经篡改的目标文件非常重要;另外还可以考虑增加额外的数据完整性检查措施以增强系统的健壮性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值