ESP32-简单OTA升级
基于ESP-IDF4.1
1 #include "freertos/FreeRTOS.h"
2 #include "freertos/task.h"
3 #include "esp_system.h"
4 #include "esp_event.h"
5 #include "esp_log.h"
6 #include "esp_ota_ops.h"
7 #include "esp_http_client.h"
8 #include "esp_https_ota.h"
9 #include "protocol_examples_common.h"
10 #include "string.h"
11
12 #include "nvs.h"
13 #include "nvs_flash.h"
14 #include "protocol_examples_common.h"
15
16 #if CONFIG_EXAMPLE_CONNECT_WIFI
17 #include "esp_wifi.h"
18 #endif
19
20 static const char *TAG = "simple_ota_example";
21 extern const uint8_t server_cert_pem_start[] asm("_binary_ca_cert_pem_start");
22 extern const uint8_t server_cert_pem_end[] asm("_binary_ca_cert_pem_end");
23
24 #define OTA_URL_SIZE 256
25
26 //http事件处理程序
27 esp_err_t _http_event_handler(esp_http_client_event_t *evt)
28 {
29 switch (evt->event_id) {
30 case HTTP_EVENT_ERROR:
31 ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
32 break;
33 case HTTP_EVENT_ON_CONNECTED:
34 ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED");
35 break;
36 case HTTP_EVENT_HEADER_SENT:
37 ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT");
38 break;
39 case HTTP_EVENT_ON_HEADER:
40 ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
41 break;
42 case HTTP_EVENT_ON_DATA:
43 ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
44 break;
45 case HTTP_EVENT_ON_FINISH:
46 ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH");
47 break;
48 case HTTP_EVENT_DISCONNECTED:
49 ESP_LOGD(TAG, "HTTP_EVENT_DISCONNECTED");
50 break;
51 }
52 return ESP_OK;
53 }
54
55 //OTA任务
56 void simple_ota_example_task(void *pvParameter)
57 {
58 ESP_LOGI(TAG, "Starting OTA example");
59
60 esp_http_client_config_t config = {
61 .url = CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL,
62 .cert_pem = (char *)server_cert_pem_start,
63 .event_handler = _http_event_handler,
64 };
65
66 #ifdef CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL_FROM_STDIN
67 char url_buf[OTA_URL_SIZE];
68 if (strcmp(config.url, "FROM_STDIN") == 0) {
69 example_configure_stdin_stdout();
70 fgets(url_buf, OTA_URL_SIZE, stdin);
71 int len = strlen(url_buf);
72 url_buf[len - 1] = '\0';
73 config.url = url_buf;
74 } else {
75 ESP_LOGE(TAG, "Configuration mismatch: wrong firmware upgrade image url");
76 abort();
77 }
78 #endif
79
80 #ifdef CONFIG_EXAMPLE_SKIP_COMMON_NAME_CHECK
81 config.skip_cert_common_name_check = true;
82 #endif
83
84 esp_err_t ret = esp_https_ota(&config);
85 if (ret == ESP_OK) {
86 esp_restart();
87 } else {
88 ESP_LOGE(TAG, "Firmware upgrade failed");
89 }
90 while (1) {
91 vTaskDelay(1000 / portTICK_PERIOD_MS);
92 }
93 }
94
95 void app_main(void)
96 {
97 // 初始化非易失性存储
98 esp_err_t err = nvs_flash_init();
99 if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
100 //1.OTA应用程序分区表的NVS分区大小比非OTA分区表小。这种大小不匹配可能导致NVS初始化失败.
101 //2.NVS分区包含新格式的数据,此版本的代码无法识别。如果发生这种情况,我们将擦除NVS分区并再次初始化NVS.
102 ESP_ERROR_CHECK(nvs_flash_erase());
103 err = nvs_flash_init();
104 }
105 ESP_ERROR_CHECK(err);
106
107 ESP_ERROR_CHECK(esp_netif_init());
108 ESP_ERROR_CHECK(esp_event_loop_create_default());
109
110 //连接网络
111 ESP_ERROR_CHECK(example_connect());
112
113 #if CONFIG_EXAMPLE_CONNECT_WIFI
114 //确保禁用低功耗模式,这样可以提供最佳的吞吐量,从而为整个OTA操作节省时间
115 esp_wifi_set_ps(WIFI_PS_NONE);
116 #endif
117
118 xTaskCreate(&simple_ota_example_task, "ota_example_task", 8192, NULL, 5, NULL);
119 }
原文:https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/system/ota/simple_ota_example
ESP32-简单OTA升级的更多相关文章
- 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...
- 实现乐鑫esp8266的无线OTA升级,实现远程在线升级固件
代码地址如下:http://www.demodashi.com/demo/12994.html 一.前言: 写了这么多的8266博文,一直以满意100%的心态去敲写代码固件烧录,以致很少出现 bug ...
- OTA升级中关于update.zip包的一些总结【转】
本文转载自:http://429564140.iteye.com/blog/2337165 update.zip包整理 一. update.zip包的目录结构 |----boot. ...
- Android OTA 升级之三:生成recovery.img
Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...
- android 标准OTA升级流程
标准的OTA升级流程包括一下几个步骤: 1.Android设备首先会与OTA服务器进行交互,如果有更新会推送给客户.推送的信息常常会包含OTA更新包的下载地址和一些版本信息. 2.Update程序会将 ...
- ESP8266远程OTA升级
https://blog.csdn.net/xh870189248/article/details/80095139 https://www.wandianshenme.com/play/arduin ...
- ota升级动画修改
在网上可以搜到很多相关的文章,但是很多文章都是复制粘贴而来的,为了方便后面工作学习,本文会把其中最关键的几个步骤列出来. 首先根据ota升级界面的文字可以确认相关的图片资源的目录在哪里,可以网上搜一下 ...
- OTA升级
除了云端平台这部分,还要有通讯协议层面.云端和汽车端之间指令的接口和协议的制定,不同车厂会有不同诉求.艾拉比既可以支持车厂私有化定制协议的要求,也可以提供基于OMA标准的协议. 第一,它既是云端的工具 ...
- Android Recovery OTA升级(一)—— make otapackage
文件夹 文件夹 概述 make otapackage BUILT_TARGET_FILES_PACKAGE ota_from_target_files WriteFullOTAPackage Sign ...
- OTA升级详解(一)
不积跬步,无以至千里: 不积小流,无以成江海. 出自荀子<劝学篇> 1.概念解释 OTA是何物? 英文解释为 Over The Air,既空中下载的意思,具体指远程无线方式,OTA 技术可 ...
随机推荐
- 【遥感数字图像处理实验】Erdas版详细图文实验教程(8实验全)
@ 目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 遥感数字图像的处理,是对遥感数字图像的计算机处理.与工业和医学数字图像不同,遥感数字图像类型更为多样,内容更为复杂.因此,遥感 ...
- nginx 配置 conf stream
nginx从1.9.0版本开始,新增了ngx_stream_core_module模块,使nginx支持四层负载均衡.默认编译的时候该模块并未编译进去,需要编译的时候添加--with-stream参数 ...
- Epicor Advanced Unit of Measure
作为先进的ERP系统,Epicor 不断发展以解决业务问题.2020 年 10 月,Epicor ERP 10.2.700 的一项强大的新功能高级计量单位 (UoM) 已投入生产. 发行说明看似简单, ...
- Linux下使用LVM管理(扩展/缩小/删除)
LVM的工作原理 LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件 ...
- TensorFlow之keras.layers.Conv2D( )
keras.layers.Conv2D( ) 函数参数 def __init__(self, filters, kernel_size, strides=(1, 1), padding='valid' ...
- 根据某个数据 来筛选 DataTree 分支数里面的数据是否符合规则 进行筛选分支,展示
问题:如何在 DataTree 树形数据里每个分支里根据特定某个元素值,然后挑选出来 思路:先把分支提取出来,每个都要进行判断. 主要用到的电池: >.Cull Pattern 拓展资料:以下是 ...
- grasshopper DataTree 树形数据以及Graft Flatten Simplify的理解
问题的来源: 要在grasshopper里面输出 类似于二维数组的数据 但是在 grasshopper里的 C# 电池里面,无法显示 二维ArrayList里面的数据. 在 C# 电池里参考这个帖子: ...
- DelayQueue延迟队列原理剖析
DelayQueue延迟队列原理剖析 介绍 DelayQueue队列是一个延迟队列,DelayQueue中存放的元素必须实现Delayed接口的元素,实现接口后相当于是每个元素都有个过期时间,当队列进 ...
- MindSpore平台系统类
MindSpore平台系统类 Q:MindSpore只能在华为自己的NPU上跑么? A: MindSpore同时支持华为自己的Ascend NPU.GPU与CPU,是支持异构算力的. Q:MindSp ...
- CodeGen融合核心关系循环扩展
CodeGen融合核心关系循环扩展 Expansion Tokens <HARMONYCORE_RELATION_NAME> 插入当前关系的名称.关系名称将自动生成,但可以由Harmony ...