WIFI网络(ESP8266)升级STM32: STM32使用http下载程序文件,乒乓升级方式,支持程序回滚,支持MQTT通信控制 (WIFI模块AT,TCP透传方式)

泪湿孤枕 提交于 2019-12-02 10:14:17

 

 

 

 

 

实现功能概要

 

BootLoader程序:

    如果没有更新标志位,则尝试加载用户程序.

    如果有更新标志位,STM32控制WIFI模块以TCP方式连接Web服务器,然后发送Get 协议获取程序文件,写入Flash后,重启!

    每次写入Flash 切换Flash的写入位置,加入更新状态检测,更新失败则运行上一版程序(程序回滚)

APP用户程序:

    处理MQTT接收的数据,如果接收到更新指令,则置位升级标志位,重启

 

MQTT通信升级规定的协议:

WIFI设备订阅的主题
"user/设备MAC地址"      列如:  "user/dc:4f:22:11:5d:33"
WIFI设备发布的主题
"device/设备MAC地址"    列如:  "device/dc:4f:22:11:5d:33"


一,上位机通过MQTT发送获取设备信息指令
{"data":"updata","cmd":"DeviceInfo"}

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


二,上位机根据型号使用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字节

三,上位机对比版本号,如果不一致,则发送以下指令     注:测试时可直接发送此指令
{"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"}

 

 

Flash配置:

 

 

 

 

测试

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!