ESP32 HTTPS OTA升级(跳过验证)
参考用例为官方例程simple_ota_example的代码,使用SDK为5.3.1
HTTP本地服务器搭建
如果没有HTTP服务器没有的话下载一个python搭一个本地服务器
命令窗看一下python版本
python --version
python -m http.server 8080
创建 http 本地服务器
在浏览器输入以下网址访问http本地服务器:http://127.0.0.1:8080/
或http://localhost:8080/
进行访问(如果测试失败,有可能是你电脑上其他软件占用了端口所致,可尝试更换端口号测试)
项目配置
打开 idf.py menuconfig
因为我的服务器没加验证,需要跳过https验证
这里也需要允许http ota(按理说我的也是https 只不过没加验证 不知道为什么必须要打开这里才能正常运行 可能识别到我的是http了?)
OTA分区表
可以参考官方文档自定义分区表创建以及烧录
指路:OTA分区表
我的是自定义分区表,需要去menucofig开启Custom partition CSV file
输入自己的文件名,文件放在main
同级目录下
我的CSV如图
然后执行idf.py partition-table
再烧录程序后打印如下图
到这里的话,前期准备基本结束开始代码环节
核心代码
直接参考官方用例copy过来用,这里就是开启ota升级的核心代码
void ota_update(void)
{
esp_http_client_config_t config = {
.url = "https://xxx/xxx/xxx.bin",
//url这里应该用http 因为我用的https但是无验证就放在这里了
.event_handler = _http_event_handler,
//直接拷贝simple_ota_example里的_http_event_handler行了
};
esp_https_ota_config_t ota_config = {
.http_config = &config,
};
LOG_I("Attempting to download update from %s", config.url);
esp_err_t ret = esp_https_ota(&ota_config);
if (ret == ESP_OK)
{
LOG_I("OTA Succeed, Rebooting...");
esp_restart();
}
else
{
LOG_I("Firmware upgrade failed");
}
}
我的项目流程是,先wifi配网-- >连接MQTT-->接收ota请求-->执行ota_update()
这部分代码不好展示,有问题可留言,也可以去首页,公告有我的联系方式。