....今天老天不知怎么了,竟然写一遍就测试可以了.....
现在的程序是挺复杂的程序,我是在原先的实现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....需要焊接...先睡觉