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 技术可 ...
随机推荐
- Zabbix 5.0:磁盘读写监控
Blog:博客园 个人 自动发现磁盘 配置键值 注意:此键值仅支持Linux平台. 此发现键值返回两个宏 : {#DEVNAME} :设备名 {#DEVTYPE} :设备类型 例如: [ { &quo ...
- sublime使用与配置
目录 Download Markdown转浏览器显示 1. 简单版本 2. 有MD全格式版本 Install Package Control 删除文本空行 1. Ctrl + H 2. Find \s ...
- OFRecord 图片文件制数据集
OFRecord 图片文件制数据集 在 OFRecord 数据格式 和 加载与准备 OFRecord 数据集 中,分别学习了 OFRecord 数据格式,以及如何将其它数据集转为 OFRecord 数 ...
- 旷视MegEngine网络搭建
旷视MegEngine网络搭建 在 基本概念 中,介绍了计算图.张量和算子,神经网络可以看成一个计算图.在 MegEngine 中,按照计算图的拓扑结构,将张量和算子连接起来,即可完成对网络的搭建.M ...
- 如何使用TensorCores优化卷积
如何使用TensorCores优化卷积 本文将演示如何在TVM中使用TensorCores编写高性能的卷积计划.假设卷积的输入有大量数据.首先介绍如何在GPU上优化卷积. TensorCore简介 每 ...
- 基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化
基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化 Optimizing NVIDIA TensorRT Conversion for Real-time Inference on Auto ...
- 解决redis集群版本不一致导致RDB同步失败的问题
某天,运维反馈某两个机房的出口流量和入口流量过大,并且持续了好一段时间. 再仔细排查后发现是 redis 集群的几台服流量问题,于是开始查日志. 在日志中发现出现大量的 Can't handle RD ...
- ubuntu初识
简单的Linux系统理解 Ubuntu ctrl+alt 可以令虚拟机释放鼠标,回到主系统中. 如果ubuntu有问题,如何重装? -------直接删除目录.虚拟机内的操作不会影响到宿主机. 1.挂 ...
- 【无线通信篇01 | Zstack协议栈】CC2530 Zigbee Zstack协议栈组网项目及详细讲解篇
演示视频:https://www.bilibili.com/video/BV1Ew411o7Fp 物联网无线通信技术,ZigBee无线传感网络 CC2530最大的特点就是一个拥有无线收发器(RF)的单 ...
- Linux集群环境下NTP服务器时间同步
NTP介绍 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调时UTC(Universal Time ...