前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >9-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(用MQTT调试助手模拟APP,测试WIFI+单片机实现远程升级)

9-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(用MQTT调试助手模拟APP,测试WIFI+单片机实现远程升级)

作者头像
杨奉武
发布2019-05-15 11:32:27
6430
发布2019-05-15 11:32:27
举报
文章被收录于专栏:知识分享知识分享

....今天老天不知怎么了,竟然写一遍就测试可以了.....

现在的程序是挺复杂的程序,我是在原先的实现WIFI模块升级的基础上添加的,我现在看着自己写的程序都感觉错综复杂......

所以现在的程序既支持远程更新WIFI模块内部的程序,也支持通过WIFI模块远程升级单片机程序

 首先先把程序放到云端,单片机的型号我设置的是STM32U

bin1和bin2就是上一节里面的两个用户程序,只不过名字是bin1和bin2,我http访问的时候就是访问的这个名字

 给WIFI和STM32下载程序就不说了

现在测试 ,串口助手是打印的WIFI发出的信息,,,上位机模拟APP

 {"datemcu":"updata","cmd":"model"}  //询问单片机型号

假设我用Http访问了

 {"datemcu":"updata","cmd":"info","version":"1.0.1","url":"http://47.92.31.46/hardware/STM32U"}  //告诉单片机当前的云端版本,还有bin文件相对位置

//APP发送给设备升级指令 {"datemcu":"updata","cmd":"start"}

其实WIFI接收到这个信息应该按照协议直接用引脚控制STM32复位,因为我的WIFI控制单片机复位的引脚没有连接,所以单片机是超时复位

其实没有引脚控制是完全可以实现升级,加入引脚是为了防止单片机程序万一出问题..具体大家好好体会我写的协议

下面是单片机更新的时候发送的所有信息

代码语言:javascript
复制
Topic=device/bc:dd:c2:24:6b:b3
Message=
user1ROMStart:8004000
user1ROMSize:5c00

user2ROMStart:8009c00
user2ROMSize:5c00
Version1:0.0.0
Version2:0.0.0
RunUser:0
SendDateSelect:3

(2019/5/8 2:37:13)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"switch"}
(2019/5/8 2:37:14)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"switch"}
(2019/5/8 2:37:15)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"switch"}
(2019/5/8 2:38:58)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"model","model":"STM32U"}
(2019/5/8 2:42:50)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"unlike","version":"0.0.0"}
(2019/5/8 2:43:35)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 2:43:36)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 2:43:37)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 2:43:38)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 2:43:39)
Topic=device/bc:dd:c2:24:6b:b3
Message=
user1ROMStart:8004000
user1ROMSize:5c00

user2ROMStart:8009c00
user2ROMSize:5c00
Version1:1.0.1
Version2:0.0.0
RunUser:0
STMFLASH_Erase:8009c00
SendDateSelect:3
{"datemcu":"updata","status":"start","file":"bin"}
(2019/5/8 2:43:40)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start","file":"bin1"}
(2019/5/8 2:43:43)
Topic=device/bc:dd:c2:24:6b:b3
Message=
user1ROMStart:8004000
user1ROMSize:5c00

user2ROMStart:8009c00
user2ROMSize:5c00
Version1:1.0.1
Version2:1.0.1
RunUser:1
SendDateSelect:1

(2019/5/8 2:43:44)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 2:43:45)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 2:43:46)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 2:43:48)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"switch"}
(2019/5/8 2:43:49)
Topic=device/bc:dd:c2:24:6b:b3
Message=Version1:1.0.1
Version2:1.0.1

(2019/5/8 2:43:49)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"run1"}

现在接着控制更新,上面是更新bin1进去了,现在把bin2更新进去

//APP发送获取设备型号 {"datemcu":"updata","cmd":"model"}

 假设访问了http了

//APP发送给设备平台的版本号和更新文件的位置,该url由WIFI模块进行记录 {"datemcu":"updata","cmd":"info","version":"1.0.1","url":"http://47.92.31.46/hardware/STM32U"}

