ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

6-STM32+ESP8266+Air302远程升级篇(自建物联网平台)-STM32通过air302使用http下载程序文件,升级程序(手机APP控制更新)

2022-05-07 22:00:08  阅读:191  来源: 互联网

标签:info 升级 建物 APP STM32 服务器 固件 设备


<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_A/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/ESA2GJK1DH1K_A/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":"STM32Air302BKAPP","FirmwareVersion":"0.0.0"}

(STM32Air302BKAPP是设备的型号;  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/STM32Air302BKAPP/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,NB-IOT模块安装到第三排排母! 模块的5V引脚和底板的5V引脚相连接

单片机都是使用串口2和模组进行通信,  注意去掉ESP8266模组,防止通信冲突.

 

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

 

 

 

 

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

 

 

 

 

 

 

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

 

 

 

 

 

 

 

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

 

 

 

 

4.安装APP

 

 

6.手机APP安装包位置

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

 

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

 

 

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

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

 

13.点击设备进入设备控制页面

 

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

 

 

12.点击确认

 

 

 

 

13,更新完成之后

 

 

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

 

 

应用到自己的服务器

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

 

 

 

 

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

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

html:网站根目录

ota: ota升级

hardware : 硬件程序

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

 

 

 

 

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

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

 

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

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

 

 

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

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

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

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

3.修改记录云端固件信息文件下载地址(我的为:http://mnif.cn/ota/hardware/STM32Air302BKAPP/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,单片机收到以后,存储升级地址, 回复给APP, 然后写入升级标志,重启

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

 

 

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

 

 

 

5,APP收到设备开始升级

 

 

 

 

 

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

 

 

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

 

标签:info,升级,建物,APP,STM32,服务器,固件,设备
来源: https://www.cnblogs.com/yangfengwu/p/16244281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有