Esp8266-01s、51单片机实现连接MQTT踩坑:附加烧录安信可固件+宝塔搭建MQTT服务器 全套攻略

简介: 🚀🚀 本文记录一下5.20在宿舍宅了两天搞懂的东西,由于对于单片机还是个萌新,没有可以咨询的人,无奈之下,翻遍了度娘、B站、C站,没办法学习就是所有东西都要靠自己去摸索,期间踩了很多坑,有很多问题值得我去解决,这里做一个记录,便于以后自己查阅,也希望能对现在学习的你做一个参考,避免和我一样踩坑🚀🚀✨✨欢迎订阅本专栏或者关注我,一起学习单片机!!✨✨✨✨欢迎订阅本专栏或者关注我,一起学习单片机!!✨✨❤️❤️❤️ 最后,希望我的这篇文章能对你的有所帮助!

🚀🚀 本文记录一下5.20在宿舍宅了两天搞懂的东西,由于对于单片机还是个萌新,没有可以咨询的人,无奈之下,翻遍了度娘、B站、C站,没办法学习就是所有东西都要靠自己去摸索,期间踩了很多坑,有很多问题值得我去解决,这里做一个记录,便于以后自己查阅,也希望能对现在学习的你做一个参考,避免和我一样踩坑🚀🚀

✨✨欢迎订阅本专栏或者关注我,一起学习单片机!!✨✨
在这里插入图片描述
✨✨欢迎订阅本专栏或者关注我,一起学习单片机!!✨✨

❤️❤️❤️ 最后,希望我的这篇文章能对你的有所帮助!

愿自己还有你在未来的日子,保持学习,保持进步,保持热爱,奔赴山海! ❤️❤️❤️

我的其他文章:
🔥【Python验证码识别】Selenium验证码ddddocr识别:带带ddocr🔥
🔥【C#学习】C#学习记录🔥
————————————————

@TOC


前言

本文通过MQTT协议实现远程点亮led灯作为实验,需要用到的器材有:ESP8266-01s、STC89C52,对了本文连接的是自己的服务器,所以还需要一个宝塔,对于没有宝塔的伙伴没关系,可以用公共的服务器,效果是一样的


一、搭建MQTT云服务器

1.下载

首先,先将宝塔上安装Docker管理器在这里插入图片描述
拉取emqx/emqx镜像
在这里插入图片描述
在这里插入图片描述
成功后在终端运行命令,或者加入定时计划运行即可:

docker run -dit --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 -p 8084:8084 emqx/emqx:latest

docker exec -it  emqx /bin/sh

【我是因为忘记密码了,登陆不上去,可以用我的方法,也可以在终端】

1.终端
在这里插入图片描述

2.定时计划
在这里插入图片描述
上述都要执行,一次即可!

2.开放端口

1883:MQTT 协议端口
8883:MQTT/SSL 端口
8083:MQTT/WebSocket 端口
8080:HTTP API 端口
18083:Dashboard 管理控制台端口

先到服务器运营商开放,再去宝塔开放,不然没用
【我这里就不放运营商的开放截图了】
在这里插入图片描述

3.测试使用

http://云服务器公网IP:18083
账号: admin
密码: public

【我的是这样的】
在这里插入图片描述
通过MQTT手机端软件测试,可以用:
【软件怎么用自己去摸索哈】
在这里插入图片描述
【加入到同一个房间的设备可以在房间内互相发消息,读者可以自己测试】

二、下载安信可固件

1.烧录

首先ESP8266-01s固件地址:
点我下载
在这里插入图片描述
下载固件到桌面,打开烧录器
1.选择在这里插入图片描述

2.USB转TTL接法:
【进入烧录模式,注意下紫色框】
用短接帽把转接板接上如图所示
在这里插入图片描述

3.路径以及一些选项选择
【按照我的来即可】
kk那里注意下,烧录记得他的波特率,后面需要用指令设置9600..
在这里插入图片描述
点击START 等待烧录结束!!

2.测试连通信

打开安信可模组串口助手,取下短接帽,插上电脑后,打开助手记得选择刚刚烧录的端口,如图:
在这里插入图片描述

在这里插入图片描述
然后发送AT指令,测试是否正常
【提示下,可以用MQTT工具箱展开即可用】

AT
返回OK

然后发送AT指令,将波特率设置为9600

AT+UART_DEF=9600,8,1,0,0
返回OK

【由于博主已经弄好了,接下来的操作都不放成功截图了】

接下来设置模式以及连接WIFI

AT+CWMODE=1
AT+CWJAP="liu_wei 2.4G","qwer4399"

