首页 > 编程语言 >2-STM32F103+EC800K(移远4G Cat1)远程升级篇(自建物联网平台)-STM32通过EC800K使用http或https下载程序文件升级程序(APP通过MQTT控制单片机更新)

2-STM32F103+EC800K(移远4G Cat1)远程升级篇(自建物联网平台)-STM32通过EC800K使用http或https下载程序文件升级程序(APP通过MQTT控制单片机更新)

时间:2024-01-19 09:12:04浏览次数:31  
标签:info 建物 APP 升级 单片机 MQTT EC800K 固件

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC800K/myota.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC800K/myota.html" width="100%"></iframe>

 

 

说明

前面章节是单片机主动访问升级,这节使用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提示升级完成

 

 

 

 

开始测试

1,GPRS模块和底板安装说明

单片机通过串口2和GPRS模块通信;  单片机PA8引脚作为复位模组使用;PB15连接模组的开机引脚

(单片机)PA2    ----   (EC800K)RX;

(单片机)PA3    ----   (EC800K)TX;

(单片机)PA8    ----   (EC800K)RST

(单片机)PB15  ----   (EC800K)PWR

 

注意: 单片机都是使用串口2和模组通信,所以需要拆掉ESP8266

 

 

2.使用下载器下载BootLoader程序

 

 

 

 

使用单片机串口1打印串口日志(115200)

 

 

 

 

2.下载用户程序到开发板

 

 

 

 

3.显示连接上MQTT服务器说明正确执行

 

 

4.安装APP

 

 

6.手机APP安装包位置

7.点击APP右上方的菜单栏,选择 扫一扫

 

8.扫描模组上面的二维码

 

 

 

9.扫描成功以后将会在主页面添加一个设备

注:显示的内容为模组的IMEI号

 

10.点击显示的设备,进入设备控制页面

 

11.点击右上角菜单,选择固件升级

 

 

12.点击确认

 

 

 

 

13,更新完成之后

 

 

14,再次点击菜单的固件升级会提示

 

 

应用到自己的服务器

1,打开用户程序(mcu_project)的tcp_mqtt.c文件, 修改为自己的MQTT服务器

 

 

2,确定好程序文件在服务器的路径

关于本人服务器文件夹解释:(自己随意就好,最后的文件夹命名使用产品的型号)

html:网站根目录

ota: ota升级

hardware : 硬件程序

STM32EC800BKAPP: 作为产品的型号(根据自己的产品型号修改)

 

 

我把固件放到了里面那么固件程序下载地址为:

http://服务器IP地址/ota/hardware/STM32EC800BKAPP/user_crc.bin

 

那么固件信息的下载地址为:

http://服务器IP地址/ota/hardware/STM32EC800BKAPP/info.txt

 

 

3.修改  用户程序(mcu_project)  的IAP.C文件

提示:我把它们存储在程序bin文件的1024字节倍数的位置是为了BootLoader下载的时候便于提取这些数据;

1.产品型号(我设置的为STM32EC800BKAPP)

2.修改固件程序版本(可随意指定,我设置的为0.0.2)

