基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

1.概述

实现通过stm32f103c8t6+操作系统(freertos)读取dht12温湿度传感器的数据,采用ESP8266连接网络,经过MQTT协议连接阿里云IOT,进行数据的传输,以及服务器发送数据控制LED的亮灭,包括消息的发布和订阅等操作,完成云端和设备端的通讯。

2.实现步骤

2.1.MQTT.fx模拟器与阿里云通信

首先,我们使用MQTT.fx模拟器,通过模拟的方式去和阿里云平台进行通讯,此步骤是为了验证我们是否完成了阿里云平台的 搭建。其次是为了获取一些相关的日志信息。

2.2.STM32与阿里云通信

其次,我们使用STM32F103C8T6,通过ESP8266连接网络,进行阿里云平台的通讯,实现本次设计的最终方案。本设计使用了dht12温湿度传感器进行读取温度,并通过阿里云平台进行发布,控制我们的LED灯的亮灭。

3. 搭建云平台

3.1.登陆阿里云平台

1.登陆网址:https://www.aliyun.com/
2.找到物联网平台
3.根据阿里云的文档创建一个产品,创建一个这个产品的设备,并添加一个自定义功能
在这里插入图片描述
4.我们先创建一个产品,创建流程如下:
在这里插入图片描述
然后点击确认即可。

5.产品弄好了,就要在产品下面挂上设备
在这里插入图片描述
6.设置下添加的设备的名字
在这里插入图片描述

7.查看添加的设备信息
在这里插入图片描述
在这里插入图片描述
注意,以下信息是连接阿里云平台的时候需要用到的。
在这里插入图片描述
提示:后面咱就会使用下面三个参数(三元组)组合MQTT参数
“ProductKey”: “a1Q",
“DeviceName”: “dht12”,
“DeviceSecret”: "7G
****************VsU”

4.连接阿里云平台(MQTT.fx)

1.这里需要用到两个软件
1.1.阿里云物联平台配置_32
1.2.MQTT.fx
2.打开MQTT.fx软件

2.1.打开软件

在这里插入图片描述

2.2.配置相关信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.连接调试
3.1.查看Topic列表,一会需要用到
在这里插入图片描述
3.2.发布LED开关和温湿度功能。
在这里插入图片描述
3.3.添加自定义功能,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.4.最后一定要记得发布。
在这里插入图片描述

3.5.连接服务器
在这里插入图片描述
3.6.推送的内容需要在阿里云平台点击
在这里插入图片描述
3.7.推送温湿度数据到阿里云平台服务器上
在这里插入图片描述
在这里插入图片描述
3.8.到此,MQTT.fx模拟器调试就结束了。

5.连接阿里云平台(STM32)

5.1.调试信息

在这里插入图片描述

5.2.源码分析

5.2.1. 向服务器发起连接(CONNECT)

在这里插入图片描述

5.2.2.服务器回复连接回执(CONNACK)

在这里插入图片描述

5.2.3.向服务器发起订阅(SUBSCRIBE)

在这里插入图片描述

5.2.4.服务器回复订阅回执(SUBACK)

在这里插入图片描述

5.2.5.向服务器发起心跳包请求(PINGREQ)

在这里插入图片描述

5.2.6.服务器回复心跳回执(PINGRESP)

在这里插入图片描述

5.2.7.服务器发布消息

在这里插入图片描述
当服务器发布消息的时候,会进入此函数,对数据进行解析数据,数据格式为json格式,如代码所示。

u8 MQTT_Publish(unsigned char* data,int len)
{
	int buflen = sizeof(buf);
	int rc = 0;
	unsigned char dup;
	int qos;
	unsigned char retained = 0;
	unsigned short msgid = 1;
	int payloadlen_in;
	unsigned char* payload_in;
	MQTTString receivedTopic;
		
	cJSON *json , *json_params, *json_id, *json_led, *json_display;
	
	memcpy(buf,data,len);
	
	rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic,&payload_in, &payloadlen_in, (unsigned char*)buf, buflen);	//服务器有推送信息
	printf("message arrived : %s\r\n", payload_in);
	
	json = cJSON_Parse((char *)payload_in);			//解析数据包
	if (!json)  
	{  
		printf("Error before: [%s]\r\n",cJSON_GetErrorPtr());  
	} 
	else
	{
		json_id = cJSON_GetObjectItem(json , "id"); 
		if(json_id->type == cJSON_String)
		{
			printf("id:%s\r\n", json_id->valuestring);  
		}
		json_params = cJSON_GetObjectItem(json , "params");  
		if(json_params)  
		{  
			if(cJSON_GetObjectItem(json_params, "LED0"))
			{
				json_led  = cJSON_GetObjectItem(json_params, "LED0");
				if(json_led->type == cJSON_Number)
				{
					printf("LED:%d\r\n", json_led->valueint);  
					if(json_led->valueint == 1)
					{
						LED0 = 0;
					}
					else
					{
						LED0 = 1;
					}			
				}
			}
			if(cJSON_GetObjectItem(json_params, "display"))
			{
				json_display = cJSON_GetObjectItem(json_params, "display");
				if (json_display->type == cJSON_String)  
				{  
					//暂不处理
				}  
			}
		} 
	}
	cJSON_Delete(json);
	
	return TRUE;
}

5.2.8.轮询,读MQTT返回数据类型

在这里插入图片描述

5.2.9.向服务器发送dht12温湿度传感器的数据

在这里插入图片描述

注释:由于本设计使用了ESP8266来联网,ESP8266联网部分代码就不再过多解释,可参考相关的例子进行。

6.连接信息

在这里插入图片描述
注释:串口通信这块使用串口DMA的方式,开启串口DMA中断收发的方式,同时使用了freertos操作系统。

7.实物图

在这里插入图片描述

版权声明:本文为CSDN博主「技术过硬的菜鸡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39721016/article/details/123028865

生成海报
点赞 0

技术过硬的菜鸡

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

ESP8266连接阿里云(STM32)

一、概述 之前通过串口调试助手ESP8266已经连接上阿里云了 ESP8266连接阿里云(串口调试助手) 这次我们使用STM32ESP8266来接入阿里云,其实本质上就是STM32和ESP8266进行串

STM32使用esp01s上云,MQTT.fx调试

去年做过一点上云的实践,现在把它记录下,协议这块懂得不是很多,也不是学网络的,仅作为一个记录 1、mqtt协议基本概念 MQTT协议基于发布/订阅(publish/subsc

stm32和阿里云的空气质量检测

设计了一个系统  stm32f103单片机 通过MQ135测量空气中有毒气体浓度  DHT11测量温湿度 通过ESP8266连接无线wifi  阿里云平台设计web端和手机端  显示数据。 效果如图: MQTT-ESP8266.z

(一)STM32连上阿里云

STM32连上Aliyun 1、首先你得有一个阿里云的账号,没有的话就注册一个 2、找到物联网平台 3、选择华东2,点击公共实例 4、创建产品 5、给产品添加设备,这里添加两个设备,将