基于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. 安卓开发(2)—— Kotlin语言概述

    安卓开发(2)-- Kotlin语言概述 Android的官方文档都优先采用Kotlin语言了,学它来进行Android开发已经是一种大势所趋了. 这里只讲解部分的语法. 如何运行Kotlin代码 这 ...

  2. 在Visual Studio 中使用git——分支管理-上(八)

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  3. 1. 回顾Servlet

    回顾Servlet 创建web工程 servlet-api:http://dwz.date/aTGa 编写Servlet import javax.servlet.ServletException; ...

  4. 【MybatisPlus】数据库的datetime类型字段为空的时候,报错空指针?

    一.发现经历 事情是这样的,我今天本来要演示系统,就去前端同学的页面上点一点.不小心点到了其他同事编写的服务,然后界面就报错了.这给我吓得,这还能演示吗这.然后,我就去服务器查看了一下日志,发现了如下 ...

  5. Vue之前后端交互

    Vue之前后端交互 一.前后端交互模式 接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责 ...

  6. MindSpore基本原理

    MindSpore基本原理 MindSpore介绍 自动微分 自动并行 安装 pip方式安装 源码编译方式安装 Docker镜像 快速入门 文档 MindSpore介绍 MindSpore是一种适用于 ...

  7. 如何使用Intel vtune profilier?

    如何使用Intel vtune profilier?

  8. 20 岁发表 SCI 的学霸,梦想用算法改变世界

    2021 年 2 月,"新内容 新交互" 全球视频云创新挑战赛启幕.本次大赛由英特尔联合阿里云主办,与优酷战略技术合作,天池平台和阿里云视频云团队共同承办.大赛自开赛以来,吸引了全 ...

  9. Spring Bean 的生命周期总结

    除了使用阶段外,Spring 将 bean 的生命周期定义为实例化.属性填充.初始化和销毁四个阶段,并为每个阶段提供了多个拓展点用于自定义 bean 的创建过程.这篇文章介绍了 bean 的生命周期和 ...

  10. DOS命令行(6)——Windows网络状态及用户管理

    ipconfig --查看计算机中适配器的TCP/IP配置信息 命令格式: ipconfig [/allcompartments] [/? | /all | /renew [adapter] | /r ...