零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)

这篇具有很好参考价值的文章主要介绍了零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要想实现通过代码实现STM32连入阿里云服务器,要首先实现使用AT指令通过串口连接阿里云,大家可以参考我之前的两篇文章,链接如下
链接: 零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(一、给ESP12F烧写AT/MQTT固件)

链接: 零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(二、创建阿里云平台并使用AT指令连接阿里云)

`

一、下载STM32工程文件

工程文件要用keil5 MDK打开,在烧录程序时会出现各种各样的问题,只要坚持百度,问题一般都可以解决。

代码下载地址
链接:https://pan.baidu.com/s/1gtDpW0-ecaXMYNBSTA-ENQ
提取码:5542
说明:我的工程文件是在ai-thinker下载的示例代码进行修改得来。

二、解读STM32工程文件

1、默认接线方式

UASRT3: 连接USB转TTL模块,用来打印信息(自己可以改用其他串口)
UASRT3: 用来与ESP12F通信

STM32引脚 连接说明
GPIOA2 连接ESPF12的RX引脚
GPIOA3 连接ESPF12的TX引脚
GPIOA4 连接ESPF12的RST引脚
GPIOA5 连接ESPF12的EN引脚
GPIOB10 连接USB转TTL的RX引脚
GPIOB11 连接USB转TTL的TX引脚

注意:ESP12F的GPIO15引脚仍要接地。

2、部分代码内容

  1. mqtt.h(此部分代码需要大家自行修改)
#ifndef __MQTT_H
#define __MQTT_H 			   
#include "stm32f10x.h"


/*
*以下参数需要用户自行修改才能测试用过
*/


#define User_ESP8266_SSID     "abgo"    		//wifi名字
#define User_ESP8266_PWD      "1234567889"      	//wifi密码


#define User_ESP8266_client_id    	"12345|securemode=3\\,signmethod=hmacsha1|"   	//MQTTclientID 用于标志client身份  最长256字节
#define User_ESP8266_username     	"STM32F103C8T6&gvksFxpgc8R"										//用于登录 MQTT 服务器 的 username, 最长 64 字节	
#define User_ESP8266_password		"A256A5DE1F22B4EAB28CA00974D115D074169E9F"          			//用于登录 MQTT 服务器 的 password, 最长 64 字节
#define User_ESP8266_MQTTServer_IP     "gvksFxpgc8R.iot-as-mqtt.cn-shanghai.aliyuncs.com"     		//MQTT本地服务器IP或者域名
#define User_ESP8266_MQTTServer_PORT   1883     													//服务器端口号


//自定义Topic
#define User_ESP8266_MQTTServer_Topic  						"/gvksFxpgc8R/STM32F103C8T6/user/test"  	

//属性上报
#define User_ESP8266_MQTTServer_Topic_Property_Post			"/sys/gvksFxpgc8R/STM32F103C8T6/thing/event/property/post"
#define User_ESP8266_MQTTServer_Topic_Property_Post_Reply	"/sys/gvksFxpgc8R/STM32F103C8T6/thing/event/property/post_reply"

//属性设置
#define User_ESP8266_MQTTServer_Topic_Property_Set			"/sys/gvksFxpgc8R/STM32F103C8T6/thingrvice/propertyt"
#define User_ESP8266_MQTTServer_Topic_Property_Set_Reply	"/sys/gvksFxpgc8R/STM32F103C8T6/thingrvice/propertyt_reply"

//事件上报
#define User_ESP8266_MQTTServer_Topic_Event_Post			"/sys/gvksFxpgc8R/STM32F103C8T6/thing/event/${tsl.event.identifier}/post"
#define User_ESP8266_MQTTServer_Topic_Event_Post_Reply		"/sys/gvksFxpgc8R/STM32F103C8T6/thing/event/${tsl.event.identifier}/post_reply"

//服务调用
#define User_ESP8266_MQTTServer_Topic_Service_Post			"/sys/gvksFxpgc8R/STM32F103C8T6/thingrvice/${tsl.service.identifier}"
#define User_ESP8266_MQTTServer_Topic_Service_Post_Reply	"/sys/gvksFxpgc8R/STM32F103C8T6/thingrvice/${tsl.service.identifier}_reply"


extern volatile uint8_t MQTTClosedFlag;  	//连接状态标志
extern volatile uint8_t MQTTReceiveFlag; 	//接收数据标志

void ESP8266_STA_MQTTClient_Link(void);  //MQTT连接阿里云服务器
void Wait_SUB(void);                     //等待接收消息并对消息进行解析
#endif

  1. mqtt.c(其中void Wait_SUB()这个函数是对接收到的数据进行解析,用到了两个很有用的函数strstr函数和atoi函数,大家可以在哔哩哔哩上观看一下我链接里老师讲的课,思路很清晰,讲的很棒。)

链接: https://www.bilibili.com/video/BV1zR4y1G79f?spm_id_from=333.999.0.0

#include "mqtt.h"
#include "esp8266.h"
#include "usart.h"
#include "delay.h"
#include <stdlib.h>
#include "led.h"

volatile u8 MQTTClosedFlag = 0;
volatile u8 MQTTReceiveFlag = 0;


void ESP8266_STA_MQTTClient_Link(void)                            //MQTT连接阿里云
{
	
	printf("正在配置 ESP8266 MQTT ...\r\n");
	
    ESP8266_AT_Test();						//恢复出厂默认
    ESP8266_Net_Mode_Choose(STA);			//配置热点信息
    while(!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD));
	ESP8266_MQTTUSERCFG(User_ESP8266_client_id,User_ESP8266_username,User_ESP8266_password);
	ESP8266_MQTTCONN( User_ESP8266_MQTTServer_IP, User_ESP8266_MQTTServer_PORT);
	
	ESP8266_MQTTSUB( User_ESP8266_MQTTServer_Topic);

	ESP8266_MQTTSUB(User_ESP8266_MQTTServer_Topic_Property_Set);
	
	ESP8266_MQTTSUB( User_ESP8266_MQTTServer_Topic_Property_Set_Reply);
	

	ESP8266_MQTTSUB( User_ESP8266_MQTTServer_Topic_Property_Post_Reply);	
	
	printf("ESP8266 MQTT 配置完成 ...\r\n");
	
	ESP8266_Fram_Record_Struct.InfAll = 0;	
	
	
	
	
		
}








void ESP8266_STA_MQTTClient_Pub(void)                     //通过topic给MQTT服务器发送消息
{
	char mqtt_message[1024];
	char str[128] = {0};
	
	
	  
	
	
		//STM32向阿里云发送消息
		

			memset(str, sizeof(str),0);
			memset(mqtt_message,sizeof(mqtt_message),0);
			
		  //sprintf(str,"PowerSwitch:1");//格式化发送字符串到MQTT服务器
			//MQTT_SendString (User_ESP8266_MQTTServer_Topic,str);//发送数据到MQTT服务器
			
			//sprintf(mqtt_message,"{\\\"method\\\":\\\"thing.service.property.post\\\"\\,\\\"id\\\":\\\"2012934115\\\"\\,\\\"params\\\":{\\\"PowerSwitch\\\":1}\\,\\\"version\\\":\\\"1.0.0\\\"}");			
			//MQTT_SendString (User_ESP8266_MQTTServer_Topic_Property_Post,mqtt_message);//发送数据到MQTT服务器			
			
	
}






void Wait_SUB(void)                             //STM32接收阿里云发来的消息并对消息进行解析
{
	  char *ret;
	  char str[20];
	  int  val;
		
    
		if(MQTTReceiveFlag == 1)		//判断是否接收到TCP网络数据
		{
			printf("Message From ESP8266 : %s\r\n",ESP8266_Fram_Record_Struct .Data_RX_BUF);
		  printf("Length Of Message    : %d\r\n",ESP8266_Fram_Record_Struct.InfBit.FramLength);	
			
			
			ret=strstr(ESP8266_Fram_Record_Struct .Data_RX_BUF,"PowerSwitch");              /rstr函数是找到powerSwitch指针位置
			if(ret!=NULL)
			{
		  	//printf("This is : %s\r\n",ret);                                             //测试
				
				
				str[0]=*(ret+13);                                                             //将powerswith后边的数字提取到str中(但是1此时还是字符型) 
				str[1]='\0';
				//printf("This is str : %s\r\n",str);                                         //测试
				
				
				val=atoi(str);                                                                //atoi函数是将字符型数据转换为十进制数字1或者0
				//printf("This is val : %d\r\n",val);                                           //测试
				
					if(val==0)
					{
						  LED1( OFF );			  // 灭
	  	        delay_ms(50000);
					}	
					else if(val==1)
					{
						  LED1( ON );			  // 亮
	  	        delay_ms(50000);
					}
			
				
			}
			
		
		  
		}
ESP8266_Fram_Record_Struct.InfAll = 0;		//清空ESP8266_Fram_Record_Struct接收标志,准备接收下一条消息
			MQTTReceiveFlag = 0;
		
   
}

  1. main.c
#include "stm32f10x.h"
#include "stm32f10x_it.h"
#include "stdio.h"
#include "string.h"
#include "delay.h"
#include "usart.h"
#include "esp8266.h"
#include "tcp.h"
#include "mqtt.h"
#include "led.h"




int main(void)
{    
  SystemInit();	// 配置系统时钟为72M 	
  LED_GPIO_Config(); //LED 端口初始化 					
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	delay_init();
	uart3_Init(115200);
	ESP8266_Init(115200);	
	ESP8266_STA_MQTTClient_Link();				           	//MQTT连接阿里云
	//UASRT3_RX_TX_TEST();								            //测试串口通讯
  //ESP8266_STA_TCPClient_UnvarnishSend_Test();		  //测试TCP透传模式通讯
	//ESP8266_STA_TCPClient_Test();						        //测试TCP非透传模式通讯
	
	while(1)
	{  
		  delay_ms(60000);
		  
		  //ESP8266_STA_MQTTClient_Pub();                     //通过topic给阿里云发送消息
		  Wait_SUB();                                   //检测阿里云发送的消息并显示   
      
		
	
		
	
	}

}

三、测试MQTT通讯

  1. 将程序烧录进STM32中,并打开串口调试助手。可以看到串口打印出消息零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)
    零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)
    零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)
  2. 我们发布和接收到的所有数据都可以在日志服务中看到,其中物理型模型可以在设备中看到并且实时刷新零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)

四、实现阿里云控制STM32单片机LED灯的亮灭

我大概做了一个流程图来解释阿里云控制LED亮灭的过程(APP端大家可以进一步学习)这个过程主要在mqtt.c中的void Wait_SUB()函数中,大家可以认真学习一下代码。零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)
下面是我的一个演示视频: 在阿里云上发布"PowerSwitch":1,LED灯亮;发布"PowerSwitch":0,LED灯灭。(具体发布什么消息大家可以在代码中改)

阿里云控制STM32的LED等亮灭

我是从零基础学习,自己不断摸索完成的。主要参考了下面两位大佬的文章
链接: 菜鸟小阿江
链接: 「已注销」

总结

整个过程没有很复杂,但是会一直出现很多的小问题,不要放弃,坚持百度,所有的问题都会被解决。
另外,大家也可以进一步学习APP或者微信小程序的开发,可以通过APP端来进行控制,我也打算在考研过后作进一步的学习。文章来源地址https://www.toymoban.com/news/detail-438377.html

到了这里,关于零基础STM32+ESP12F+MQTT连接阿里云服务器完整流程(三、STM32通过代码连接阿里云服务器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP32的MQTT AT固件烧录+STM32以ESP32的MQTT AT固件的AT指令连接EMQX下mqtt服务器实现消息订阅和发布

    目录 写在前面 三种方案(利用ESP32连接EMQX下的MQTT) 步骤 ESP32烧录固件并AT指令进行测试。 下载固件  烧录工具下载 烧录固件(选择ESP32)  关于AT 指令与MQTT服务器断开后自动重连MQTT服务器 关于AT指令设置上电自动连接WIFI 关于AT指令设置断开后自动重新连接WIFI STM32对接E

    2023年04月12日
    浏览(30)
  • 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

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

    2024年02月06日
    浏览(36)
  • ESP8266-01 MQTT固件烧录并连接阿里云服务器

    1、烧录工具:flash_download_tool :   链接:https://pan.baidu.com/s/1jJJ07G56jNJ3SrOwstPzVA?pwd=8i93  提取码:8i93 2、串口调试助手:串口调试助手 3、阿里云配置生成工具: 链接:https://pan.baidu.com/s/13tjpFwGMeR0juS5OSEBiJQ?pwd=61me  提取码:61me 4、USB TO TTL 5、esp8266 01s 6、AT固件:下载   向esp8266烧

    2024年02月06日
    浏览(55)
  • STM32、ESP8266与MQTT连接阿里云物联网的串口通信异常解析

    STM32、ESP8266与MQTT协议连接阿里云物联网平台时常见的串口通信异常介绍 在构建物联网应用时,STM32、ESP8266与MQTT协议的结合是实现设备与网络间稳定通信的关键。然而,在连接阿里云物联网平台的过程中,串口通信异常成为了一个常见的挑战。本文将探讨这些异常现象及其可

    2024年04月22日
    浏览(30)
  • 手机、电脑mqtt客户端通过腾讯云服务器远程连接ESP32

            本文将实现:         1、esp32与腾讯云物联网服务器通过mqtt协议通信         2、电脑和手机客户端通过mqtt与腾讯云相通信         3、腾讯云服务器内部消息转发,将手机、电脑发布的主题转发给esp32订阅,实现手机、电脑与esp32的远程通信。      

    2024年02月11日
    浏览(46)
  • STM32 + ESP32(AT固件 MQTT协议) + MQTTX(桌面终端) + (EMQX消息服务器)

    翻出老物件,搭建一个简单的 IOT 开发环境,也算是废物利用了 ,接下来加传感器。 1. STM32  采集数据:      RTOS。      资源相对比较丰富,可以根据项目需求定制。 2. ESP32  网络传输(AT固件 MQTT协议) :     AT:封装好的接口,扩展性不是那么好,业务简单的话将就可以

    2024年02月08日
    浏览(58)
  • 从零开始用Nodejs搭建一个MQTT服务器,并且用stm32通过esp8266进行消息订阅和发布

    最近在做一个物联网项目,需要用到服务器进行数据的存储和数据的请求和发送,之前我用过onenet平台上的http服务,虽然能通过get和post请求进行数据的提交和发送,但是平台上的数据发生改变却不能主动推送给esp8266,与我此次的项目不符合,所以pass。然后我了解了下mqtt协

    2024年02月04日
    浏览(40)
  • ESP32无法连接阿里云,MQTT通讯失败

    小白一枚,最近在学习物联网,不曾想倒在门槛上。 找了个ESP32控制小灯的教程,根据教程一步一步做的,可最后就是无法激活阿里云设备,云端运行日志不停刷460代码,MQTT消息和设备信息对不上,找不到原因。 恳请大佬帮忙解惑。         代码: #include WiFi.h #include PubS

    2024年02月06日
    浏览(30)
  • STM32F103C8T6+ESP-01S+MQTT服务器实现数据上传和接收(一)

    文章目录 STM32F103C8T6+ESP-01S+MQTT服务器实现数据的上传和接收(二) ESP-01S推荐使用安信可官网1471号固件,烧录配置如下图。 请替换其中里面的内容 使用PA9、PA10分别连接ESP8266的RXD、TXD引脚。 由于每次发送的AT指令都会被8266通过串口再发送回来,为了缓解串口的压力,并且更

    2024年04月17日
    浏览(34)
  • ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)

    前言:在开发过程中,几乎踩便了所有大坑小坑总结出的文章,我是把坑踩满了,帮助更过小白快速上手,如有错误之处,还麻烦各位大佬帮忙指正、 目录 一、ESP-01s介绍         1、ESP-01s管脚功能:                 模组启动模式说明:         2、初始配置和

    2024年02月19日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包