本文内容

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空中升级(阿里云物联网平台)相关推荐

  1. 图文手把手教程--ESP32 MQTT连接腾讯云物联网平台及OTA固件升级

    本文内容 1)在腾讯云物联网开发平台,新建项目,并在项目下新建设备"light_001". 2)下载腾讯云SDK-esp-qcloud,使用例程led_light,通过" ...

  2. 图文手把手教程--ESP32 OTA空中升级(VSCODE+IDF)

    本文内容 1)使用hello_world例程,编译生成hello_world.bin文件,并且开启HTTP本地服务器. 2)使用simple_ota_example例程,通过HTTP服务器访问hell ...

  3. 手把手教你用Arduino接入阿里云物联网平台,ESP8266连接阿里云物联网平台必看教程...

    使用Ardui no 的方式快速连接阿里云物联网平台. 文中提到的 AliyunIoTSDK 这个 Arduino 库,可以在 Arduino 库商店里搜索到(搜索 AliyunIoTSDK) Ali ...

  4. esp32 + DHT11温湿度传感器+阿里云物联网平台实时数据显示 实现设备上云

    1 课设目的 本课设是通过esp32板子搭配DHT11传感器,检测温度和湿度数据通过MQTT协议实时传输到阿里云物联网开发平台,实现设备上云. 2 阿里云环境准备 2.1开通物联网平台 我们先需要注册 ...

  5. ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议)

    文章目录 1 实验目的 2 在阿里云物联网平台添加实验设备 3 ESP32连接阿里云物联网平台 3.1 准备ESP32工程 3.2 准备ESP32所需的MQTT相关参数 3.4 ESP32工程主要代码 ...

  6. 【PBL项目实战】户外智慧农场项目实战系列——1.阿里云物联网平台的开通与云端可视化应用的新建

    岭师人工智能素养教育共同体PBL项目教程系列之1:户外智慧农场项目实战系列 原文链接  https://mp.weixin.qq.com/s/avKWJHNvnPeFsdEXUBByjw 本系列以户外 ...

  7. 图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台

    本文内容 1)在阿里云生活物联网平台,创建自有品牌项目,并在项目下创建产品"智能灯001". 2)下载阿里云SDK-esp-aliyun,使用例程smart_light,通过&qu ...

  8. STM32+4G模块实战项目(连接阿里云物联网平台+OTA升级):(一)初识硬件

    STM32+4G模块实战项目(OTA升级) 构思占坑中ing.....,3天一章,请耐心等待 STM32+4G模块实战项目(连接阿里云物联网平台+OTA升级):(一)初识硬件 STM32+4G模块实战 ...

  9. 阿里云物联网平台使用图文教程

    文章目录 前言 一.进入阿里云物联网平台 二.公共实例使用方法 1.产品 1.1 产品介绍 1.2 创建产品 2.设备 2.1 设备介绍 2.2 创建设备 3.2 设备操作 3.消息发送和接收 3.1 ...

最新文章

  1. 21张让你代码能力突飞猛进的速查表(神经网络、线性代数、可视化等)
  2. ORCLE 表中列的修改(非常全面哦)
  3. Memcached安装
  4. 主键、聚集索引、非聚集索引区别
  5. 15. 深入解析Pod对象(二):使用进阶
  6. 内存缓存 原理 实现
  7. Ambari 安装配置 MySql
  8. 量化选股模型—多因子模型
  9. 流水线作业调度问题-动态规划(运用Johnson算法)
  10. 个人网站、公众号申请微信个人支付接口
  11. 眼光独到便能发现刷脸支付带来的商机
  12. 21年杭州云栖大会参会总结-安全相关内容
  13. 阿里云的短信服务acsClient+java
  14. 2021年安全员-C证(陕西省)考试资料及安全员-C证(陕西省)新版试题
  15. 直接建内网穿透服务器替换TeamViewer和向日葵可以实现远程操控
  16. Java程序员11面阿里,错失offer,期间还面了EMC+网易+美团......
  17. ARP局域网断网攻击
  18. KT6368A蓝牙芯片开发注意事项以及问题集锦--长期更新
  19. JDK8新特性—常用函数式接口
  20. android 手机多用户探索,如何在主用户删除其他用户

热门文章

  1. 2022icpc沈阳站感想
  2. 大二上学期Java期末考试答案(作答情况)
  3. 解压压缩的文件没有管理员权限
  4. 向死而生的跨境电商,还有几道救命符可用?
  5. 哈佛大学公开课:幸福课在线学习
  6. Python_推荐系统Spark_sqlSpark_streaming(6)
  7. 按关键词搜索商品详情商品销量
  8. UI 系统 -- 血条设计
  9. golang 拷贝大切片一定比小切片代价大吗
  10. 连续的函数一定有原函数(原函数存在定理)