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

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

现在的程序是挺复杂的程序,我是在原先的实现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控制单片机复位的引脚没有连接,所以单片机是超时复位

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

 

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

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提醒用户版本为最新无需更新,

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

下面是具体的信息

(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

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....需要焊接...先睡觉

猜你喜欢

转载自www.cnblogs.com/yangfengwu/p/10829236.html