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

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

实现功能概要

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配置:

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

1.记录更新信息的文件

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

\

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

    OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。

    ConardLi
  • WIFI网络(ESP8266)升级STM32 预热: 单片机定时 使用 http 获取云端文本文件里面的内容,然后显示在液晶屏

    https://qqqqqbucket.oss-cn-beijing.aliyuncs.com/%E5%BC%80%E5%8F%91%E6%9D%BF/ESA...

    杨奉武
  • 关于串口接收处理数据

        无论做的什么串口通信,数据总是一条一条的发送,发送完一条再发送另一条,发送每一条数据之间存在时间间隔,串口接收数据的时候控制一个

    杨奉武
  • 升级STM32 预热: 单片机每隔一定时间 使用 http 获取天气

      1.1  STM32  AT指令控制Wi-Fi以TCP方式连接服务器(天气Web服务器),然后根据提供的API发送获取天气指令.

    杨奉武
  • 如何理解CGI,FastCGI,php-fpm?

    讲Fastcgi之前需要先讲CGI,CGI是为了保证web server传递过来的数据是标准格式的,它是一个协议。

    卡二条的技术圈子
  • 如何PWN掉西门子工控设备

    在对船舶控制系统进行测试时,我们注意到控制系统对西门子Scalance工业以太网交换机的严重依赖,因此为对其进行了深入研究。经过逆向发现可使用静态密钥对管理密码...

    FB客服
  • Hello World

    呃,看起来好像不大简单的亚子。如果对计算机系统工作机制没有一定了解,理解起来确实会有困难。我们逐一来看。

    运维部落
  • 18.Llinux-触摸屏驱动(详解)【转】 19.Linux-USB总线驱动分析

    其中事件处理层的函数都是通过input_register_handler()函数注册到input_handler_list链表中

    用户3033338
  • 郭健: Linux时间子系统之ARM generic timer驱动代码分析

    关注ARM平台上timer driver(clocksource chip driver和clockevent chip driver)的驱动工程师应该会注意...

    Linux阅码场
  • Notepad++ (x64) 7.7之前所有版本RCE漏洞预警

    内存损坏notepad++之前所有x64版本7.7在闪烁组件(SciLexer.dll)。通过特殊脆弱性引发精心.ml文件。漏洞发生在Unicode字符...

    洛米唯熊

扫码关注云+社区

领取腾讯云代金券