记录ESP32实现OTA(本地服务器)

MCU:ESP32

开发环境:ESP-IDF+VScode

服务器:python运行的本地服务器

python编译器:Anaconda下的JupyterLab

实现思路

IDF编程指南给出的OTA实现流程图

空中升级 (OTA) - ESP32 - — ESP-IDF 编程指南 v5.3 文档 (espressif.com)

实现OTA的时候,需要解决几个问题

1.固件放在哪里(服务器)

2.怎么获取固件(连接服务器)

3.获取固件之后的烧写问题

在我实现OTA的时候把固件放在哪里这个问题困扰了我很久,一开始想放在云服务器,但是发现云服务器的OTA功能好像都需要收费;后面偶然查到可以搭建本地的http服务器。

我尝试了在虚拟机中搭建了Apache2服务器,但是局域网下的其他设备访问不到这个服务器。

之后又尝试了利用python可以跑本地服务器,便采用了这种方案

实现过程

服务器搭建

在python中运行这个程序,便可以通过这个端口以及IP地址访问到这个服务器(端口可以自己设置,IP地址可以在命令行窗口中用ipconfig这个命令进行查看)

import http.server
import socketserver

PORT = 1008
# 你可以更改这个端口

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print(f"Serving at port {PORT}")
    httpd.serve_forever()

服务器跑起来之后可以拿同一局域网下的手机试一下能不能成功访问

手机打开浏览器访问

http://192.168.xxx.xx:8080

192.168.xxx.xxx是本地服务器的IP地址,8080是你设置的端口(这个可以在python程序里面自己修改)

如果不能成功访问,试一下关闭电脑的防火墙。成功访问进行下一步。

新建一个OTA升级的示例工程

进入工程,对工程进行设置

idf.py menuconfig

如果是在VScode下面开发,可以直接Ctrl+shift+P,输入menuconfig进行设置

1.首先需要修改连接的WIFI

2.然后修改连接的服务器的URL(http://192.168.xxx.xx:8080/xxx.bin)

3.勾选这个设置,确保可以连接http服务器

修改完这些OTA功能应该是可以实现了,将需要升级的固件(在工程的build目录下,以工程名字命名的.bin文件就是固件)复制到python程序的的目录下

编译完之后在IDF中输入

idf.py flash monitor

就可以进行OTA功能的测试了。

总结

这个工程主要是用IDF提供的一个实现https OTA的一个API(

esp_err_t esp_https_ota(const esp_http_client_config_t *config)

)来实现的,如果不进行安全认证这些功能,主要的代码其实很小

esp_err_t do_firmware_upgrade()
{
    esp_http_client_config_t config = {
        .url = CONFIG_FIRMWARE_UPGRADE_URL,
        .cert_pem = (char *)server_cert_pem_start,
    };
    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();
    } else {
        return ESP_FAIL;
    }
    return ESP_OK;
}

大概就这几行就可以实现,当然前提是连接了WIFI并且进行一些初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值