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

  • 2019 年 11 月 14 日
  • 筆記

实现功能概要

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

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

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

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

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

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

  协议:

一,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文件到现在的用户程序工程里面

把文件添加进来