说明
前面章节是单片机主动访问升级,这节使用Android软件控制更新单片机程序!
注意哈,只是在原先的基础上让APP把固件地址发给设备,而不是设备主动获取了;
其实就是远程升级和MQTT的结合;
整体升级流程如下:(APP和设备通过MQTT通信)
1,用户在APP上点击 "固件升级" 按钮, APP使用MQTT发送: {"data":"updata","cmd":"DeviceInfo"} //询问设备固件信息
2,设备通过MQTT收到该消息以后,发送 {"data":"updata","cmd":"DeviceInfo","DeviceModel":"STM32EC800BKAPP","FirmwareVersion":"0.0.0"}
(STM32EC800BKAPP是设备的型号; 0.0.0是设备当前的固件版本)
3,APP收到以上消息以后,根据设备型号使用http请求云端记录的固件信息文件(info.txt)
提示:info.txt 存放的位置是固定的; http://ota/hardware/设备型号/info.txt
4,APP把info.txt里面的固件版本和设备当前的进行对比, 如果不一致, 弹窗提示
对话框里面写的更新内容是 info.txt里面的 -----------"info":"1.解决了部分BUG 2.优化了部分程序"
用户点击确认以后就把info.txt里面的固件版本和下载地址发送给设备(当然也可以直接发送这个命令让设备升级)
{"data":"updata","cmd":"start","version":"0.0.1","url":"http://mnif.cn/ota/hardware/STM32EC200BK/user_crc.bin"}
5,设备收到更新的命令以后,存储起来url, 并给APP发送开始升级 {"data":"updata","cmd":"start"} ,然后开始重启升级
6,APP收到 {"data":"updata","cmd":"start"} 以后, 弹窗提示设备正在升级,
同时开始每隔1S通过MQTT发送查询设备版本指令 {"data":"updata","cmd":"version"}
7,设备升级完了以后, 正常运行,设备就会通过MQTT收到APP的查询指令, 然后把当前的设备固件版本发送给APP
{"data":"updata","cmd":"version","FirmwareVersion":"0.0.1"}
8,最后APP提示升级完成