基于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升级的更多相关文章

  1. 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级

    目录 一.前言: 二.回顾下OTA的流程: 三.lwip网络框架的知识的使用: 四.如何处理服务器返回的数据? 五.扇区的擦除和烧写? 六.如何调用? 七.好好享用吧! 八.下载: 九.工程截图: 代 ...

  2. 实现乐鑫esp8266的无线OTA升级,实现远程在线升级固件

    代码地址如下:http://www.demodashi.com/demo/12994.html 一.前言: 写了这么多的8266博文,一直以满意100%的心态去敲写代码固件烧录,以致很少出现 bug ...

  3. OTA升级中关于update.zip包的一些总结【转】

    本文转载自:http://429564140.iteye.com/blog/2337165 update.zip包整理 一. update.zip包的目录结构           |----boot. ...

  4. Android OTA 升级之三:生成recovery.img

    Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...

  5. android 标准OTA升级流程

    标准的OTA升级流程包括一下几个步骤: 1.Android设备首先会与OTA服务器进行交互,如果有更新会推送给客户.推送的信息常常会包含OTA更新包的下载地址和一些版本信息. 2.Update程序会将 ...

  6. ESP8266远程OTA升级

    https://blog.csdn.net/xh870189248/article/details/80095139 https://www.wandianshenme.com/play/arduin ...

  7. ota升级动画修改

    在网上可以搜到很多相关的文章,但是很多文章都是复制粘贴而来的,为了方便后面工作学习,本文会把其中最关键的几个步骤列出来. 首先根据ota升级界面的文字可以确认相关的图片资源的目录在哪里,可以网上搜一下 ...

  8. OTA升级

    除了云端平台这部分,还要有通讯协议层面.云端和汽车端之间指令的接口和协议的制定,不同车厂会有不同诉求.艾拉比既可以支持车厂私有化定制协议的要求,也可以提供基于OMA标准的协议. 第一,它既是云端的工具 ...

  9. Android Recovery OTA升级(一)—— make otapackage

    文件夹 文件夹 概述 make otapackage BUILT_TARGET_FILES_PACKAGE ota_from_target_files WriteFullOTAPackage Sign ...

  10. OTA升级详解(一)

    不积跬步,无以至千里: 不积小流,无以成江海. 出自荀子<劝学篇> 1.概念解释 OTA是何物? 英文解释为 Over The Air,既空中下载的意思,具体指远程无线方式,OTA 技术可 ...

随机推荐

  1. 基于 element-plus 封装一个依赖 json 动态渲染的查询控件

    前情回顾 基于 el-form 封装一个依赖 json 动态渲染的表单控件 Vue3 封装第三方组件(一)做一个合格的传声筒 功能 使用 vue3 + element-plus 封装了一个查询控件,专 ...

  2. 07.ElementUI 2.X 源码学习:源码剖析之工程化(二)

    0x.00 前言 项目工程化系列文章链接如下,推荐按照顺序阅读文章 . 1️⃣ 源码剖析之工程化(一):项目概览.package.json.npm script 2️⃣ 源码剖析之工程化(二):项目构 ...

  3. 华为计算平台MDC810发布量产

    华为计算平台MDC810发布量产 塞力斯的发布会刚刚结束,会上塞力斯SF5自由远征版也确实让人眼前一亮. 全球首款4S级加速能力.1000+km续航新能源作为这款车的卖点. 续航1000+km成了最近 ...

  4. Paddle Release Note

    Paddle Release Note 重要更新 飞桨paddle框架2.0.0版本有如下重要更新: 编程范式:默认开启动态图模式进行模型开发和训练,通过动转静的方式进行模型部署和训练加速.如果需要使 ...

  5. linux文件内容列传行_行转列

    ================ 文件内容列传行_行转列  ================ 一.列转行 1.编辑测试文件 vi log.txt 16:23:00 8.2% 1773620k 16:2 ...

  6. springmvc——mvc:annotation-driven标签的作用

  7. Java协程实践指南(一)

    一. 协程产生的背景 说起协程,大多数人的第一印象可能就是GoLang,这也是Go语言非常吸引人的地方之一,它内建的并发支持.Go语言并发体系的理论是C.A.R Hoare在1978年提出的CSP(C ...

  8. 【题解】codeforces 1B Spreadsheets

    题意翻译 人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统:第一列被标为A,第二列为B,以此类推,第26列为Z.接下来为由两个字母构成的列号: 第27列为AA,第28列为AB-在标为 ...

  9. 『心善渊』Selenium3.0基础 — 7、XPath轴定位详解

    目录 1.XPath轴定位介绍 2.位置路径表达式概念 3.步的路径表达式范例 4.练习 使用XPath轴方式,可根据文档中元素的相对位置,来进行元素的定位.例如:先找到一个相对好定位的元素,在根据与 ...

  10. sql把一个字段中的特定字符替换成其他字符

    将'0654879'替换成'0754879' UPDATE dbo.SG_Functionality SET FunctionalityCode=REPLACE(FunctionalityCode,' ...