【STM32】esp8266通过MQTT连接服务器|订阅发布

发布于:2024-09-17 ⋅ 阅读:(82) ⋅ 点赞:(0)

1. MQTT协议

该协议为应用层协议,传输层使用的是tcp,MQTT的订阅和发布,就相当于在抖音中你关注了某个领域的博主(订阅),如果有其他人发了作品就会推给你(发布),默认已经安装好了

简单演示
订阅

mosquitto_sub -h "47.121.24.16" -p 1883  -t "A" 

mosquitto_sub 订阅指令
-h 主机ip
-p 端口号1883
-t 主题

发布

mosquitto_pub -h "47.121.24.16" -p 1883 -t "A" -m "nihaoma"

mosquitto_pub 发布指令
-h 主机ip
-p 端口号1883
-t 主题
-m 内容

在这里插入图片描述
订阅主题“A”的就可以收到

2.esp8266通过MQTT连接服务器

1.需要在单片机里面建立配置用户信息

void esp8266_connect_MQTT(const char*ip,int port,const char* user,const char* password)

//需要云服务器ip地址和端口号,以及MQTT服务器的用户名以及密码,如果是匿名用户的话,用户名和密码随便给
在这里插入图片描述
在这里插入图片描述

根据手册构建指令配置信息保存在单片机rom
在这里插入图片描述

2.eps8266连接MQTT
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
连接成功在服务器这边验证

isof -i |grep mosquitto   //查看链接情况

在这里插入图片描述

3.发布

单片机发布,MQTT服务器这边订阅就可以收到
在这里插入图片描述

void esp8266_Publish(const char* topic,const char*content);//发布的主题以及内容

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

4.订阅

在MQTT服务器这边发布,esp8266这边订阅,然后通过串口2返回给单片机,单片机将其给串口1,然后在串口助手上显示出来

void esp8266_subscribe(const char* topic)//订阅主题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现发送的helloworld收到成了helloword了,所以我们需要

	   uint8_t data,flag=0;
	   uint32_t old_tick=0;
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	
		if(HAL_GetTick()-old_tick>50&&flag) //假如说收到最后一个字符后等50ms后,说明接收完了
		{
		
		    clearbuffer();  //打印到串口1,清除缓冲区
			  flag=0;  //防止频繁冲刷缓冲区
		
		
		}
    if(HAL_UART_Receive(&huart2,(uint8_t*)&data,1,10)==HAL_TIMEOUT)  //一个字符和另一个字符很快就能接收,如果超过10ms,就直接continue
		{
		 continue;
		
		}
		else
		{	
		  buffer[num++]=data;  //放到缓冲区里面
		  old_tick=HAL_GetTick();//获取当前字符时间,用于和下一个字符作对比
			flag=1;
		
		
		
		}
	 
		
  }

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


网站公告

今日签到

点亮在社区的每一天
去签到