都返回ok后开始连接刚刚的MQTT服务器,在刚刚说的MQTT工具箱里面展开输入配置信息,可以一键生成!
如图:
在这里插入图片描述
生成后:
在这里插入图片描述
依次点击到【取消订阅主题】之前就可以,如果没问题返回ok,可以用手机连接同一个MQTT服务器,同一个主题下【pop】
在这里插入图片描述
在这里插入图片描述
串口图片.jpg
这里就不放图了一样的可以接收到

三、连接STC89C52

1.烧录程序到STC89C52

废话不多说!上代码!

#include <reg52.h>
bit uart_busy = 0;    //´®¿Ú·µ»ØÏûÏ¢
char flag=0;

sbit led=P2^0;       //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled
sbit led1=P2^1;      //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled
sbit led2=P2^2;      //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled
sbit led3=P2^3;      //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled
sbit led4=P2^4;      //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled
sbit led5=P2^5;      //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled
sbit led6=P2^6;      //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled
sbit led7=P2^7;      //½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪled


int i; //??????????
char receiveData=0x37;  //????mqtt????????


typedef unsigned int u16;     //¶ÔÊý¾ÝÀàÐͽøÐÐÉùÃ÷¶¨Òå
typedef unsigned char u8;




void delay(u16 i){
while(i--);

}
void dealy(u16 i){
while(i--);

}
 
void Init_uart(void) {      //´®¿Ú²¨ÌØÂÊÒªÉèΪ9600
    TMOD = TMOD | 0x20;    
    SCON = SCON | 0x50;    
    TH1 = 0xFd;        
    TL1 = TH1;  
    TR1 = 1;              
    EA =1;                
    ES =1;               
}
//´®¿Ú·¢ËÍ×Ö·û
void Uart_SendByteData(unsigned char msg){
    while(uart_busy); 
    SBUF=msg;          
    uart_busy = 1;    
}
void Uart_SendStrData(unsigned char *msg){
    while(*msg){
        Uart_SendByteData(*msg++);
    }
}
 
//³õʼ»¯ÅäÖÃ8266£¬Ö¸¶¨·þÎñÆ÷
void Init_ESP01S(){    

dealy(50000);
    dealy(50000);
    dealy(50000);
    dealy(50000);
    Uart_SendStrData("AT+MQTTUSERCFG=0,1,\"esp\",\"admin\",\"public\",0,0,\"\"\r\n");
    dealy(50000);
    dealy(50000);
    dealy(50000);
    dealy(50000);
    dealy(50000);
    dealy(50000);
    dealy(50000);
    dealy(50000);
    Uart_SendStrData("AT+MQTTCONN=0,\"49.234.42.125\",1883,0\r\n");
dealy(50000);
    dealy(50000);
    dealy(50000);

    dealy(50000);
    dealy(50000);
    dealy(50000);
Uart_SendStrData("AT+MQTTSUB=0,\"pop\",0\r\n");
    dealy(50000);
    dealy(50000);
    dealy(50000);
    dealy(50000);
    
    Uart_SendStrData("AT+MQTTPUB=0,\"pub\",\"I am a esp8266\",1,0\r\n");
    
    
}
 
void main(){
    Init_uart();
    dealy(50000);
    Init_ESP01S();
    
    //Uart_SendStrData("111");    //ͨ¹ý´®¿Ú·¢ËÍ×Ö·û´®¸ø8266£¬·¢Ë͵½ÔƶË

    while(1)
    {
if (flag==1)
{
//0kai1ting
           led=0;
           delay(50000); //´óÔ¼ÑÓʱ450ms
           led1=0;
                        delay(50000); //´óÔ¼ÑÓʱ450ms
                        led2=0;
                        delay(50000); //´óÔ¼ÑÓʱ450ms  
           led3=0;
           delay(50000); //´óÔ¼ÑÓʱ450ms  
           led4=0;
           delay(50000); //´óÔ¼ÑÓʱ450ms  
           led5=0;
           delay(50000); //´óÔ¼ÑÓʱ450ms  
           led6=0;
           delay(50000); //´óÔ¼ÑÓʱ450ms  
           led7=0;
           flag=0;
          
}
                    led=1;
           delay(50000); //´óÔ¼ÑÓʱ450ms
           led1=1;
        delay(50000); //´óÔ¼ÑÓʱ450ms
        led2=1;
        delay(50000); //´óÔ¼ÑÓʱ450ms  
           led3=1;
           delay(50000); //´óÔ¼ÑÓʱ450ms  
           led4=1;
           delay(50000); //´óÔ¼ÑÓʱ450ms  
           led5=1;
           delay(50000); //´óÔ¼ÑÓʱ450ms  
           led6=1;
           delay(50000); //´óÔ¼ÑÓʱ450ms  
           led7=1;
           delay(50000); //´óÔ¼ÑÓʱ450ms     
          
       
        // send_by_string(0x66);
        
    }   
}
 
