目录

ESP8266连接腾讯云物联网平台

ESP8266连接腾讯云物联网平台

ESP8266连接腾讯云物联网平台

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。MQTT属于应用层协议。最新版本为MQTT v5.0标准。本次连接腾讯云物联网平台主要以MQTT标准协议3.1版本为主。

1.注册腾讯云账号,登陆云平台

https://i-blog.csdnimg.cn/blog_migrate/1fb798420b8c9156db23b79bec6ef6c7.png#pic_center

  1. 搜索物联网平台,登录物联网平台。

https://i-blog.csdnimg.cn/blog_migrate/1691f1bcbdc911314189a9dafcfa95e5.png#pic_center

2.创建项目

  1. 进入物联网控制台

https://i-blog.csdnimg.cn/blog_migrate/c37493e1b1f4f448aaa95d7944fdf057.png#pic_center

  1. 创建项目

https://i-blog.csdnimg.cn/blog_migrate/6d167e7a463e1ea6240b48dbc2fd0f37.png#pic_center

  1. 创建产品

https://i-blog.csdnimg.cn/blog_migrate/af68ec488b89cfce21fd06e707b66d85.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/c160252fa6d12f874044aaa5c8b68351.png#pic_center

3.创建产品功能

https://i-blog.csdnimg.cn/blog_migrate/14483f0b77fe37820ce1a148c61c1244.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/9d53720bec5237a632f5713590d867ba.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/e11032f429e7055b67f70fc67a588602.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/e6f332f6b2cf4d85fb0d75d23ae3ef5c.png#pic_center

4.设备调试

https://i-blog.csdnimg.cn/blog_migrate/86686312d796a66d4828a39450f71e70.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/64566349266ddab45b9ef08d8c98a8e6.png#pic_center

//设备名,产品ID,设备秘钥修改为自己所创建产品参数
#define DeviceName "Smart_123"//设备名
#define ProductID "LA57WL612"//产品ID
#define DeviceSceret "9JHiCQ5668uZlVDuQ2ZnQ=="//设备秘钥

5.创建工程,连接腾讯物联网平台

https://i-blog.csdnimg.cn/blog_migrate/f63262bb728b6d58e1659cf34bf43e34.png#pic_center https://i-blog.csdnimg.cn/blog_migrate/f1f7459bd12e7b7fef9eaa1dcd04f4a3.png#pic_center

//服务器IP:{PRODUCT_ID}.iotcloud.tencentdevices.com   ---PRODUCT_ID对应产品ID
#define SERVER_IP "LA57WL612.iotcloud.tencentdevices.com"//服务器IP
#define SERVER_PORT 1883 //端口号
//客户端ID:{产品ID}{设备名}
#define ClientID "LA57WL612Smart_123"
//用户名和密码可使用密码生成工具完成
#define Username "LA57WL612Smart_123;12010126;R05S3;1621619622"
#define Password "9ebe0d0069ac4dd1e9e98664abc9f726c13b5a150190afdfa7b3c12240ff1e73;hmacsha256"//密文 
//订阅主题:$thing/down/property/{ProductID}/{DeviceName} ---{ProductID}产品ID,{DeviceName}设备名
#define SET_TOPIC  "$thing/down/property/LA57WL612/Smart_123"//订阅

6.主题订阅

https://i-blog.csdnimg.cn/blog_migrate/bda4b321257b1a1e7acd4cd95553c533.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/867ee3df5147cd8e65f3a2ce2a657e06.png#pic_center

//订阅主题:$thing/down/property/{ProductID}/{DeviceName} ---{ProductID}产品ID,{DeviceName}设备名
#define SET_TOPIC  "$thing/down/property/LA57WL612/Smart_123"//订阅
//发布主题:$thing/up/property/{ProductID}/{DeviceName}
#define POST_TOPIC "$thing/up/property/LA57WL612/Smart_123"//发布

7.初始化ESP8266模块,配置WIFI模式为TCP+STA模式

#define WIFI_NAME "wbyq"//WIFI名
#define WIFI_PASSWORD "asdfghjkl23"//wifi密码
char mqtt_message[200];//上报数据缓存区
int main()
{
    int i=0;
	u8 stat=0;
	u32 time=0;
	u16 cnt=0;
	float temp;
	Beep_Init();//蜂鸣器初始化
	Led_Init();//LED初始化
	Key_Init();//按键初始化
	Usartx_Init(USART1,115200,72);
	Usartx_Init(USART3,115200,36);
	TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20ms
	TIMx_Init(TIM4,72,20000);//通过定时器2辅助串口接收数据,20ms
	DS18B20_Init();	
//	RTC_Init();//RTC初始化
	printf("初始化完成\r\n");
	while(1)
	{
		stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);
		if(stat==0)break;
		Delay_Ms(500);
		printf("stat=%d\r\n",stat);
	}
	printf("服务器连接成功\r\n");
	while(1)
	{
		MQTT_Init();
		stat=MQTT_Connect(ClientID,Username,Password);
		if(stat==0)break;
		Delay_Ms(500);
		printf("正在连接....\r\n");
	}
	printf("连接成功\r\n");
	stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
	if(stat)printf("订阅失败\r\n");
	else printf("订阅成功\r\n");
	while(1)
	{
		if(usart3_flag)
		{
            for(i=0;i<usart3_cnt;i++)
            {
                printf("%c",usart3_rx_buff[i]);
            }
			usart3_cnt=0;
			usart3_flag=0;
		}
		Delay_Ms(1);
		time++;
		cnt++;
		if(time>=5000)
		{
			time=0;
			MQTT_SentHeart();//发送心跳包
		}
		if(cnt>=1000)
		{
			cnt=0;
			temp=DS18B20_GetTemp()*0.0625;
			sprintf(mqtt_message,"{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"LED1\":1,\"temp\":%.2f,\"L\":356}}",temp);//温度
			MQTT_PublishData(POST_TOPIC,mqtt_message,0);
		}
	}
}

8.设备上报数据格式

https://i-blog.csdnimg.cn/blog_migrate/5d2fa8191a21e410f9fdb9e6a3a1a451.png#pic_center

{
   "method":"report",//上报设备属性
   "clientToken":"123",//消息配对标识
   "timestamp":1212121221,  //可不填,默认为系统时间
   "params":{
       "power_switch":1, //设备属性power_switch
       "color":1,        //设备属性color
       "brightness":32   //设备属性brightness
   }
}

9.执行效果

设备上报数据到平台

https://i-blog.csdnimg.cn/blog_migrate/84ee6444a610361b63036cb525fb6c13.png#pic_center

平台下发数据到设备

https://i-blog.csdnimg.cn/blog_migrate/5ad6d7b93ddccafbadfc19e1a01ae05e.png#pic_center

移动端界面:

https://i-blog.csdnimg.cn/blog_migrate/e18df052ed8fb91c9af22d8e54d63f88.png#pic_center

总结

MQTT 是一个客户端服务端架构的发布/订阅模式的消息传输协议。 它的设计思想是轻巧、 开放、简单、 规范, 因此易于实现。 消耗资源少,在MQTT3.1标准协议中仅有14个报文。每个报文都分为固定报头、可变报头和有效载荷3部分。

https://i-blog.csdnimg.cn/blog_migrate/2d7198be7d5c94fb351900ff2db7536a.png#pic_center

14个报文如下:

https://i-blog.csdnimg.cn/blog_migrate/750c1f4c04b6c2e640d1c64827da3bc1.png#pic_center

示例工程:https://download.csdn.net/download/weixin_44453694/18726172