为了和SDK升级保持协议一致,花了两天时间实现了用LUA开发,MQTT+HTTP方式实现远程升级

安装Apache主要是为了实现通过HTTP下载资源

升级介绍:

0,用户点击检查更新时,APP首先通过MQTT获取硬件设备型号(主要解决的问题:多个设备问题,就是型号不一样的设备应该访问不同的文件,产品可能型号一样,如果用的传感器不一样,也必须下载不同的程序.所以一开始我想着让用户选择型号然后添加设备不能彻底解决问题,真正解决就写入型号到设备内部)

1,APP用HTTP访问云端的更新信息(根据设备型号获取对应的文件),文件中存储了当前版本,设备访问的升级文件地址,升级的内容

2,APP通过MQTT把信息(版本号,升级文件的位置)发给设备,设备对比版本号以后把信息通过MQTT发给APP

3,APP根据设备返回的信息判断是不是需要升级,如果需要,弹出一个对话框(设备的版本号,云端的版本号,更新的内容),如果不需要更新则提醒用户版本是最新

4,如果用户点击更新,APP通过MQTT发指令给设备,设备通过HTTP访问下载文件,更新进度通过MQTT发给APP

协议如下:

设备订阅的主题

"user/设备MAC地址"      列如:  "user/dc:4f:22:11:5d:33"

设备发布的主题

"device/设备MAC地址"    列如:  "device/dc:4f:22:11:5d:33"

//APP去掉型号选择,因为有可能产品型号一样,但是如果用的外设不是一家的,内部程序也可能不一样,型号默认写到
芯片的内部,以此再次修订协议

一,上位机获取设备型号
//获取设备型号
{"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获取升级程序文件

大概了解就好,现在看怎么安装Apache

我就在我的云端电脑上安装,怎么把文件拷贝到云端就不说了

因为Apache需要C++的运行环境,所以先安装这个,根据自己的安装

然后解压出来,自己随意解压哈,然后修改个地方

根据自己的修改

好了,现在安装,进入到bin

// 安装apache服务

httpd.exe -k install

然后是启动

可以用命令

httpd.exe -k start

我不用这个命令了哈,我用另一个实现

双击

现在测试一下

输入自己的电脑的IP,默认访问80端口

其实是访问的这个

咱现在自己弄个文件,然后访问一下,为了避免意外情况

如果有文件夹

这样就可以用APP或者上位机用HTTP实现对文件的访问和下载了

具体如何用APP或者上位机用HTTP下载大家可先百度哈,,百度http  的get 或者 post  ,先用get获取就可以,我先弄升级教程啦....

6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇-优化升级(安装Apache (Web服务器)软件,测试HTTP)的更多相关文章

  1. 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(为域名申请SSl证书)

    3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP) 然后就是等着..... 假设可以了 咱呢是配置MQTT实现SSL安全加密通信,所以 ...

  2. 3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP)

    2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据) 因为安全连接是和域名绑在一块的,所以需要申请域名 有没有不知道域名是什么的, ...

  3. 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据)

    1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(来看一下怎么样监听网络数据,监听电脑上位机软件的数据) 因为那个软件只能监听咱自己电脑上的数据,所以咱就用电 ...

  4. 1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(来看一下怎么样监听网络数据,监听电脑上位机软件的数据)

    首先安装网络监听软件 运行这个软件 这个软件安装到电脑上,默认是监听咱电脑上的网络通信 咱们先监听电脑的软件的网络通信数据,然后再说怎么监听Wi-Fi和APP的软件的网络通信数据 咱就监听咱基础篇的 ...

  5. 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(云端电脑(Windows)安装配置数据库,使用本地Navicat for MySQL和手机APP 远程连接测试)

    3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装配置数据库,使用Navicat for MySQL和手机APP 连接测试) 根据前面的教程把软件复制到云 ...

  6. 3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装配置数据库,使用Navicat for MySQL和手机APP 连接测试)

    2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(数据库简单说明) https://www.mysql.com/ 咱用安装版的 我把自己下载的放在了这里 现在 ...

  7. 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(数据库简单说明)

    1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(视频总揽) 这里有个教程   http://www.cnblogs.com/best/p/6517755.h ...

  8. 1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(视频总揽和功能演示)

    主要实现的功能 其它视频和资料稍候再补充上 我先写后面的文章 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装数据库,数据库简单说明)

  9. 5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(配置MQTT的SSL证书,验证安全通信)

    4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(为域名申请SSl证书) 前面的准备工作终于完了 复制这两个证书 放到云端MQTT的这个位置,其实放哪里都可以 ...

  10. 5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(配置保存数据的数据库)

    配置信息如下:这是我的python软件和APP软件默认连接的配置 数据库名称:iot        编码utf8 表格名字:historicaldata 字段 id      自增,主键 date   ...

随机推荐

  1. Docker最全教程——从理论到实战(五)

    往期内容链接 Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) 本篇教程持 ...

  2. springmvc 项目完整示例03 小结

    利用spring 创建一个web项目 大致原理 利用spring的ioc 原理,例子中也就是体现在了配置文件中 设置了自动扫描注解 配置了数据库信息等 一般一个项目,主要有domain,dao,ser ...

  3. 图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”

    一.ARP防御概述 通过之前的文章,我们已经了解了ARP攻击的危害,黑客采用ARP软件进行扫描并发送欺骗应答,同处一个局域网的普通用户就可能遭受断网攻击.流量被限.账号被窃的危险.由于攻击门槛非常低, ...

  4. NLP入门(六)pyltp的介绍与使用

    pyltp的简介   语言技术平台(LTP)经过哈工大社会计算与信息检索研究中心 11 年的持续研发和推广, 是国内外最具影响力的中文处理基础平台.它提供的功能包括中文分词.词性标注.命名实体识别.依 ...

  5. python3中time模块与datetime模块的简单用法

    __author__ = "JentZhang" import time # Timestamp 时间戳 print("Timestamp 时间戳:") pri ...

  6. python之字符串反转

    def main(): a = "abcdefg" a = a[::-1] print(a) if __name__ == '__main__': main()

  7. Java开发笔记(十九)规律变化的for循环

    前面介绍while循环时,有个名叫year的整型变量频繁出现,并且它是控制循环进出的关键要素.不管哪一种while写法,都存在三处与year有关的操作,分别是“year = 0”.“year<l ...

  8. python爬虫之静态网页——全国空气质量指数(AQI)爬取

    首先爬取地址:http://www.air-level.com/ 利用的python库,最近最流行的requests,BeautifulSoup. requests:用于下载html Beautifu ...

  9. Spring框架基础(下)

    log4J 导入log4J.jar 创建log4J.properties # Create a file called log4j.properties as shown below and plac ...

  10. 通过多线程处理提高Redis性能

    Redis通常被称为单进程单线程模型. 这不是真的! Redis还运行多个后端线程来执行后端清理工作,例如清理脏数据和关闭文件描述符.在Redis中,主线程负责主要任务,包括但不限于:接收来自客户端的 ...