zoukankan      html  css  js  c++  java
  • 001-使用阿里云物联网平台 OTA 远程升级STM32程序-基于ESP8266

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

    前言

    这节说明一下如何使用阿里云物联网平台的OTA远程升级STM32程序-基于ESP8266

    用户必须已经学习完了基本控制方案里面的阿里云物联网平台教程

    和远程升级方案里面的自建服务器实现远程升级的教程!

    阿里云物联网平台是通过MQTT获取升级固件的地址信息,

    其实和咱自建服务器里面的使用APP/微信小程序控制单片机升级是一样的套路!

    只不过咱是把程序文件放到物联网平台服务器上而已.

    提示:咱放到云平台上面的固件也是和自建服务器里面的一样添加完CRC校验的固件,

    咱整个程序其实只修改了用户程序里面获取固件信息的方式而已!

    升级概述

    1,实现升级是使用的基础通信里面的Topic

    阿里云介绍文档:

    https://help.aliyun.com/document_detail/89307.html?spm=a2c4g.11186623.6.712.2409429dNoQXsh

    /ota/device/inform/a1m7er1nJbQ/${deviceName} 

    设备通过这个主题上报自己的 版本号

    格式: {"id":"0000","params":{"version": "0.0.1"}}

    /ota/device/upgrade/a1m7er1nJbQ/${deviceName}

    设备需要订阅这个主题,服务器会通过这个主题下发固件信息

    size是固件大小;  version是服务器固件版本;  url是固件下载地址

    {
      "code": "1000",
      "data": {
        "size": 432945,
        "version": "2.0.0",
        "isDiff": 1,
        "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": "93230c3bde425a9d7984a594ac55****",
        "signMethod": "Md5",
        "module": "MCU"
      },
      "id": "1507707025",
      "message": "success"
    }

    /ota/device/progress/a1m7er1nJbQ/${deviceName}

    上报更新进度

    /ota/device/request/a1m7er1nJbQ/${deviceName}

    主动请求云端固件信息

    生成固件程序

    1.打开用户程序

     2.根据自己在平台注册的设备信息修改

    注:这节密码需要自己填上了,因为内存不够了,所以屏蔽了自动计算密码的地方.

    3.让WiFi连接自己的路由器

    4.修改固件的版本

    5.编译生成bin文件

    6.打开OTA Tools.exe软件生成带有CRC校验的固件

     

     

    在物联网平台上新增固件

    1.设备运维 - 固件升级 - 新增固件

    fdg 

     

    2-上传固件

    固件名称:随意

    所属产品:选择一个自己在平台上注册的产品

    注:固件版本号要和单片机程序里面的保持一致

     

    3.当前固件会显示未验证

    阿里云物联网平台规定上传的固件需要先测试验证

    就是用其中的一台设备先跑个流程.

    下载单片机程序

    1.下载BootLoader程序到单片机

    2.用下载器下载用户程序到单片机

    1.修改用户程序版本为000000

    注:我只是为了区分出来各个设备,当我这个设备的版本号是特殊的,我好用这个设备测试

    3.选择擦除使用区的Flash,然后下载

    4.确保用户程序正常运行

    5.在平台上点击验证固件,待升级的版本号选择000000 

     

    6.选择咱的那个设备

    7.设备升级超时时间根据自己的设备设置

    当前我的程序升级过程小于1分钟.

    8.点击完确定以后,设备会收到服务器通过MQTT发送的更新信息

    {"code":"1000","data":{"size":20410,"sign":"8ee365e63505202184af25bc73d8d79e","version":"0.0.1","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/5f0103cd96ad6ac7d12b5492a54b003c/ckevmjb0o00004k8617tle1qq.bin?Expires=1599757056&OSSAccessKeyId=LTAI4G1TuWwSirnbAzUHfL3e&Signature=qokk4wdr78CTsehWDf3aE2T9ye8%3D","signMethod":"Md5","md5":"8ee365e63505202184af25bc73d8d79e"},"id":1599670656831,"message":"success"}

    单片机程序提取 size字段,和url字段的内容存到flash里面重启!执行BootLoader

    9.BootLoader获取程序文件

    10,下载完程序重启

    11,执行下载的程序

    第一时间上报当前程序版本

    12,刷新一下网页

     

    13,咱现在就用设备验证好了固件,现在固件可以让其它设备用了

    14,因为我就一个设备,还做为了验证固件用的,我那天设备的固件版本已经是0.0.1最新

    所以这里找不到待升级的设备

    15,可以修改下用户程序的版本为0.0.0

    然后重新下载用户程序,就当做咱的老版本设备.

    16,下载完用户程序,看到上报版本了以后

    17,选择0.0.0的那个版本

    其它的选项一看就明白哈,就不说了.

    18,设备升级了

    19,这样子,关于阿里云物联网平台控制升级的步骤就说完了

    其实稍微总结下就是:

    使用阿里云物联网平台给的关于升级的MQTT的主题

    从主题里面获取升级的信息,提取size,和url

    然后存储到flash里面,然后就交给BootLoader访问下载了

    设备上线以后需要第一时间上报下版本号,然后就好了

    云端提交的固件说明

    1.我让大家提交的是用我写的OTA工具加上CRC校验后的固件

    细心的用户会发现,平台提供了默认MD5校验

    我没选择用平台提供的MD5,因为我如果用了就需要单片机对整个bin文件

    做MD5,我想想还是算了吧!

    还是沿用了我自建服务器里面的方式!bin文件自己加CRC校验位

    这样底层BootLoader不需要改变代码就可以兼容各大物联网平台!

    在稳定可靠的基础上,就要倾向于代码的通用性!

    单片机程序说明

    1.首先BootLoader程序和自建服务器里面的一模一样!!就不再多说了

    2.用户程序比较抱歉的事情是由于内存原因屏蔽掉了计算密码部分

    突然想起来一句话:巧妇难为无米之炊

    3.程序里面增加了接收/发送升级信息的主题

    4.订阅接收升级消息的主题

    连接上平台第一时间上报自己的版本号

    5.如果接收到更新相关的消息提取url和size写入flash

    其余的就交给BootLoader程序了

    不过阿里云给的是https链接,前半个月还可以用ESP8266的https访问下载

    现在却不行了,郁闷中.....不过也可以用80端口访问下载.

    所以我把链接中的https改为了http

  • 相关阅读:
    2.4 Git 基础
    MySQL的连接命令
    linux中的ls、cd、pwd命令
    Vim 快速入门之基本命令
    linux 中查看进程、杀死进程、进入进程的命令
    linux下文件夹的创建、复制、剪切、重命名、清空和删除的命令
    Linux下tar压缩和解压缩命令详解
    用Windows远程桌面连接树莓派的方法
    MariaDB数据库安装完需要初始化操作
    linux设置服务为自动启动和关闭并禁用的命令
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/13591513.html
Copyright © 2011-2022 走看看