ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程
前言
鉴于有些用户直接想使用现成的物联网平台实现 OTA 远程升级
我就写一写这系列的文章
首先大家需要学习完这部分
https://www.cnblogs.com/yangfengwu/p/11828777.html

现在说一下具体流程
新增固件
一,选择物联网平台里面的

固件名称: 随意
所属产品: 选择自己创建的产品
版本号: 1.0
签名算法:MD5
大家随意上传一个固件(文件),这节只是测试.

提示
一,提示
咱在基础篇添加了一个产品,然后产品下添加了一个设备,然后得到的这台设备的信息
{
"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
}
然后得到
IP地址: a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com
端口号: 1883
Client ID: 112233445566|securemode=3,signmethod=hmacsha1|
用户名: Mqtt&a1m7er1nJbQ
密码: 8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE
咱如果想升级呀,其实也是按照基础篇介绍的那样连接MQTT
只不过呢订阅和发布的主题有区别
https://help.aliyun.com/document_detail/85700.html?spm=a2c4g.11186623.6.699.581b740dLmrTn8 说明文档
二,请求固件
请求固件的主题:
/ota/device/inform/${YourProductKey}/${YourDeviceName}
对于上面的设备而言发布的主题就是: /ota/device/inform/a1m7er1nJbQ/Mqtt
设备发送的消息格式
{
"id": "",
"params": {
"version": "1.0.1"
}
}
三,阿里云回复:
/ota/device/upgrade/${YourProductKey}/${YourDeviceName}
对于上面的设备而言需要订阅主题: /ota/device/upgrade/a1m7er1nJbQ/Mqtt
设备接收的消息格式:
{
"code": "",
"data": {
"size": ,
"version": "2.0.0",
"url": "https://iotx-ota-pre.oss-cn-shanghai.aliyuncs.com/nopoll_0.4.4.tar.gz?Expires=1502955804&OSSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XfgJu7P6DWWejstKJgXJEH0qAKU%3D&security-token=CAISuQJ1q6Ft5B2yfSjIpK6MGsyN1Jx5jo6mVnfBglIPTvlvt5D50Tz2IHtIf3NpAusdsv03nWxT7v4flqFyTINVAEvYZJOPKGrGR0DzDbDasumZsJbo4f%2FMQBqEaXPS2MvVfJ%2BzLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fr6%2F5gdc9FcQSkL0B8ZrFsKxBltdUROFbIKP%2BpKWSKuGfLC1dysQcO1wEP4K%2BkkMqH8Uic3h%2Boy%2BgJt8H2PpHhd9NhXuV2WMzn2%2FdtJOiTknxR7ARasaBqhelc4zqA%2FPPlWgAKvkXba7aIoo01fV4jN5JXQfAU8KLO8tRjofHWmojNzBJAAPpYSSy3Rvr7m5efQrrybY1lLO6iZy%2BVio2VSZDxshI5Z3McKARWct06MWV9ABA2TTXXOi40BOxuq%2B3JGoABXC54TOlo7%2F1wTLTsCUqzzeIiXVOK8CfNOkfTucMGHkeYeCdFkm%2FkADhXAnrnGf5a4FbmKMQph2cKsr8y8UfWLC6IzvJsClXTnbJBMeuWIqo5zIynS1pm7gf%2F9N3hVc6%2BEeIk0xfl2tycsUpbL2FoaGk6BAF8hWSWYUXsv59d5Uk%3D",
"md5": "93230c3bde425a9d7984a594ac55ea1e",
"sign": "93230c3bde425a9d7984a594ac55ea1e",
"signMethod": "Md5"
},
"id": "",
"message": "success"
}
然后单片机提取 url 然后访问,即可获取到固件了.
四,升级过程中设备上报进度或者失败
/ota/device/progress/${YourProductKey}/${YourDeviceName}
对于上面的设备而言发布的主题就是: /ota/device/progress/a1m7er1nJbQ/Mqtt
消息格式:
{
"id": "",
"params": {
"step": "-1",
"desc": "固件升级失败,请求不到固件信息。"
}
}

五,设备升级完以后:
阿里云规定升级完以后,和一开始一样上报一下版本
/ota/device/inform/${YourProductKey}/${YourDeviceName}
对于上面的设备而言发布的主题就是: /ota/device/inform/a1m7er1nJbQ/Mqtt
{
"id": "",
"params": {
"version": "1.0.1"
}
}
不过现在的版本 应该是上报的升级以后的版本号
然后就完成了升级
验证固件
一, 有了上面的提示以后咱接着说具体的步骤
阿里云规定,一开始先测试下固件好不好使,所以需要验证固件
先不要点击...
二, 咱需要先用一个设备上报一个与当前云端固件不一样的版本
咱用调试助手模拟这台设备 我设置我这个设备当前的版本号是 0.0

