专栏首页知识分享ESA2GJK1DH1K升级篇: MQTT通信控制升级-APP用户程序制作过程(V1.0)

ESA2GJK1DH1K升级篇: MQTT通信控制升级-APP用户程序制作过程(V1.0)

协议

注:所有的实现MQTT的软件,统称为MQTT上位机一,MQTT上位机通过MQTT发送获取设备信息指令(用户在APP上点击检查更新时发送此命令) {"data":"updata","cmd":"DeviceInfo"}//设备接收到回复 {"data":"updata","model":"STM32_MQTT_AT8266_A","version":"1.0.2"}//假设现在的型号是 STM32_MQTT_AT8266_A,当前设备硬件版本是1.0.2二,MQTT上位机根据型号使用http访问云端存放的记录更新信息的文件 "型号" 假设updatainfo.txt文件信息是: {"version":"1.0.45611","SumBin1":219,"SumBin2":103,"details":"1,优化了部分BUG;2,测试升级;3,支持升级STM32程序;4,修改XXXBUG"}注:版本号最大设置为20字节APP检测版本不一致时把后面的 "details":"1,优化了部分BUG;2,测试升级;3,支持升级STM32程序;4,修改XXXBUG" 提示给用户 用户点击更新的时候接着往下看 三,发送以下指令 {"data":"updata","cmd":"start"} 注:测试时可直接发送此指令 //设备接收到回复 {"data":"updata","status":"start"} 然后进入BootLoader程序执行升级去了为了让APP知道升级的状态 四,设备在执行用户程序连接上MQTT发送的第一条消息为 "{\"data\":\"status\",\"status\":\"online\",\"UpdataStatus\":\"UpdataSuccess\",\"version\":\"1.0.45611\"}"UpdateStatus_None //没有更新 UpdateStatus_DataAddressError //Flash的高位地址不是0x08 或者 RAM的高位地址不是0x20 UpdateStatus_DataOverflow //数据接收溢出 UpdateStatus_DownloadTimeout //程序下载超时 UpdateStatus_MainTimeout //整个程序运行的时间 UpdateStatus_FlashWriteErr //Flash 写错误 UpdateStatus_VersionLenErr //版本号长度错误 UpdateStatus_VersionAlike //版本号和服务器上面的一致 UpdateStatus_FlashEraseErr //Flash 擦除失败 UpdateStatus_MissingData //数据接收不完整 UpdateStatus_SumBinRangeErr //校验和范围错误(获取的云端的校验和,不在0-255之间) UpdateStatus_SumCheckErr //校验和不一致 UpdateStatus_RunAppError //上次更新的程序没有运行起来undefined控制指令,查询继电器状态 {"data":"switch","bit":"1","status":"-1"}设备回复 {"data":"switch","bit":"1","status":"1"} 或者 {"data":"switch","bit":"1","status":"0"}六,控制指令,控制继电器吸合 {"data":"switch","bit":"1","status":"1"} 设备回复 {"data":"switch","bit":"1","status":"1"}七,控制指令,控制继电器断开 {"data":"switch","bit":"1","status":"0"} 设备回复 {"data":"switch","bit":"1","status":"0"}

准备一个工程

把基础篇的已经实现MQTT通信的工程拷贝过来

把以下文件放到自己的工程

主函数配置

调用处理更新

发送一条更新状态的信息出去

加上处理更新协议

如果通过MQTT接收到获取设备信息指令

就返回设备信息(型号,和当前版本号)

MQTT上位机根据型号,http访问对应的 updatainfo.txt

然后对比下版本号,如果不一致,就提示给用户有新版本

然后用户点击升级的时候 再发给模块 开始更新的指令

模块收到以后设置更新标志

返回给MQTT 我要升级了   "{\"data\":\"updata\",\"status\":\"start\"}"    

然后呢 重启就好了

因为有了升级标志,BootLoader里面就去执行升级去了.    嘻嘻嘻

生成bin文件

看一下bin文件大小.....................

超出了23KB了...这就不好玩了....

第一种方案:改变下程序优化等级

我选择的 default

注意: default 就是 Level2

然后现在是23KB,正好放的下

注意:改变等级以后大家需要多测试下程序

有可能有的代码执行的不对了!!!!

配置生成第一份程序文件

配置生成第二份程序文件

打开计算校验和软件

计算第一份程序文件的校验和

计算第二份程序文件的校验和

把相应的文件放到云服务器

测试放到下一节

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1-MSP430点亮一个灯

    为了写一篇文章做铺垫--提醒着自己,,,,,, ? ? ? ? ? ? ? ? ? ? ? ?  现在看一下程序 ? 还是说一下是怎么关掉的 ? ? ? ? 往...

    杨奉武
  • 50-STM32+ESP8266+AIR202基本控制篇-重点详解-MQTT协议

    注:需要打开两个,默认连接提供的服务器测试. 第一个配置如下: 发布的主题:aaaaa 订阅的主题:Topic 点击连接,然后点击订阅

    杨奉武
  • GPRS(Air202) Lua开发: 硬件使用说明

    杨奉武
  • CentOs 6.6 在VMware安装并修改静态网卡

    搭建环境 | 系统:centos 6.6 | VMware Workstation Pro 12

    Antler
  • 程序员制作网站告白女朋友

    链接: https://pan.baidu.com/s/1zfuhR8w3DlxsleU6phglBw 密码: ugbx python2很小,只有20M。下载...

    潇洒坤
  • OBS推流

    治电小白菜
  • 从无到有基于腾讯云TKE部署Kubernetes全流程(四)

    前面的TKE集群工作都有所完成了,现在我们尝试通过这一系列工具使得,流程完全自动化。

    蒋经纬
  • 从无到有基于腾讯云TKE部署Kubernetes全流程(三)

    只能实现一对一挂载,因为硬盘只支持一次挂载,通过硬盘创建的PVC为RWO,单机读写。

    蒋经纬
  • burpsuite 无法获取本地数据

    当Firefox和burpsuite设置代理地址127.0.0.1,端口:80内容可以显示在firefox网页而无法在burpsuite显示,求教是什么原因?

    用户7446386
  • Unity3D基础项目(三):花费一天做个小游戏水果忍者

    最近看了很多教程,代码方面大同小异,主要看思路,即编程思想。所以仿照着做了一款水果忍者,一天就够了。 开发工具:Unity3D(本人使用5.4版本),VS20...

    雷潮

扫码关注云+社区

领取腾讯云代金券