这节只是简短介绍,详细请日后看具体文章html
单片机全部BUG ,及其修正服务器
1,执行用户程序错误时没有正常切换执行程序,忘记了增长 RunUser = GetRunUser();网络
一,远程升级WIFI模块或者GPRS模块内部程序lua
Wi-Fi或者GPRS默认http访问Aupdata0.lua~Aupdata9.lua 文件 而后下载运行url
协议以下:spa
设备订阅的主题 "user/设备MAC地址" 列如: "user/dc:4f:22:11:5d:33" 设备发布的主题 "device/设备MAC地址" 列如: "device/dc:4f:22:11:5d:33" 一,上位机获取设备型号 //获取设备型号 {"data":"updata","cmd":"model"} //设备回复 {"data":"updata","status":"model","model":"wifi1"}//假设如今的型号是WIFI1 二,上位机根据型号http访问更新的信息 "型号" 列如:"http://47.92.31.46/hardware/"+wifi1+"/"+"updatainfo.txt" 三,上位机把云平台的更新信息按照如下格式发给设备 /******************************************** 上位机发送给设备平台的版本号和更新文件的位置(设备先记录下来) {"data":"updata","cmd":"info","version":"1.0.1","url":"http://47.92.31.46/hardware/wifi1"} 设备接收到信息对比版本号之后回复 {"data":"updata","status":"unlike",version:XXXX} 或 {"data":"updata","status":"alike",version:XXXX} //回复是否是和发给它的版号一致,并回复本身的版本号 *********************************************/ /********************************** 上位机发送给设备升级指令 {"data":"updata","cmd":"start"} 设备回复 {"data":"updata","status":"start"} //开始更新 **********************************/ 更新过程当中设备发送更新进度 {"data":"updata","status":"starting","percent":"百分比"} 百分比为数字 更新完成设备发送 {"data":"updata","status":"finish"} 更新过程当中的错误,设备发送 {"data":"updata","status":"error","code","-1"}//HTTP request failed {"data":"updata","status":"error","code","-2"}//HTTP request data error 更新完成之后用新的版本号替换掉旧的版本号 注: 升级程序文件和关于升级的内容(内容里面含有版本号)放在云平台 APP或者wed或者上位机经过http获取关于升级的内容 设备经过http获取升级程序文件
二,远程升级STM32单片机程序(在WIFI或者GPRS实现基本的远程控制基础上增长的功能)code
APP发送的数据,网络模块自动转发给单片机htm
网络模块http访问单片机程序文件,而后把访问的数据发给单片机blog
//APP发送获取设备型号(APP点击检查更新的时候) {"datemcu":"updata","cmd":"model"} //STM32设备回复 {"datemcu":"updata","status":"model","model":"STM32U"}//STM32U 设备的型号 二,上位机根据型号http访问更新的信息 实际用域名代替 "型号" 列如:"http://47.92.31.46/hardware/"+STM32U+"/"+"updatainfo.txt" //APP发送给设备平台的版本号和更新文件的位置,该url由WIFI模块进行记录 {"datemcu":"updata","cmd":"info","version":"1.0.1","url":"http://47.92.31.46/hardware/STM32U"} //STM32回复是否是和发给它的版号一致,并回复本身的版本号 {"datemcu":"updata","status":"unlike",version:XXXX} 或 {"datemcu":"updata","status":"alike",version:XXXX} 或者 {"datemcu":"updata","status":"unlike","version":"error"} //单片机接收版本出错 APP接收到此信息,提示用户是最新版本,或者提示此次升级的内容,用户能够选择升级 //APP发送给设备升级指令 {"datemcu":"updata","cmd":"start"} 1,单片机运行在IAP程序:(说明没有更新过) stm根据本身当前的状况擦除Flash后回复 {"datemcu":"updata","status":"start","file":"bin1"} / {"datemcu":"updata","status":"start","file":"bin2"} 同时置一个标志位,让串口下次接受的http数据直接写入Flash Wi-Fi接收到该指令,中止MQTT透传(60S超时),防止多余的数据写入串口, 若是检测到TCP断开链接,容许MQTT透传 Wi-Fi接收到该指令根据上面的url, 链接TCP服务器(http服务器) 连接成功之后http访问bin1文件或者bin2文件 2,单片机运行在用户程序: 单片机接收到此命令后写入一个更新标志到Flash,复位重启 而后IAP判断有这个标志,先清除这个标志,而后执行上面的 1,单片机运行在IAP程序
三,其它版本远程升级单片机程序get
最重要的是思路和方案,其它的都只是配合.
板子连接
https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.3e3b1deb80xzYz&id=569295486025