三, 点击验证固件

3.2 现在待升级里面的版本号就有了0.0

3.3 选择咱刚才用调试助手模拟的设备
注: 以后咱肯定不止一台设备,阿里希望咱每次更新固件的时候,先拿一台设备做下测试

3.4 点击确定

3.5 看一下调试助手

{"code":"1000","data":{"size":15824,"sign":"d91b82d73681f83eb57f1f791af61563","version":"1.0","url":"https://ota.iot-thing.cn-shanghai.aliyuncs.com/ota/5f0103cd96ad6ac7d12b5492a54b003c/ck4ibxt1000002m201sk6bmx1.bin?Expires=1577454705&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=Xv%2B21YX%2Fy7eE2LKz31UeK%2B2YCIg%3D","signMethod":"Md5","md5":"d91b82d73681f83eb57f1f791af61563"},"id":1577368305108,"message":"success"}
如果咱是真实的设备,咱就应该提取url 去下载程序
https://ota.iot-thing.cn-shanghai.aliyuncs.com/ota/5f0103cd96ad6ac7d12b5492a54b003c/ck4ibxt1000002m201sk6bmx1.bin?Expires=1577454705&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=Xv%2B21YX%2Fy7eE2LKz31UeK%2B2YCIg%3D"
3.6 咱用MQTT调试助手发送下最新的版本给阿里云,告诉阿里云我已经升级成功

3.7 点击查看,

3.8 点击返回

3.9 现在就可以正常的升级设备了
点击批量升级

现在才是重点
一,你会发现第一项没有东西可选

其实阿里呢是这个步骤:
假设我当前所有设备的版本号是 0.0
我重新在阿里云OTA上传了固件,设置了固件版本是 1.0
我现在想让0.0版本的设备去升级新版本
你的设备必须通过MQTT上报当前的版本号,也就是0.0

然后才会出现需要升级的版本号

然后设置版本是0.0的设备的升级配置

这个地方测试的有点懵逼.......

测试下这个让我懵逼的地方
一,再弄个新设备

二,这个新设备只要不上报自己的版本则不会收到服务器的任何东西
咱上报一下版本0.0
我现在的设备就是 "待升级" 状态

三,假设现在设备不小心重启了
云端主动推送升级信息来了

不过感觉阿里应该再优化的地方-1
阿里的固件的校验方式


我感觉这样有点不好.
其实应该可以让用户自定义个参数
因为很多用户已经实现了升级,而且都有自己的程序文件校验方式.
这样就给很多用户增加了工作量....
不过感觉阿里应该再优化的地方-2
应该很多单片机的升级都是使用的 乒乓升级
就是说每次升级的时候两块内存区来回的切换升级
这就需要两份文件.
列如我的升级篇使用的单片机分配情况

