没有合适的资源?快使用搜索试试~ 我知道了~
首页STM32_W5500_MQTT_移植说明
资源详情
资源评论
资源推荐
W5500 如何通过 MQTT 协议连接阿里云
一、 简介:
1、 开发环境与连接平台:
本文主要介绍 W5500 如何通过 MQTT 协议将设备连接到阿里云 IoT,并通过 MQTT 协议实
现通信。MQTT 协议是基于 TCP 的协议,所以我们只需要在单片机端实现 TCP 客户端代码之
后就很容易移植 MQTT 了, +W5500 实现 TCP 客户端的代码我们以前已经实现过,程序下载
地址为(http://www.w5500.com/)
软件环境:Windows
硬件环境:STM32F103+W5500
开发工具:Keil uVision5
调试工具:Wireshark、串口调试助手
连接平台:阿里云-华东 2 节点(https://www.aliyun.com)
2、 MQTT 简介:
MQTT 官网地址:(http://mqtt.org/)
1) MQTT 协议特点
MQTT 是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT 协议是轻量、简单、
开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,
如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号
的医疗设备、智能家居、及一些小型化设备中已广泛使用。
MQTT 协议当前版本为,2014 年发布的 MQTT v3.1.1。除标准版外,还有一个简化版 MQTT-
SN,该协议主要针对嵌入式设备,这些设备一般工作于百 TCP/IP 网络,如:ZigBee。
MQTT 协议运行在 TCP/IP 或其他网络协议,提供有序、无损、双向连接。其特点包括:
使用的发布/订阅消息模式,它提供了一对多消息分发,以实现与应用程序的解耦。
对负载内容屏蔽的消息传输机制。
对传输消息有三种服务质量(QoS):
最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层 TCP/IP 网络。
即:<=1
至多一次,这一级别会确保消息到达,但消息可能会重复。即:>=1
只有一次,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,
可以使用此级别
数据传输和协议交换的最小化(协议头部只有 2 字节),以减少网络流量
通知机制,异常中断时通知传输双方
2) MQTT 协议原理及实现方式
实现 MQTT 协议需要:客户端和服务器端
MQTT 协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者
(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者
可以同时是订阅者。
MQTT 传输的消息分为:主题(Topic)和消息的内容(payload)两部分
Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息
内容(payload)
payload,可以理解为消息的内容,是指订阅者具体要使用的内容
二、 连接
1. 阿里云连接步骤:
1) 以 aliyun 账号直接进入 IoT 控制台,如果还没有开通阿里云物联网套件服务,则
申请开通
2) 接入引导
(1)、 创建产品
(2)、 添加设备
(3)、 获取设备的 Topic
创建产品
初步进入控制台后,需要创建产品。点击创建产品。产品相当于某一类设备的集合,用
户可以根据产品管理其设备等。
产品名称:对产品命名,例如可以填写产品型号。产品名称在账号内保持唯一。
productKey:阿里云 IoT 为产品颁发的全局唯一标识符
添加设备:
创建完产品之后,可以为该产品添加设备。进入产品管理页面下的设备管理,点击添加
设备。
说明:用户可以自定义设备名称(即 deviceName),这个名称即可作为设备唯一标
识符,用户可以基于该设备名称与 IoT Hub 进行通信,需要指出的是,用户需要保
证 deviceName 产品内唯一。
设备证书:添加设备之后,物联网套件为设备颁发的唯一标识符,设备证书用于设
备认证以及设备通信,详细的请参考设备接入文档。
deviceName:用户自定义设备唯一标识符,用于设备认证以及设备通信,用户保证
产品维度内唯一。
deviceSecret:物联网套件为设备颁发的设备秘钥,用于认证加密,与 deviceName
或者 deviceId 成对出现。
获取设备的 Topic
添加设备之后,可以获取设备的 Topic。点击 Topic 列表
说明:创建产品之后,物联网套件都会为产品默认定义三个 Topic 类。那么,在添
加设备之后,每个设备都会默认有三个 Topic,即图中所示。如果想要增加、修改、
删除 Topic,请到消息通信重新定义 Topic 类。
设 备可以基于 Topic 列 表 中 的 Topic 进行 Pub/Sub 通信,例 如列 表 中 有
/1000118502/test9/update,且设备拥有的权限是发布,这就意味着设备可以往这
个 Topic 发布消息;同样,列表中/1000118502/test9/get,权限是订阅,这就意味
着设备可以从这个 Topic 订阅消息。
设备接入
获得 productKey、设备证书以及设备的 Topic 这些参数,就可以基于 aliyun IoT device
SDK for C 将设备连接上 IoT Hub 并进行通信,具体请参考《MQTT 配置》部分
2. MQTT 移植步骤:
MQTT 代码源码下载地址:(http://www.eclipse.org/paho/)
MQTT 的移植非常简单,将 C/C++ MQTT Embedded clients 的代码添加到工程中,然后
我们只需要再次封装 4 个函数即可:
int transport_sendPacketBuffer(unsigned char* buf, int buflen);
通过网络以 TCP 的方式发送数据;
int transport_getdata(unsigned char* buf, int count);
TCP 方式从服务器端读取数据,该函数目前属于阻塞函数;
int transport_open(void);
打开一个网络接口,其实就是和服务器建立一个 TCP 连接;
int transport_close(void);
关闭网络接口。
如果已经移植好了 socket 方式的 TCP 客户端的程序,那么这几个函数的封装也是非常
简单的,程序代码如下所示:
1 /**
2 * @brief 通过 TCP 方式发送数据到 TCP 服务器
3 * @param buf 数据首地址
4 * @param buflen 数据长度
5 * @retval 小于 0 表示发送失败
6 */
7
8 /*订阅消息*/
9 int Subscribe_sendPacketBuffer(unsigned char* buf, int buflen)
10 {
11 return send(SOCK_TCPS,buf,buflen);
12 }
13
14 /*发布消息*/
15 int Published_sendPacketBuffer(unsigned char* buf, int buflen)
16 {
17 return send(SOCK_TCPC,buf,buflen);
18 }
19
20 /**
21 * @brief 阻塞方式接收 TCP 服务器发送的数据
22 * @param buf 数据存储首地址·
23 * @param count 数据缓冲区长度
24 * @retval 小于 0 表示接收数据失败
25 */
26 int Subscribe_getdata(unsigned char* buf, int count)
27 {
28
29 return recv(SOCK_TCPS,buf,count);
30
31 }
32
33 int Published_getdata(unsigned char* buf, int count)
34 {
剩余16页未读,继续阅读
乘风破浪HH
- 粉丝: 1w+
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0