标签:状态 工程 mamicode scroll 长度 direct code 制作 框架
前面的版本都是,定时访问云端的程序版本,如果版本不一致,然后下载最新的升级文件,实现升级.
这一节,在用户程序里面加入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程序
为了和以前升级程序区别开来,取一个新名字 STM32_MQTT_AT8266
BootLoader程序只需要修改这个就可以,修改完了.
由于在用户程序里面,MQTT处理程序是比较多的,升级处理程序就一点点
为了移植的方便快捷一点,咱呢,就在实现MQTT的程序上加上升级处理程序
一,拷贝基础篇的Wi-Fi模块使用AT指令实现MQTT通信的单片机程序源码,到咱现在的目录
ESA2GJK1DH1K升级篇: 测试STM32远程乒乓升级,基于(Wi-Fi模块AT指令TCP透传方式),MQTT通信控制升级
标签:状态 工程 mamicode scroll 长度 direct code 制作 框架
原文地址:https://www.cnblogs.com/yangfengwu/p/11854595.html