而阿里提供的是每次访问的时候只能是一套......
那我们只能把原来的乒乓升级改一下
用其中一块区域专门接收程序文件,然后对程序文件做校验
保证了程序文件确实没有问题以后
再把文件拷贝过去运行......
这样有个问题是,,,万一写的程序有问题,就不能实现程序回滚了
感觉最好可以上传两套程序文件
然后自定义一个参数 可以访问哪一套
ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程的更多相关文章
- ESA2GJK1DH1K基础篇: 关于各大物联网平台的MQTT通信
前言 这节稍微唠叨点 其实我很长时间都没有出怎么连接现成的物联网平台的教程, 一直写的是教给大家自己搭建服务器,主要原因是因为我感觉连接现有的学不到东西. 现在出这种教程,是因为发现确实很多人喜欢用. ...
- 国内物联网平台(5):机智云IoT物联网云服务平台及智能硬件自助开发平台
国内物联网平台(5)——机智云IoT物联网云服务平台及智能硬件自助开发平台 马智 平台定位 机智云平台是致力于物联网.智能硬件云服务的开放平台.平台提供了从定义产品.设备端开发调试.应用开发.产测.运 ...
- 国内物联网平台初探(五) ——机智云IoT物联网云服务平台及智能硬件自助开发平台
平台定位 机智云平台是致力于物联网.智能硬件云服务的开放平台.平台提供了从定义产品.设备端开发调试.应用开发.产测.运营管理等覆盖智能硬件接入到运营管理全生命周期服务的能力. 机智云平台为开发者提供了 ...
- 【阿里云IoT+YF3300】15.阿里云物联网小程序构建
2013年8月,“轻应用”概念提出,但是仅仅活跃四年随后淡出 ,直到2017年1月9号借助微信小程序成功续命.一时间,以微信小程序和支付宝小程序为代表的轻应用解决方案迅速贯穿多个环节,成为“万物互联” ...
- 阿里云发布CloudOps白皮书,ECS自动化运维套件新升级
12月10 日,2021云上架构与运维峰会上,阿里云发布业界首部<云上自动化运维白皮书>(简称CloudOps白皮书),并在其中提出了CloudOps成熟度模型.同时,阿里云还宣布了ECS ...
- 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(视频总揽)
1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(方案总揽) https://v.youku.com/v_show/id_XNDE0Njk3Njg2OA==. ...
- 1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(方案总揽)
我的这个升级篇的代码适用于自己所有的带WIFI和GPRS模块的开发板,升级功能实质上是通过MQTT把数据发给WIFI和GPRS模块,然后模块进行保存和运行. 这个升级程序是当时自己花了两个星期的时间写 ...
- 7-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(TCP实现HTTP访问下载文件,明白底层如何实现的,地基稳才踏实)
看了好多文章.....唉,还是自己亲自动手用网络监控软件测试吧 先看这个节安装WEB服务器.....安装好以后就可以用HTTP访问电脑文件了 6-STM32物联网开发WIFI(ESP8266)+GPR ...
- 直压到亚马逊AWS平台,阿里云OSS平台或者腾讯云COS平台
GTX Compressor (直压上云技术预览版) Powered by GTXLab of Genetalks. 技术预览版本下载地址: https://github.com/Genetalks/ ...
随机推荐
- 史上最全的各种C++ STL容器全解析
史上最全的C++ STL 容器大礼包 为什么\(C++\)比\(C\)更受人欢迎呢?除了\(C++\) 的编译令人感到更舒适,\(C++\)的标准模板库(\(STL\))也占了很重要的原因.当你还在用 ...
- React Hooks用法大全
前言 在 React 的世界中,有容器组件和 UI 组件之分,在 React Hooks 出现之前,UI 组件我们可以使用函数,无状态组件来展示 UI,而对于容器组件,函数组件就显得无能为力,我们依赖 ...
- 【Nginx】Nginx反向代理转发Host设置
#事故现场: 服务器A(Nginx服务器):192.168.2.126 服务器B(Web服务器):192.168.2.221 服务器A反向代理服务器B,A配置了upstream为: http { up ...
- Fuzzy finder(fzf+vim) 使用入门指南
今天无意中尝试了fzf,才发现这个工具的威力无穷,毕竟是非常好的工具,第一次都把它的优点都释放出来也不现实,先熟悉一下吧,后面在实战中再不断地学习总结. 它是什么: Fuzzy finder 是一款使 ...
- C语言程序设计100例之(1):鸡兔同笼
例1 鸡兔同笼 [问题描述] 一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有例外).已知笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物? [输入数据] 第1 行是测 ...
- laravel使用Dingo\Api通过response()->json()返回空对象
laravel使用Dingo\Api写接口跟android对接时,android一直反应解析错误,无法解析数据. { "status_code":200, "messag ...
- Netty—TCP的粘包和拆包问题
一.前言 虽然TCP协议是可靠性传输协议,但是对于TCP长连接而言,对于消息发送仍然可能会发生粘贴的情形.主要是因为TCP是一种二进制流的传输协议,它会根据TCP缓冲对包进行划分.有可能将一个大数据包 ...
- 故事2:.net程序员成长经历
啊,最近一段时间在学习asp.net mvc ,一直没有接着写了,加上白天工作很忙,每天都很辛苦的哈,那咱接着说上一个故事哈. 当时第二天开始复习java面试题,非常的期待,从来没有去过公司,不知道别 ...
- 使用 FiddlerCore 自定义 HTTP/HTTPS 网络代理
Fiddler 是个很好用的网络请求查看与调试工具,还可以写插件来扩展其功能. Fiddler 插件开发,使用 WPF 作为 UI 控件 - J.晒太阳的猫 - 博客园 但部分场景下,需要自定义很多网 ...
- 使用dapper遇到的问题及解决方法
在使用dapper进行数据查询时遇到的一个问题,今天进行问题重现做一个记录,免得忘记以后又犯同样的错误. 自己要实现的是:select * from tablename where id in(1,2 ...