ESA2GJK1DH1K升级篇: 阿里云物联网平台 OTA: 关于阿里云物联网平台 OTA 的升级流程

前言

  鉴于有些用户直接想使用现成的物联网平台实现 OTA 远程升级

  我就写一写这系列的文章

  注意:首先大家必须把我自建服务器是如何实现的看明白!

  我看了下阿里云提供的,实际上流程和咱自建实现的差别不大

  https://help.aliyun.com/document_detail/85700.html?spm=a2c4g.11186623.6.699.6292740d5hzKl6

  首先控制升级获取当前程序的版本号等走的还是MQTT

  设备端首先通过MQTT获取云端的版本信息,还有程序固件的https链接

  然后设备根据https链接访问下载固件,然后写入Flash以后就升级完了....

现在说一下具体流程

  一,请求固件:

  首先阿里云OTA规定

  你MQTT请求固件的主题是

  /ota/device/inform/${YourProductKey}/${YourDeviceName}

  消息格式   

{
  "id": "123",
  "params": {
    "version": "1.0.1"
  }
}

  二,阿里云回复:

    回复的MQTT主题: /ota/device/upgrade/${YourProductKey}/${YourDeviceName}

    回复的消息格式:

{
  "code": "1000",
  "data": {
    "size": 432945,
    "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": "1507707025",
  "message": "success"
}
 
  然后单片机提取 url 然后访问,即可获取到固件了
  实际上我做的老版本的使用LUA升级Wi-Fi模块和GPRS模块就是这种流程,
  单片机升级取消了这个获取url的流程,因为感觉繁琐所以去掉了
  不过我的APP升级还是这种流程
https://www.cnblogs.com/yangfengwu/p/11273734.html

    

  三,升级过程中设备上报:

    MQTT发布的主题:/ota/device/progress/${YourProductKey}/${YourDeviceName}

    消息格式:

    

{
  "id": "123",
  "params": {
    "step": "-1",
    "desc": "固件升级失败,请求不到固件信息。"
  }
}

 

  四,升级完:

    阿里云规定升级完以后,和一开始一样上报一下版本

    /ota/device/inform/${YourProductKey}/${YourDeviceName}

    

{
  "id": "123",
  "params": {
    "version": "1.0.1"
  }
}

不过现在的版本 应该是上报的升级以后的版本号

不过感觉阿里应该再优化的地方-1

  对于阿里提供的流程而言我感觉挺亲切,因为我的老版的升级教程就是这样子的流程

  不过呢有个地方感觉阿里应该再优化下

  阿里的固件的校验方式

  

  

  我感觉这样有点不好.

  其实应该可以让用户自定义个参数

  因为很多用户已经实现了升级,而且都有自己的程序文件校验方式.

  这样就给很多用户增加了工作量....

不过感觉阿里应该再优化的地方-2

  应该很多单片机的升级都是使用的 乒乓升级

  就是说每次升级的时候两块内存区来回的切换升级

  这就需要两份文件.

  列如我的升级篇使用的单片机分配情况

  

  而阿里提供的是每次访问的时候只能是一套......

  那我们只能把原来的乒乓升级改一下

  

  用其中一块区域专门接收程序文件,然后对程序文件做校验

  保证了程序文件确实没有问题以后

  再把文件拷贝过去运行......

  这样有个问题是,,,万一写的程序有问题,就不能实现程序回滚了

  

  感觉最好可以上传两套程序文件

  然后自定义一个参数 可以访问哪一套

  

猜你喜欢

转载自www.cnblogs.com/yangfengwu/p/12079110.html