STM32云平台连接培训20180814
MQTT基于TCP,发布订阅模式,一对多,多对一,TCP需要client主动建立connect,server发送connectack
CoAP基于UDP,请求/应答模式,数据量也相对HTTP要小
HTTP基于TCP,请求应答模式,数据量较大
1. MQTT协议
- Message Queuing Telemetry Transport消息队列遥测传输
- 轻量级协议
- 服务器/客户端模式,桩-Cloud-手机,桩和手机不直接通信,Cloud为数据转发,叫Broker
- 发布/订阅,Publish/Subscribe, 端端不直接指定通信,而是通过主题Topic,一端只会像server发布主题,另一端只会订阅主题,如温度
- Publish/Puback, Subscribe/Suback
- Example, 典型的Connect/Connack控制报文,Publish/Puback控制报文,Subscribe/Suback控制报文
- 开源:服务器Mosquito, 客户端Paho,百度云/阿里云的SDK就是运行于MCU的客户端,也参考了Paho,在Paho基础上又封装了一层
1.1. 名词解释
- Qos:服务质量等级
- Clean session: 持久会话的概念,0为服务器保存之前的消息,1为服务器会丢掉消息,缓存的概念
- Retain: 保留消息
- Willxxx: 遗嘱消息:发生异常时,通知其他客户端
1.2. MQTT服务结构图

1.3. 帧格式1

1.4. 帧格式2

1.5. MQTT通信

1.6. MQTT和TLS

建立TLS,设备端认证服务器,服务器认证设备端。前者常用,服务器生成根证书,设备端需要放置证书,通过证书来验证服务器的连接信息。通过TCP建立连接的消息都是通过TLS加密。
过程
建立TCP->握手加密->非对称到对称的过程->产生对称加密密钥->客户端先sayhello,支持xxxx, 随机数1->服务器sayhello,支持xxx,随机数2->证书发给客户端->客户端使用根证书验证服务器的证书->验证通过,从证书中拿到公钥,生成随机数3->利用公钥+3个随机数,生成对称密钥。
安全等级要求不是特别高,一般只会在设备端下载相同的根证书,用来验证服务器,不会用服务器再来验证设备端,如果需要验证,则每个设备端都需要不同的证书,也就是工厂烧写不同的信息
2. FOTA升级:firmware over the air
- 云端推送
- 设备端接收和升级逻辑
- 原位升级/pingpong升级
- 文件:加密,压缩,差分patch
- 原有程序打断,续传,触发更新
- 安全,传输过程
2.1. 三种升级方式(ST使用固件冗余方式,应用程序下载完,通知Bootloader更新)


2.2. ST FOTA Demo:STM32F7,HTTP负责下载,按下按键跳到Bootloader更新固件

2.3. 存储空间划分

2.4. FOTA流程

2.5. FOTA升级软件架构

2.6. 下载文件格式*.bin

下载过程

