2-STM32F407+EC200(移远4G)程序升级篇(自建物联网平台)-STM32F407通过EC200使用http或https下载程序文件,升级程序(手机APP控制更新) 2022-05-29 11:02:34 浏览数 (1) 说明前面章节是单片机主动访问升级,这节使用Android软件控制更新单片机程序!注意哈,只是在原先的基础上让APP通过MQTT通信把固件地址发给设备,而不是设备主动获取了;当然不仅仅限于APP去控制,后面还有微信小程序,上位机,网页等控制升级的.整体升级流程如下:(APP和设备通过MQTT通信)1,用户在APP上点击 "固件升级" 按钮, APP使用MQTT发送: {"data":"updata","cmd":"DeviceInfo"} //询问设备固件信息2,设备通过MQTT收到该消息以后,发送 {"data":"updata","cmd":"DeviceInfo","DeviceModel":"STM32F407EC200BKAPP","FirmwareVersion":"0.0.0"}(STM32F407EC200BKAPP是设备的型号; 0.0.0是设备当前的固件版本) 3,APP收到以上消息以后,根据设备型号使用http请求云端记录的固件信息文件(info.txt)提示:info.txt 存放的位置都会固定的哈; http://ota/hardware/设备型号/info.txt4,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/STM32F407EC200BKAPP/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提示升级完成开始测试1,GPRS模块和底板安装说明单片机通过串口2和GPRS模块通信; 单片机PA8引脚作为复位模组使用(高电平复位)(单片机)PA2 ---- (EC200)RX;(单片机)PA3 ---- (EC200)TX;(单片机)PA8 ---- (EC200)RST 2.使用下载器下载BootLoader程序使用单片机串口1打印串口日志(115200)2.下载用户程序到开发板3.显示连接上MQTT服务器说明正确执行4.安装APP6.手机APP安装包位置7.点击APP右上方的菜单栏,选择 扫一扫8.扫描模组上面的二维码9.扫描成功以后将会在主页面添加一个设备注:显示的内容为模组的IMEI号10.点击显示的设备,进入设备控制页面11.点击右上角菜单,选择固件升级12.点击确认13,更新完成之后14,再次点击菜单的固件升级会提示应用到自己的服务器1,打开用户程序(mcu_project)的tcp_mqtt.c文件, 修改为自己的MQTT服务器2,确定好程序文件在服务器的路径关于本人服务器文件夹解释:(自己随意就好,最后的文件夹命名使用产品的型号)html:网站根目录ota: ota升级hardware : 硬件程序STM32F407EC200BKAPP: 作为产品的型号(根据自己的产品型号修改)我把固件放到了里面那么固件程序下载地址为:http://服务器IP地址/ota/hardware/STM32F407EC200BKAPP/user_crc.bin 那么固件信息的下载地址为:http://服务器IP地址/ota/hardware/STM32F407EC200BKAPP/info.txt3.修改 用户程序(mcu_project) 的IAP.C文件提示:我把它们存储在程序bin文件的1024字节倍数的位置是为了BootLoader下载的时候便于提取这些数据;1.产品型号(我设置的为STM32F407EC200BKAPP)2.修改固件程序版本(可随意指定,我设置的为0.0.1)4.修改BootLoader程序 的 IAP.c (设置下产品型号和默认的固件程序下载地址)注意:BootLoader里面的产品型号要和用户里面的一样!!!!BootLoader程序下载的时候会判断这个型号一不一致5.编译用户程序(mcu_project)会在工程目录的bin文件夹生成 user.bin文件6.打开OTA Tools上位机软件7.按照红框选择配置9.选择用户程序生成的 bin文件10.点击 生成固件11.将在user.bin目录生成user_crc.bin文件12.把生成的user_crc.bin文件拷贝到服务器13.还差一个info.txt文件我准备了一个模板14.修改版本号(和用户程序里面设置的一样)16.修改固件程序下载地址(和服务器上面的保持一致)17.最后的提示信息是APP控制升级时提示的信息,可以自己修改18.把info.txt文件也拷贝到服务器19.使用android studio 打开 android工程(英文目录才可以打开)20.修改自己的MQTT服务器21.根据自己的web服务器修改(这个地方是获取服务器上面的 info.txt文件)22.全部修改完成以后,重新下载单片机程序, 重新安装APP,按照前面的测试步骤测试即可 升级流程说明1,APP上点击固件升级按钮2,单片机收到以后回复3,APP收到回复以后根据设备型号获取云端固件信息文件用户点击是, 发送升级命令给设备4,单片机收到以后,存储升级地址, 回复给APP, 然后写入升级标志,重启单片机程序其实和咱前面的一样,只不过不是自己主动获取的升级地址重启之后就在BootLoader里面升级哈,和前面的一样,就不多说了5,APP收到设备开始升级6,单片机升级完成以后,收到APP的询问固件版本命令, 回复固件版本给APP7,APP收到固件版本,和之前记录的云端固件版本作对比. 一样就提示升级成功 mqtt 单片机 命令行工具 http 硬件开发 0 人点赞 上一篇:分享雷军22年前编写的代码