因为咱上面设置的单片机的版本就是1.01,单片机回的版本一致,其实这个时候可以用APP提醒用户版本为最新无需更新,

因为咱是测试,所以更新...

下面是具体的信息

代码语言:javascript
复制
(2019/5/8 2:59:27)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 2:59:28)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 2:59:29)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 2:59:30)
Topic=device/bc:dd:c2:24:6b:b3
Message={"da
user1ROMStart:8004000
user1ROMSize:5c00

user2ROMStart:8009c00
user2ROMSize:5c00
Version1:1.0.1
Version2:1.0.1
RunUser:1
STMFLASH_Erase:800f800
SendDateSelect:3
{"datemcu":"updata","status":"start","file":"bin"}
(2019/5/8 2:59:31)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start","file":"bin2"}  /////让WIFI访问程序2
(2019/5/8 2:59:34)
Topic=device/bc:dd:c2:24:6b:b3
Message=
user1ROMStart:8004000     //下载完了重启
user1ROMSize:5c00

user2ROMStart:8009c00
user2ROMSize:5c00
Version1:1.0.1
Version2:1.0.1
RunUser:2               //运行程序2
SendDateSelect:1

(2019/5/8 2:59:35)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 2:59:36)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 2:59:37)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 2:59:39)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"switch"}
(2019/5/8 2:59:40)
Topic=device/bc:dd:c2:24:6b:b3
Message=Version1:1.0.1
Version2:1.0.1

(2019/5/8 2:59:40)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"run2"}   //程序2里面写了这个,证明确实运行了程序2
(2019/5/8 2:59:50)
Topic=device/bc:dd:c2:24:6b:b3
Message={"data":"TH","bit":"1","temperature":"25","humidity":"30"}

然后我用发命令又控制了下更新,然后就会运行程序1

代码语言:javascript
复制
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"alike","version":"1.0.1"}
(2019/5/8 3:02:37)
Topic=device/bc:dd:c2:24:6b:b3
Message={"data":"TH","bit":"1","temperature":"25","humidity":"31"}
(2019/5/8 3:02:44)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 3:02:45)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 3:02:46)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start"}
(2019/5/8 3:02:47)
Topic=device/bc:dd:c2:24:6b:b3
Message={"da
user1ROMStart:8004000
user1ROMSize:5c00

user2ROMStart:8009c00
user2ROMSize:5c00
Version1:1.0.1
Version2:1.0.1
RunUser:2

(2019/5/8 3:02:47)
Topic=device/bc:dd:c2:24:6b:b3
Message=STMFLASH_Erase:8009c00
SendDateSelect:3
{"datemcu":"updata","status":"start","file":"bin"}
(2019/5/8 3:02:48)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"start","file":"bin1"}
(2019/5/8 3:02:52)
Topic=device/bc:dd:c2:24:6b:b3
Message=
user1ROMStart:8004000
user1ROMSize:5c00

user2ROMStart:8009c00
user2ROMSize:5c00
Version1:1.0.1
Version2:1.0.1
RunUser:1
SendDateSelect:1

(2019/5/8 3:02:53)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 3:02:54)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 3:02:55)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"finish"}
(2019/5/8 3:02:57)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"switch"}
(2019/5/8 3:02:57)
Topic=device/bc:dd:c2:24:6b:b3
Message=Version1:1.0.1
Version2:1.0.1

(2019/5/8 3:02:58)
Topic=device/bc:dd:c2:24:6b:b3
Message={"datemcu":"updata","status":"run1"}

那个下面两个就不测试了,因为需要把一个引脚连接到单片机的复位引脚上...

我程序里面设置的引脚是IO5

程序已上传,各位大佬可以先测试测试

别忘了下面的这个地方根据自己的修改,和我的路径不一样就会报错

 因为这个远程升级单片机程序后期是很多人都想要,一开始的时候并没有把这个功能纳入开发板,所以STM32的复位引脚没有留出来emmm....需要焊接...先睡觉

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档