zoukankan      html  css  js  c++  java
  • 移远4G模块连接阿里云进行OTA升级记录

    上篇:EC600S连接阿里云

    在完成连接阿里云之后,此时阿里云物联网平台下对应的设备处于在线状态。

    之后我们上传升级包BIN文件到阿里云,参考:https://blog.csdn.net/zrh565309720/article/details/117225444

    这些基础操作百度一大堆,我直接跳过,我后面要记录的是我这几天多方查找,终于完成从连接->下载BIN文件到stm32单片机的全过程。

    十分感谢up主 阿正啷个哩个啷(https://www.bilibili.com/video/BV1zv411t71G),他的三期视频给了我特别大的帮助,而且还有源码参考,省大力气了。

     1 //连接到物联网平台,上传升级包后,我们就需要让我们的设备获取到升级包的下载地址
     2 
     3 //在产品->TOPIC类列表->基础通信TOPIC中可以看到OTA升级需要
     4 //订阅固件升级信息下行,
     5 /ota/device/upgrade/a1KAGfJc50T/${deviceName}
     6 
     7 AT+QMTSUB=0,1,"/ota/device/upgrade/a1KAGfJc50T/EC600DYU",1
     8 
     9 //按照我上面的修改一下就可以了。
    10 此时只要重新连接一下MQTT,就可以获取到升级包信息,前提是你上传升级包时勾选了主动推送升级包。
    11 
    12 //自动推送的升级包信息
    13 +QMTRECV: 0,0,"/ota/device/upgrade/a1KAGfJc50T/EC600DYU","{"code":"1000","data":{"size":73508,"extData":{"_package_udi":"ceshi"},"module":"test","sign":"a66f220bd0473d78837db3a80c57caee","version":"1","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/e7d904164660d3eda03979d924446a27/cks89kmbh0000268gea470gvx.BIN?Expires=1628821879&OSSAccessKeyId=LTAI4G1TuWwSirnbAzUHfL3e&Signature=3my%2FcbeaWr9eEl0bkOhYu6wAzU4%3D","signMethod":"Md5","md5":"a66f220bd0473d78837db3a80c57caee"},"id":1628735479846,"message":"success"}"

    "size":73508 表示升级包的大小,单位字节
    "module":"test"  你创建升级包时有个module的选择,不创建的话,默认default,这个重要,在后面主动获取升级包时需要用到
    "version":"1", 版本信息
    "url": 这后面一大串就是升级包下载链接


    获取到升级包链接后就可以开始下载了,下载之前我先讲一个困扰我新手小白两天,搜寻,试验N次无果,最后求助阿里云工程师搞定的操作。

    如何主动获取阿里云上传的升级包信息。

    前面我们说每次自动连接时,在成功订阅/ota/device/upgrade/a1KAGfJc50T/${deviceName}后,都会给我们自动发一个省级包,那如果一直连接,升级包又没有更新,那就不能收到升级包信息了

    这时候就需要主动获取。

    打开基础通信TOPIC可以看到:设备主动拉取固件升级信息 是使用请求TOPIC:/sys/a1KAGfJc50T/${deviceName}/thing/ota/firmware/get

    在发送请求TOPIC前,我们需要先订阅响应TOPIC:/sys/a1KAGfJc50T/${deviceName}/thing/ota/firmware/get_reply

     1 //第一步,订阅响应TOPIC
     2 
     3 AT+QMTSUB=0,1,"/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get_reply",1
     4 
     5 OK
     6 
     7 +QMTSUB: 0,1,0,1
     8 
     9 //第二步,主动查询升级包
    10 AT+QMTPUB=0,1,1,0,"/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get"
    11 
    12 > {"id":"3","version":"2","params":{"moudle":"default"},"method":"thing.ota.firmware.get"}
    13 
    14 
    15 //说一下这个升级包ALINK格式注意事项:
    16 //1.ID:数字,每次发送更改一下,别重复
    17 //版本号:如果版本号是最新的,可能就不回复url了,不确定,自己试试
    18 //"moudle":如果你设置了"moudle"的名称,就写你的名称,没有就default,或者不写
    19 //"method":固定不变
    20 OK
    21 
    22 +QMTPUB: 0,1,0
    23 
    24  //这里多了一个+QMTRECV:,可以取消,取消订阅这个topic/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get
    25 
    26 +QMTRECV: 0,2598,"/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get","{"id":"3","version":"2","params":{"moudle":"default"},"method":"thing.ota.firmware.get"}
    27 "
    28  //查到的升级包
    29 +QMTRECV: 0,0,"/sys/a1KAGfJc50T/EC600DYU/thing/ota/firmware/get_reply","{"code":200,"data":{"size":73508,"sign":"a66f220bd0473d78837db3a80c57caee","version":"3","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/e7d904164660d3eda03979d924446a27/cks8cwez00004268gzggi5ru8.BIN?Expires=1628828407&OSSAccessKeyId=LTAI4G1TuWwSirnbAzUHfL3e&Signature=5iOqKf2u7Hlrk%2B7TE9rqzLY5WQI%3D","signMethod":"Md5","md5":"a66f220bd0473d78837db3a80c57caee"},"id":"3"}"

    下面先直接发重要的AT指令,后面重要位置另外解释。防止自己遗忘。

     1 //HTTP网络连接配置 步骤1
     2 AT+QHTTPCFG="contextid",1
     3 
     4 OK
     5 //HTTP网络连接配置 步骤2
     6 AT+QHTTPCFG="responseheader",1
     7 
     8 OK
     9 //HTTP网络连接配置 步骤3 
    10 //移动:CMNET  ,联通;UNINET,电信:自己百度
    11 AT+QICSGP=1,1,"CMNET","","" ,1
    12 
    13 OK
    14 //发起网络连接
    15 //首先输入升级包的长度:212(可以用strlen()快速获得),超时时间:80S
    16 AT+QHTTPURL=212,80
    17 
    18 CONNECT
    19 //出现connect后快速输入url地址
    20 OK
    21 //发送 GET 请求到 HTTP(S)服务器
    22 AT+QHTTPGET=80
    23 
    24 OK
    25 
    26 +QHTTPGET: 0,200,73508   //73508:表示升级包内的字节数
    27 
    28 
    29 //下面获取升级包,缓存到4G模块内,
    30 //UFS:存储的位置在4G模块内,
    31 //OTA.bin:给接收到的文件命名,  80:等待时间
    32 AT+QHTTPREADFILE="UFS:OTA.bin",80
    33 
    34 OK
    35 
    36 +QHTTPREADFILE: 0
    37 
    38  //打开文件:如果报错426,表示文件已经打开,这个在移远的FILE_应用指导可以查
    39 AT+QFOPEN="OTA.bin",2
    40 
    41 +QFOPEN: 1
    42 
    43 OK
    44 
    45 
    46 //因为模块一次最多只能向外面读出1024个字节,所以要配置指针一次次读,直至读完
    47 //AT+QFSEEK=<filehandle>,<offset>[,<position>]  设置文件指针位置
    48 //filehandle=文件句柄,和下面QFREAD的首个参数要确保一样,具体没研究清楚
    49 //<offset>指针
    50 //<position>文件指针移动模式
    51 //详细介绍请看文档
    52 
    53 AT+QFSEEK=1,0,0
    54 
    55 OK
    56 //读取文件
    57 //AT+QFREAD=<filehandle>[,<length>]
    58 //filehandle:和前面的QFSEEK的值要一样
    59 //length:读取的长度,最大1024
    60 AT+QFREAD=1,1024
    61 
    62 CONNECT 1024
    63 8y 絀?????譏譏M=譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏譏?;る?る$??k[?k�態8??;延pGF麋
    64 OK
    65 
    66 //增加文件指针的值,一直读取,直到最后
    67 AT+QFSEEK=1,1024,0
    68 
    69 OK
    70 AT+QFREAD=1,1024
    71 
    72 CONNECT 1024
    73 F
    74 F裱lH`絧齇
    75 OK
    76 AT+QFSEEK=1,2048,0
    77 
    78 OK
    79 AT+QFREAD=1,1024
    80 
    81 CONNECT 1024
    82 /H鹩?(餻?饊� 
    83 OK

    记录一下这段时间的资料查询成果,防止自己遗忘,也方便后面需要的人。

    最后我想说:阿里云的文档真小白不友好!!!响应TOPIC是用来订阅的,加一句话能死吗?

  • 相关阅读:
    【Javascript】JS单例模式的简单实现
    【Javascript】Javascript中如何判断变量是数组类型
    买卖股票的最佳时机 II
    只出现一次的数字
    删除排序数组中的重复项
    两数之和
    Android系统中Fastboot和Recovery所扮演的角色。
    虚函数、纯虚函数、抽象类、接口 (Java_C++_C#)
    关于cmd中执行命令路径包含空格的解决办法
    Windows API 编程学习记录<三>
  • 原文地址:https://www.cnblogs.com/hexia7935/p/15133722.html
Copyright © 2011-2022 走看看