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

2019-10-28 11:50:08 浏览数 (1)

实现功能概要

BootLoader程序:

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

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

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

APP用户程序:

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

MQTT通信升级规定的协议:

代码语言:javascript复制
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配置:

测试------把程序bin文件,和记录更新信息的文件放在云端

1.记录更新信息的文件

2.用户程序1   bin文件位置

3.用户程序2   bin文件位置

4. 网站根目录下的 hardware文件夹 -> STM32_AT8266文件夹

测试------下载 BootLoader 程序

0 人点赞