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 技术可 ...
随机推荐
- 安卓开发(2)—— Kotlin语言概述
安卓开发(2)-- Kotlin语言概述 Android的官方文档都优先采用Kotlin语言了,学它来进行Android开发已经是一种大势所趋了. 这里只讲解部分的语法. 如何运行Kotlin代码 这 ...
- 在Visual Studio 中使用git——分支管理-上(八)
在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...
- 1. 回顾Servlet
回顾Servlet 创建web工程 servlet-api:http://dwz.date/aTGa 编写Servlet import javax.servlet.ServletException; ...
- 【MybatisPlus】数据库的datetime类型字段为空的时候,报错空指针?
一.发现经历 事情是这样的,我今天本来要演示系统,就去前端同学的页面上点一点.不小心点到了其他同事编写的服务,然后界面就报错了.这给我吓得,这还能演示吗这.然后,我就去服务器查看了一下日志,发现了如下 ...
- Vue之前后端交互
Vue之前后端交互 一.前后端交互模式 接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责 ...
- MindSpore基本原理
MindSpore基本原理 MindSpore介绍 自动微分 自动并行 安装 pip方式安装 源码编译方式安装 Docker镜像 快速入门 文档 MindSpore介绍 MindSpore是一种适用于 ...
- 如何使用Intel vtune profilier?
如何使用Intel vtune profilier?
- 20 岁发表 SCI 的学霸,梦想用算法改变世界
2021 年 2 月,"新内容 新交互" 全球视频云创新挑战赛启幕.本次大赛由英特尔联合阿里云主办,与优酷战略技术合作,天池平台和阿里云视频云团队共同承办.大赛自开赛以来,吸引了全 ...
- Spring Bean 的生命周期总结
除了使用阶段外,Spring 将 bean 的生命周期定义为实例化.属性填充.初始化和销毁四个阶段,并为每个阶段提供了多个拓展点用于自定义 bean 的创建过程.这篇文章介绍了 bean 的生命周期和 ...
- DOS命令行(6)——Windows网络状态及用户管理
ipconfig --查看计算机中适配器的TCP/IP配置信息 命令格式: ipconfig [/allcompartments] [/? | /all | /renew [adapter] | /r ...