前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESA2GJK1DH1K升级篇: 测试STM32远程乒乓升级,基于(Wi-Fi模块AT指令TCP透传方式),MQTT通信控制升级

ESA2GJK1DH1K升级篇: 测试STM32远程乒乓升级,基于(Wi-Fi模块AT指令TCP透传方式),MQTT通信控制升级

作者头像
杨奉武
发布2019-11-14 12:53:59
4130
发布2019-11-14 12:53:59
举报
文章被收录于专栏:知识分享知识分享

实现功能概要

  前面的版本都是,定时访问云端的程序版本,如果版本不一致,然后下载最新的升级文件,实现升级.

  这一节,在用户程序里面加入MQTT通信,执行用户程序的时候,通过接收MQTT的升级命令实现升级

  注意:BootLoader程序还是用以前的程序.

  一开始设计这个升级篇的时候,我就规定好了大的框架

  BootLoader只是负责升级,其它一概不管

  用户程序只是写入升级标志,然后重启,所有的升级步骤全部交给BootLoader!

  协议:

代码语言:javascript
复制
一,MQTT上位机通过MQTT发送获取设备信息指令
{"data":"updata","cmd":"DeviceInfo"}

//设备接收到回复
{"data":"updata","model":"STM32_AT8266","version":"1.0.2"}//假设现在的型号是STM32_AT8266,当前设备硬件版本是1.0.2


二,MQTT上位机根据型号使用http访问云端存放的记录更新信息的文件
                                      "型号"
列如:"http://47.92.31.46/hardware/"+STM32_AT8266+"/"+"updatainfo.txt"

假设updatainfo.txt文件信息是  {"version":"1.0.4","details":"1,优化了部分BUG;2,测试升级;3,支持升级STM32程序;4,修改XXXBUG"}
注:版本号最大设置为20字节

三,MQTT上位机对比版本号,如果不一致,则发送以下指令     注:测试时可直接发送此指令
{"data":"updata","cmd":"start"} 


//设备接收到回复
{"data":"updata","status":"start"}


四,设备连接上MQTT发送的第一条消息为
"{\"data\":\"status\",\"status\":\"online\",\"UpdataStatus\":\"UpdataSuccess\",\"DeviceVersion\":\"1.0.4\"}"

UpdataSuccess               更新成功
RunAppErr                   上次更新的程序没有运行起来
NoUpdata                    没有更新
DataAddressError            更新的数据有错误
DataOverflow                数据溢出
DataDownloadTimeout         下载超时
MainTimeout                 更新超时
FlashWriteErr               写Flash失败
FlashEraseErr               擦除Flash失败
VersionLenErr               版本号长度 等于0 或者大于20
VersionAlike                版本号一致,是最新程序,无需更新



----------------------------------------------------------------
控制指令,查询继电器状态
{"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"}

测试

制作完代码,哈,

详细的代码制作步骤(这节代码是如何来的)

  拷贝使用Wi-Fi模块定时升级的 BootLoader程序

修改BootLoader

  为了和以前升级程序区别开来,取一个新名字  STM32_MQTT_AT8266

  BootLoader程序只需要修改这个就可以,修改完了.

下面看用户程序

  由于在用户程序里面,MQTT处理程序是比较多的,升级处理程序就一点点

  为了移植的方便快捷一点,咱呢,就在实现MQTT的程序上加上升级处理程序

  一,拷贝基础篇的Wi-Fi模块使用AT指令实现MQTT通信的单片机程序源码,到咱现在的目录

拷贝定时访问升级的用户程序的IAP文件 stmflash文件到现在的用户程序工程里面

把文件添加进来

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现功能概要
  • 测试
  • 详细的代码制作步骤(这节代码是如何来的)
  • 修改BootLoader
  • 下面看用户程序
  • 拷贝定时访问升级的用户程序的IAP文件 stmflash文件到现在的用户程序工程里面
  • 把文件添加进来
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档