图文手把手教程--ESP32 OTA空中升级(阿里云物联网平台)
本文内容
1)使用ota_example_mqtt例程,通过阿里云物联网平台,进行OTA升级。
2)将例程编译成两个版本,版本1.0.0下载至ESP32开发板,版本2.0.0上传至阿里云物联网平台。
一、首先完成在阿里云生活物联网平台创建自有品牌项目:
图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台
二、创建ota_example_mqtt例程。
1)创建示例项目ota_example_mqtt:VSCODE中->"查看"->”命令面板“->输入:Show Examples projects->选择Use current ESP-IDF(E:\ESP32-IDF\esp\esp-idf)->弹出示例ESP-IDF Examples,选择aliyun->ota->ota_example_mqtt->Create project using ota_example_mqtt->选择示例保存的路径。
例如:E:\ESP32-IDF\project-example,因ESP-IDF框架与示例是分离的,所以示例保存的路径可以随意,但需要注意:路径不能有中文和空格,否则报错。
2)创建完成,如下图所示。
打开后,如果右下角提示是否允许Makefile Tools配置,则选择不允许。
如果不小心选择了允许,则会出现:头文件报警告“在 browse.path 中未找到包含文件”,即头文件有波浪线,无法跳转。原因:本地没有安装cmake。
解决办法:在.vscode->c_cpp_properties.json中删除"configurationProvider": "ms-vscode.cmake-tools"即可。
三、修改例程的配置和代码,编译、下载到ESP32开发板。
3.1 将四元组生成bin文件进行烧录,适合量产。
smart_light例程,详见博客:图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台
1)打开例程smart_light,复制single_mfg_config.csv到ota_example_mqtt项目下。
2)打开single_mfg_config.csv,可以看到四元组已填写好了。
3)四元组生成bin文件以及烧录四元组bin文件,详见以下的博客:
图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台
3.2 配置flash大小和分区表。
打开SDK可视化配置,设定flash大小和设定“partition table”分区表。
3.3 配置wifi帐号和密码。
3.4 配置版本号为1.0.0。
3.5 修改app_main()代码。
void app_main()
{conn_mgr_init();conn_mgr_register_wifi_event(wifi_event_handle);conn_mgr_set_wifi_config_ext((const uint8_t *)EXAMPLE_WIFI_SSID, strlen(EXAMPLE_WIFI_SSID), (const uint8_t *)EXAMPLE_WIFI_PASS, strlen(EXAMPLE_WIFI_PASS));IOT_SetLogLevel(IOT_LOG_DEBUG);//设置日志水平为5,高于5的日志被屏蔽,例如:LOG_FLOW_LEVEL被屏蔽不打印。conn_mgr_start();while (1){printf("firmware_version=%s\n", CONFIG_LINKKIT_FIRMWARE_VERSION);//打印版本号vTaskDelay(1000 / portTICK_PERIOD_MS);}
}
3.6 修改ota_solo.c中170行的代码。
//if (0 != IOT_OTA_ReportVersion(h_ota, "iotx_ver_1.0.0")) {if (0 != IOT_OTA_ReportVersion(h_ota, CONFIG_LINKKIT_FIRMWARE_VERSION)) {rc = -1;EXAMPLE_TRACE("report OTA version failed");goto do_exit;}
3.7 编译、下载到ESP32开发板。
打开串口监控,显示信息如下图所示。
四、在阿里云物联网平台,进行OTA批量升级。
4.1 配置版本号为2.0.0,保存后重新进行编译。
4.2 将生成的bin文件,复制到桌面,并重命名为ota_example_mqtt_v2.0.0。
4.3 在阿里云物联网平台,添加升级包并发起批量升级。
1)登陆进入阿里云物联网平台,进入公共实例。
2)监控运维->OTA升级->添加升级包。
3)添加升级包完成,如下图所示。
4)ESP32下载的程序版本是1.0.0,在VSCODE中先打开串口监控,以便观察升级的过程。
5)点击批量升级。
6)选择静态升级,定向升级,选择要升级的设备,然后点击下一步。
7)点击完成后,在VSCODE串口监控中可以看到,收到平台发送的升级指令。
正在下载固件中...
8)最后可以看到MD5验证失败,原因是从平台得到的origin为空,但升级却显示成功了。
从打印的版本号,确实是升级成功了。
五、解决固件校验失败,平台显示升级失败的问题。
1)修改以下代码。
case IOT_OTAG_CHECK_FIRMWARE:if ((4 != buf_len) || (0 != ((unsigned long)buf & 0x3))) {OTA_LOG_ERROR("Invalid parameter");h_ota->err = IOT_OTAE_INVALID_PARAM;return -1;} else if (h_ota->state != IOT_OTAS_FETCHED) {h_ota->err = IOT_OTAE_INVALID_STATE;OTA_LOG_ERROR("Firmware can be checked in IOT_OTAS_FETCHED state only");return -1;} else {char md5_str[33];otalib_MD5Finalize(h_ota->md5, md5_str);//OTA_LOG_DEBUG("origin=%s, now=%s", h_ota->md5sum, md5_str);//删除OTA_LOG_DEBUG("origin=%s, now=%s", h_ota->sign, md5_str); //增加//if (0 == strcmp(h_ota->md5sum, md5_str)) { //删除if (0 == strcmp(h_ota->sign, md5_str)) { //增加*((uint32_t *)buf) = 1;} else {*((uint32_t *)buf) = 0;IOT_OTA_ReportProgress(h_ota, IOT_OTAP_CHECK_FALIED, NULL);OTA_LOG_ERROR("image checksum compare failed");}return 0;}
造成此原因,是因为从平台得到的升级包签名,是保存在h_ota->sign变量中,而不是h_ota->md5sum,所以这里存在BUG,需要修改。
2)修改完毕后,重新编译、下载程序到ESP32开发板中,打开串口监控。
平台中显示升级成功。
六、修改版本号涉及的几个地方。
1)宏定义所在的文件--工程->sdkconfig。
2) 上报版本号所在的文件--工程->ota_solo.c。
3) 获取固件版本号所在的文件--ESP32-IDF\esp\esp-idf\components\esp-aliyun\wrappers。
4)调试用,增加的版本号打印。
至此,ESP32 OTA空中升级(阿里云物联网平台)已全部完成,愉快的玩耍吧!
完整的例程代码下载:https://download.csdn.net/download/felix_tao/86469362
使用例程,报错怎么办,解决办法如下:
1)打开VSCODE报错,c_cpp_properties.json无法找到E:\\ESP32-IDF...
解决办法:点击.vscode->c_cpp_properties.json,修改盘符即可,例如将E盘改为D盘。
2)编译工程报错:
[0/1] Re-running CMake...
FAILED: build.ninja
CreateProcess failed: The system cannot find the file specified.
ninja: error: rebuilding 'build.ninja': subcommand failed
解决方法:清除编译产生的所有文件,左下角->点击垃圾桶图标(ESP-IDF Full Clean)->清除后,接着重新编译即OK。
本文参考的文档:
设备OTA开发 - 设备接入Link SDK - 阿里云
图文手把手教程--ESP32 OTA空中升级(阿里云物联网平台)相关推荐
- 图文手把手教程--ESP32 MQTT连接腾讯云物联网平台及OTA固件升级
本文内容 1)在腾讯云物联网开发平台,新建项目,并在项目下新建设备"light_001". 2)下载腾讯云SDK-esp-qcloud,使用例程led_light,通过" ...
- 图文手把手教程--ESP32 OTA空中升级(VSCODE+IDF)
本文内容 1)使用hello_world例程,编译生成hello_world.bin文件,并且开启HTTP本地服务器. 2)使用simple_ota_example例程,通过HTTP服务器访问hell ...
- 手把手教你用Arduino接入阿里云物联网平台,ESP8266连接阿里云物联网平台必看教程...
使用Ardui no 的方式快速连接阿里云物联网平台. 文中提到的 AliyunIoTSDK 这个 Arduino 库,可以在 Arduino 库商店里搜索到(搜索 AliyunIoTSDK) Ali ...
- esp32 + DHT11温湿度传感器+阿里云物联网平台实时数据显示 实现设备上云
1 课设目的 本课设是通过esp32板子搭配DHT11传感器,检测温度和湿度数据通过MQTT协议实时传输到阿里云物联网开发平台,实现设备上云. 2 阿里云环境准备 2.1开通物联网平台 我们先需要注册 ...
- ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议)
文章目录 1 实验目的 2 在阿里云物联网平台添加实验设备 3 ESP32连接阿里云物联网平台 3.1 准备ESP32工程 3.2 准备ESP32所需的MQTT相关参数 3.4 ESP32工程主要代码 ...
- 【PBL项目实战】户外智慧农场项目实战系列——1.阿里云物联网平台的开通与云端可视化应用的新建
岭师人工智能素养教育共同体PBL项目教程系列之1:户外智慧农场项目实战系列 原文链接 https://mp.weixin.qq.com/s/avKWJHNvnPeFsdEXUBByjw 本系列以户外 ...
- 图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台
本文内容 1)在阿里云生活物联网平台,创建自有品牌项目,并在项目下创建产品"智能灯001". 2)下载阿里云SDK-esp-aliyun,使用例程smart_light,通过&qu ...
- STM32+4G模块实战项目(连接阿里云物联网平台+OTA升级):(一)初识硬件
STM32+4G模块实战项目(OTA升级) 构思占坑中ing.....,3天一章,请耐心等待 STM32+4G模块实战项目(连接阿里云物联网平台+OTA升级):(一)初识硬件 STM32+4G模块实战 ...
- 阿里云物联网平台使用图文教程
文章目录 前言 一.进入阿里云物联网平台 二.公共实例使用方法 1.产品 1.1 产品介绍 1.2 创建产品 2.设备 2.1 设备介绍 2.2 创建设备 3.2 设备操作 3.消息发送和接收 3.1 ...
最新文章
- 21张让你代码能力突飞猛进的速查表(神经网络、线性代数、可视化等)
- ORCLE 表中列的修改(非常全面哦)
- Memcached安装
- 主键、聚集索引、非聚集索引区别
- 15. 深入解析Pod对象(二):使用进阶
- 内存缓存 原理 实现
- Ambari 安装配置 MySql
- 量化选股模型—多因子模型
- 流水线作业调度问题-动态规划(运用Johnson算法)
- 个人网站、公众号申请微信个人支付接口
- 眼光独到便能发现刷脸支付带来的商机
- 21年杭州云栖大会参会总结-安全相关内容
- 阿里云的短信服务acsClient+java
- 2021年安全员-C证(陕西省)考试资料及安全员-C证(陕西省)新版试题
- 直接建内网穿透服务器替换TeamViewer和向日葵可以实现远程操控
- Java程序员11面阿里,错失offer,期间还面了EMC+网易+美团......
- ARP局域网断网攻击
- KT6368A蓝牙芯片开发注意事项以及问题集锦--长期更新
- JDK8新特性—常用函数式接口
- android 手机多用户探索,如何在主用户删除其他用户