云计算百科
云计算领域专业知识百科平台

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

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;

}

}

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

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【STM32】esp8266通过MQTT连接服务器|订阅发布
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!