FOTA说明
- 终端实现MQTT客户端和HTTP客户端,MQTT负责客户端/服务器通信,HTTP负责文件传输
- 下载文件,bin文件,插入特定信息,对数据块进行校验
- QSPIflash中建立一个结构体,存放下载的一些信息,如版本,大小,地址,断点续传等等
- HTTP和HTTPS,HTTPS需要更多的验证过程
STM32云平台连接培训20180814的更多相关文章
- SAP云平台架构概述
在我们开始SAP云平台的架构之旅之前,让我们先看看SAP已经发布的一些其他云产品.这些云产品方案可以分为公有云和私有云两种. SAP公有云解决方案见下图最右侧,比较著名的有SAP SuccessFac ...
- QT写的一个小工具:阿里云MQTT连接参数生成器.
一.工具介绍. 最近在研究MQTT协议联网的一些问题,现在主流的物联网平台都支持MQTT协议. 在做阿里云平台连接测试的时候,连接参数的生成没有好用的工具, 所以就自己写了一个. 这个工具主要用于阿里 ...
- 终于解决了我的DISCUZ 无法连接到您的服务器,可能您的服务器处于防火墙后端 论坛云平台的问题~
事由:由于前几天折腾备份,将论坛源文件误删了大部分,于是我重新下载了源码,传到了空间. 然后问题来了,我关闭纵横搜索提示“无法连接到您的服务器,可能您的服务器处于防火墙后端”,设置纵横搜索页一直显示“ ...
- 使用MQTTBox连接阿里云平台
这篇只做一个简单的介绍,和上一篇没有根本的区别.只是就两个客户端的差异介绍一下. 一.需要参考的内容: 使用MQTT.fx连接阿里云平台: https://www.cnblogs.com/mhtc/p ...
- A亚马逊WS网上系列讲座——怎么样AWS云平台上千万用户的应用建设
用户选择云计算平台构建应用程序的一个重要原因是高弹性的云平台和可扩展性. 面向Internet应用程序通常需要支持用户使用大量,但要建立一个高度可扩展.具有一定的挑战,高度可用的应用程序,只有立足AW ...
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 云平台显示单片机采集的温湿度数据,控制设备继电器(基于GPRS模块,AT指令TCP_MQTT通信)
实现的功能 上一节是使用的Wi-Fi模块连接的阿里云平台,这节呢咱用GPRS连接. 阿里云的设备配置还是按照上一节的,有个温度,有个湿度. 测试 一,打开单片机程序 二,根据自己的修改,然后下载进去单 ...
- .Net 分布式云平台基础服务建设说明概要
1) 背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2) 基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3) 概要说明 基础服务的发展会根 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建
公司在IDC机房有两台很高配置的服务器,计划在上面部署openstack云平台虚拟化环境,用于承载后期开发测试和其他的一些对内业务.以下对openstack的部署过程及其使用做一详细介绍,仅仅依据本人 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
之前在测试环境(centos7.2)上部署了openstack云平台(完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建),openstack在neutron组网 ...
随机推荐
- BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)
题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...
- BZOJ.2002.Bounce 弹飞绵羊(LCT)
题目链接 从一个点只能往后跳,即后继状态只有一个,那么拿nxt[x]做fa[x]啊!这样就成了一棵树,从每个点开始的答案是它到所在树的根节点的距离. nxt[]的更改即动态修改树边,用LCT即可. 这 ...
- [BZOJ3674]可持久化并查集加强版&[BZOJ3673]可持久化并查集 by zky
思路: 用主席树维护并查集森林,每次连接时新增结点. 似乎并不需要启发式合并,我随随便便写了一个就跑到了3674第一页?3673是这题的弱化版,本来写个暴力就能过,现在借用加强版的代码(去掉异或),直 ...
- PHP Web项目开发学习,经验谈
列个表格吧,看着也比较方便: 时间 事项 六月 七月 八月 九月 工作任务 前端页面 服务端页面 地图定位 服务器搭建 图片上传 视频文件信息的获取 关键词 Css+div+js PHP,谷歌maps ...
- 2016年3月17日Android学习笔记
1.Java.io.ByteArrayOutputStream.writeTo()方法实例 java.io.ByteArrayOutputStream.writeTo(OutputStream out ...
- 429. N叉树的层序遍历
429. N叉树的层序遍历 题意 给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 解题思路 和二叉树的层次遍历的思想一样: 实现 class Solution(object) ...
- Mac下如何设置Eclipse默认浏览器为chrome
http://stackoverflow.com/questions/5322574/how-can-i-set-chrome-as-default-external-browser-in-eclip ...
- android:ViewHolder模式
ViewHolder holder = null; if(convertView == null){ convertView = mInflater.inflate(R.layout.xxx null ...
- 好好的P2P,咋说爆就爆?
P2P 理财就是通过互联网理财,即个人对个人,又称点对点网络借贷 ,是指以公司为中介机构,把借贷双方对接起来实现各自的借贷需求.借款方可以是无抵押贷款或是有抵押贷款,而中介一般是收取双方或单方的手续费 ...
- 经验:使用 Cache 时注意 DateTime.Now
如果使用了缓存,比如方法 A 吧,那么你需要注意 DateTime.Now 对缓存的影响,简单来说,DateTime.Now 可能出现在两个地方: 在调用方,将 DateTime.Now 作为参数传递 ...