3.修改记录云端固件信息文件下载地址(我的为:http://mnif.cn/ota/hardware/STM32EC800BKAPP/info.txt)

 

 

 

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,单片机通过MQTT收到以后,存储升级地址, 回复给APP, 然后写入升级标志,重启

单片机程序其实和咱前面的一样,只不过不是自己主动获取的升级地址

 

 

 

 

重启之后就在BootLoader里面升级哈,和前面的一样,就不多说了

 

 

5,APP收到设备开始升级

 

 

 

 

 

6,单片机升级完成以后,收到APP的询问固件版本命令, 回复固件版本给APP

 

 

7,APP收到固件版本,和之前记录的云端固件版本作对比. 一样就提示升级成功

 

 

 

 

 

 

 

 

 

 

 

 

 

 

;

标签:info,建物,APP,升级,单片机,MQTT,EC800K,固件
From: https://www.cnblogs.com/yangfengwu/p/17973898

相关文章

  • Spring Boot 单体应用升级 Spring Cloud 微服务
    作者:刘军SpringCloud是在SpringBoot之上构建的一套微服务生态体系,包括服务发现、配置中心、限流降级、分布式事务、异步消息等,因此通过增加依赖、注解等简单的四步即可完成SpringBoot应用到SpringCloud升级。*SpringCloudAlibaba(SCA)官网正式上线:sca.aliyun.co......
  • 基于uniapp开发的APP,怎么实现自动升级
    最近使用uniapp框架开发了一款APP,怎么让APP监测到有新的版本,并且点击新的版本实现自动升级呢,话不多说,请看下文。封装一个弹窗组件,当监测到最新的APP版本高于现在的版本时,弹窗提示新的版本信息,包括版本号、版本更新内容、是否强制更新控制等。一、src/components/updateModal/ind......
  • centos7.9(大部分都可以)和redhat6.9 离线升级OpenSSH和openssl (2023年的版本)
     ssl 红色。测试centos7.6也可以升级注意事项!1、多开几个连接窗口(xshell),避免升级openssh失败无法再次连接终端,否则要跑机房了。2、可开启telnet服务、vnc服务、打快照。多几个“保命”的路数。一、centos7.9的信息[root@node2~]#opensslversionOpenSSL1.0.2k-fips......
  • 从JDK8升级到JDK17:探索JAVA的新特性和改进
    升级到JDK17的必要性JDK8提供了很多实用且常用的特性,例如lambda表达式等,再加上超长的支持时间(JDK8支持到2030年,比JDK11的2026年和JDK17的2029年都要长)。而从JDK9往后,JDK的发布周期也缩短为6个月,也间接导致每个版本的新特性相对较少,大家的对新特性的提升感知不强,所以升级欲望不是......
  • 可回收箱控制主板升级助推生活垃圾数据化、资源化
    随着居民生活水平的提高,每年有大量的塑料、玻璃、饮料瓶、电子产品、废纸、金属、衣物等废弃物没有被回收处理,制约了经济的可持续发展,资源的回收再利用是经济良性循环的重要手段,是打造环保生态链的关键。沐渥可回收箱控制板自带高精度称重计量,支持两种方式通讯、双电机驱动带电流......
  • 升级slurm,从18.08到23.02
    前言本笔记是大致流程,给有一定管理经验的slurmcluster管理员参考,还是建议大家少折腾。环境CentOS7,openHPC1.3.9全家桶(附带slurm18.08),xcat集群管理(没有xcat的话,用for循环ssh代替psh和pscp)slurm版本Slurm最近的大版本如下(年.月)18.08,19.05,20.02,20.11,21.08,22.05,2......
  • Gitlab 备份、恢复、升级gitlab数据
     https://wiki.wabks.com/pages/191a66/ #1、备份#手动备份$gitlab-rakegitlab:backup:create#执行完成后会在/var/opt/gitlab/backups/目录下生成压缩包#2、恢复Gitlab的恢复操作会先将当前所有的数据清空,然后再根据备份数据进行恢复gitlab-ctlstopunicorn......
  • 五菱宝骏车机升级教程【嘟嘟桌面或ES文件管理器】
    文章来源:https://www.djww.net/607.html简介越来越多的汽车厂商自研车机系统,其实就是在原来安卓的基础上加入自己的元素,然后禁用某些功能从而实现禁止用户安装第三方app。因此有些用户想安装第三方app来满足自己的需求,例如实现车机carplay、hicar、carlink、carlife等等。此教程......
  • Controller(Deployment)-升级回滚和弹性伸缩
    在部署过程中,升级回滚和弹性伸缩是两个重要的功能,可以帮助我们管理和优化系统的性能和可靠性。升级回滚是指在部署过程中,如果有新的版本需要发布,我们可以使用升级功能将新版本部署到系统中。升级过程中,我们可以选择同时运行新旧版本,逐步切换到新版本,或者直接替换旧版本。如果在升......
  • 【VSCode】CMake Language Support 总是下载 .NET 超时,但又不想升级dotnet
    错误信息Error:Couldnotresolvedotnetpath!Anerroroccurredwhileinstalling.NET(6.0):.NETAcquisitionFailed:Installationfailed:Error:.NETinstallationtimedout.Youmayneedtochangethetimeouttimeifyouhaveaslowconnection.Pleasesee:h......