stm32+ESP01s连接到腾讯云物联网开发平台IOT

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

STM32与ESP01s连接到腾讯云物联网开发平台IOT


文章目录


前言

接上一篇文章测试接入腾讯云物联网开发平台
本文章将使用stm32f103c8t6+esp01s接入腾讯云物联网开发平台
提醒一下esp01s建议去安信可官网购买MQTT和AT的那款如果只有AT的话就需要自己重新烧录了。
在这里插入图片描述

一、AT指令

连接和断开腾讯云的AT指令就这几条
建议大家先用esp01s使用AT指令看是否能成功连接上腾讯云物联网开发平台并进行数据交互看是否正常。

AT+RST
AT+CWMODE=1
AT+CWJAP="路由账号","路由密码"
//自己找到之前使用小工具生成的Username Password
AT+MQTTUSERCFG=0,1,"NULL","Username","Password",0,0,""
AT+MQTTCLIENTID=0,"ClientID"	
AT+MQTTCONN=0,"PRODUCT_ID.iotcloud.tencentdevices.com",1883,1//连接腾讯云
AT+MQTTSUB=0,"$thing/down/property/ProductID/DeviceName",1//订阅主题Subscribe Topic
AT+MQTTSUB=0,"$thing/up/property/ProductID/DeviceName",1//发布消息Publish Topic
//自己发布数据
AT+MQTTPUB=0,"topic","data_Json",1,0	//Json格式数据
AT+MQTTCLEAN=0 //关闭MQTT连接

以下是我使用正点原子串口调试助手连接esp01s使用AT指令连接腾讯云物联网开发平台的结果。只要正确输入AT指令就会返回“OK”
在这里插入图片描述
显示设备已经在线
在这里插入图片描述
这一串数据就是我们在串口数据收到的数据我们的主要任务就是在stm32端解析这段数据。
在这里插入图片描述

二、STM32端代码

1.ESP01s在stm32端的初始化代码

这段代码并不是我自主编写的主体是来自万能的网友我只是做了些许的修改

void esp8266_start_trans(void)
{
	
		//让Wifi模块重启的命令
	esp8266_send_cmd("AT+RST","ready",20);
	
	delay_ms(1000);         //延时3S等待重启成功
	delay_ms(1000);
	delay_ms(1000);
	delay_ms(1000);
	//设置工作模式 1station模式   2AP模式  3兼容 AP+station模式
	esp8266_send_cmd("AT+CWMODE=1","OK",50);
	

	/*AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"*/
//	esp8266_send_cmd("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"","OK",200);
	//让模块连接上自己的路由
	while(esp8266_send_cmd("AT+CWJAP=\"路由账号\",\"路由密码\"","WIFI GOT IP",600));
	
	//=0单路连接模式     =1多路连接模式
	esp8266_send_cmd("AT+CIPMUX=0","OK",20);
	
	//建立TCP连接  这四项分别代表了 要连接的ID号0~4   连接类型  远程服务器IP地址   远程服务器端口号
//	while(esp8266_send_cmd("AT+CIPSTART=\"TCP\",\"172.20.10.10\",8080","CONNECT",200));
    esp8266_send_cmd("AT+MQTTUSERCFG=0,1,\"NULL\",\"Username\",\"Password\",0,0,\"\"","OK",200);
	
	esp8266_send_cmd("AT+MQTTCLIENTID=0,\"ClientID\"","OK",200);
	
	while(esp8266_send_cmd("AT+MQTTCONN=0,\"PRODUCT_ID.iotcloud.tencentdevices.com\",1883,1","OK",200));
	
	esp8266_send_cmd("AT+MQTTSUB=0,\"$thing/down/property/ProductID/DeviceName\",0","OK",50);
	
	esp8266_send_cmd("AT+MQTTSUB=0,\"$thing/up/property/ProductID/DeviceName\",0","OK",50);
	//是否开启透传模式  0表示关闭 1表示开启透传
	esp8266_send_cmd("AT+CIPMODE=1","OK",200);
//	
//	//透传模式下 开始发送数据的指令 这个指令之后就可以直接发数据了
	esp8266_send_cmd("AT+CIPSEND","OK",50);
}

2.数据解析

我们在腾讯云下发指令给单片机以下就是我们的单片机接收到的数据了。这一串数据的有用的就只有"params":{“Switch”:0}我们需要把"Switch"后面的0给取出来。

+MQTTSUBRECV:0,“$thing/down/property/BK35ZCPROE/test2”,107,{“method”:“control”,“clientToken”:“clientToken-70c0b172-e184-4d79-9899-5cbe00505146”,“params”:{“Switch”:0}}

下面这串代码就是处理我们接受的数据并把关键值给提取出来判断是否开关灯。
	int Switch;
	char a[256];
	char *str_p;
		if(USART3_RX_STA&0x8000)
		{
			
			printf("USART3_RX_BUF=%s\r\n",USART3_RX_BUF);
			sprintf(a,"%s",USART3_RX_BUF);
			printf("a=%s",a);
			str_p = strstr((const char*)a,"Switch");//截取从Switch开始到最后的字符串
			printf("str_p = %s",str_p);
			str_p += 8;//指针往后移8位
			printf("str_pX = %s",str_p);
			sscanf(str_p,"%d", &Switch);//将取出的值存储在Switch中
			printf("Switch = %d",Switch);
			if(Switch == 0)  
			{	
				LED = 1;

//				printf("已关灯");
			}	
			if(Switch == 1) 
			{	
				LED = 0;

//				printf("已开灯");
			}
				
			USART3_RX_STA=0;
		}

完整工程的链接stm32与esp01s接入腾讯云物联网开发平台并用腾讯连连控制stm32开发板上的LED灯的亮灭

总结

这样就能成功实现用腾讯连连小程序控制stm32的灯的亮灭了
在这里插入图片描述
在这里插入图片描述
视频展示视频展示效果

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6