云平台介绍以及实现云平台数据获取和拼接报文、发布报文

1.云平台介绍

物联网云平台&MQTT协议(物联网)

物联网云平台:阿里云,ONENET,腾讯云,有人云

这里只介绍云平台;

1.2.1阿里云平台介绍

设备通过MQTT协议连接阿里云,mqtt基于TCP/IP

1.2.2创建产品与设备

1.创建产品界面

2.设备界面

2.MQTT协议讲解

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议该协议构建于TCP/IP协议上,由IBM在1999年发布。

MQTT最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

设备1,   服务器

设备2,

设备1要把数据发给设备2;

设备2    订阅服务器主题1

设备1   把消息发布给服务器主题1,

服务器在接收到设备1主题1的消息后,发布给设备2

MQTT协议

MQTT报文有14种(14种报文类型)

MQTT控制报文格式:

报文由三个部分组成:固定报文,可变报文,有效载荷

固定报头:

14种报文类型分别:

标志:

只有发布报文才需要标志

2.2.3剩余长度

可变报头:

有效载荷:

根据报文类型不同,有效载荷内容不同;

例如:发布报文的有效载荷是具体要发送的消息

我们会使用那些报文:

连接报文:

3.1连接报文

CONNECT-连接服务端:客户端到服务端的网络连接建立后,客户端发送给服务端的第一个报文必须是连接报文CONNECT;

在一个网络连接上客户端只能发送一次拼接报文,第二次发送将视为违规处理

3.1.2可变报头

3.13有效载荷

CONNECT报文的有效载荷包含一个或多个以长度为前缀的字段,可变报头中的标志决定是否包含这些字段。如果包含的话,必须按这个顺序出现:客户端表示==标识符,遗嘱主题,遗嘱消息,用户名,密码。

连接报文的有效载荷根据可变报头决定

4.1MQTTfx软件连接云平台

mqtt.fx参数填写要求

向指定topic发布消息:

查看发布的数据:

点击监控运维-》日志服务-》选择设备

发送消息格式:

JSON数据格式

{

       "method":"thing.event.property.post",

       "id":"2222222",

       "params":{

              "light":3,

              "HCHO":2.2,

"tem":66.6

       },

       "version":"2.2.2"

}

主题选择:

主题去自己创建的产品--Topic类列表中找

根据功能选择topic,之后看操作权限和描述

属性上报:把设备的属性发给服务器

属性设备:服务器把要设置的属性发给设备

5发送连接报文链接阿里云

代码:

#include "stm32f10x.h"
#include "aliot.h"
#include "MQTTPacket.h"
#include "ADC.h"
//发送连接报文,连接阿里云
void AliotSendConnect(void)
{
	uint8_t  buf[300]={0};//定义数组用来存放连接报文
	uint16_t buflen;//报文长度
	MQTTPacket_connectData options = MQTTPacket_connectData_initializer;
	
	options.clientID.cstring = clientId;
	options.username.cstring = Username; 
	options.password.cstring = passwd;
	//1.拼接连接报文,返回值是连接报文的长度
	buflen = MQTTSerialize_connect(buf,300,&options);
	if(buflen==0){
		printf("连接报文拼接失败\r\n");
		return;
	}
		printf("连接报文拼接成功\r\n");
	//2.发送报文
  Usart3SendArr(buf,buflen);
	
}

这里我用串口3来发送wifi信息

6.发送发布报文

代码:

以环境监测数据为例:声明参数

//发送发布报文
extern float ch2o;
extern float hum;
extern float tem;
extern int co2;
extern float voc;
extern ADCARR adcData;
extern int RGB;
void AliotSendPublish(void)
{
	uint8_t  buf[800]={0};//定义数组用来存放发布报文
	uint16_t buflen;//报文长度
	MQTTString topicName;
	topicName.cstring = TOPICNAME;
	unsigned char payload[256] = {0};
	sprintf((char *)payload,"{\
    \"method\":\"thing.event.property.post\",\
    \"id\":\"162277852\",\
    \"params\":{\
     \"HCHO\":%.2f,\
	    \"temperature\":%.1f,\
			 \"Humidity\":%.1f,\
	      \"co2\":%d,\
			   \"VOC\":%.1f,\
					\"Light\":%d,\
					 \"MQ2\":%d,\
						\"RGB\":%d\
    },\
    \"version\":\"1.0.0\"\
   }",ch2o,tem,hum,co2,voc,adcData.light,adcData.mq2,RGB);
	
  buflen = MQTTSerialize_publish( buf,800, 0,0,0,0,topicName,payload, strlen((char*)payload));
	
	Usart3SendArr(buf,buflen);
	
	//printf("发布报文发送成功\r\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值