void UART_Interrupt(void) interrupt 4 {

    unsigned char one_char;

    if(RI){
        receiveData=SBUF;//????????????
        RI = 0;
        if(receiveData == 0x31)   //?????????‘1’,???led?
    {
        
        flag=1;
    }
    
    if(receiveData == 0x32)   //????????? ‘2’,???led?
    {
        flag=0;
    }

        
    }
    
    if(TI){
        TI = 0;
        uart_busy = 0;
    }
    
}

烧录:
在这里插入图片描述

2.引脚图连接

将ESP8266和开发板连接
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
对应连接后:
在这里插入图片描述

在这里插入图片描述

成品视频:

先欠着

四、简单介绍下MQTT

【可以说是加入房间的人都能通信,互接信息】
在这里插入图片描述

总结

踩坑:在进入穿透模式后,退出方法就是发送【+++】,不换行发送一次,就可以发送AT指令,所有代码发送都需要加换行

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
28天前
|
物联网
MQTT常见问题之用单片机接入阿里MQTT实例失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
28天前
|
消息中间件 物联网 网络性能优化
MQTT常见问题之mqtt 连接一直显示 Not authorized to connect如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
18天前
|
弹性计算 前端开发 Java
使用阿里云 mqtt serverless 版本超低成本快速实现 webscoket 长链接服务器
使用阿里云 MQTT Serverless 可轻松实现弹性伸缩的 WebSocket 服务,每日成本低至几元。适用于小程序消息推送的 MQTT P2P 模式。前端需注意安全,避免 AK 泄露,采用一机一密方案。后端通过调用 `RegisterDeviceCredential` API 发送消息。示例代码包括 JavaScript 前端连接和 Java 后端发送。
166 0
|
1月前
|
Java Maven Android开发
java如何连接mqtt
java如何连接mqtt
45 0
|
5月前
|
消息中间件 Java
springboot RabbitMQ 连接超时配置
springboot RabbitMQ 连接超时配置
216 0
|
2月前
|
物联网 Linux 开发工具
MQTT协议接入问题之连接失败如何解决
MQTT接入是指将设备或应用通过MQTT协议接入到消息服务器,以实现数据的发布和订阅;本合集着眼于MQTT接入的流程、配置指导以及常见接入问题的解决方法,帮助用户实现稳定可靠的消息交换。
136 2
|
2月前
|
JSON 物联网 开发工具
MQTT协议问题之如何搭建物联网空调的服务器
MQTT协议是一个轻量级的消息传输协议,设计用于物联网(IoT)环境中设备间的通信;本合集将详细阐述MQTT协议的基本原理、特性以及各种实际应用场景,供用户学习和参考。
79 1
|
2月前
|
消息中间件 网络协议 物联网
MQTT协议问题之阿里云物联网服务器断开如何解决
MQTT协议是一个轻量级的消息传输协议,设计用于物联网(IoT)环境中设备间的通信;本合集将详细阐述MQTT协议的基本原理、特性以及各种实际应用场景,供用户学习和参考。
130 1
|
3月前
|
消息中间件 JSON 监控
【UE插件DTRabbitMQ】 虚幻引擎蓝图连接RabbitMQ服务器使用插件说明
本插件可以使用蓝图连接 RabbitMQ服务器,并推送或者监听消息。
197 4
|
4月前
|
消息中间件 运维 负载均衡
负载均衡中后端连了三个rabbitmq,如果挂了一个,客户端连接mq会变慢吗
在负载均衡中使用三个 RabbitMQ 实例,如果其中一个实例发生故障,可能会影响客户端连接到 RabbitMQ 的性能。具体影响取决于负载均衡的配置和客户端的实现方式。 如果负载均衡器能够及时检测到故障的 RabbitMQ 实例并将流量路由到正常的实例,那么客户端连接的性能影响可能较小。但如果负载均衡器不能迅速切换流量或者客户端实现不支持及时的连接故障转移,那么可能会导致客户端连接的延迟或失败。 在设计这样的架构时,有一些考虑因素: 1. **健康检查和故障切换:** 确保负载均衡器能够定期检查 RabbitMQ 实例的健康状态,并在出现故障时快速将流量切换到其他正常的实例。 2.