第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Esp8266-01s 51单片机实现连接MQTT踩坑:附加烧录安信可固件+宝塔搭建MQTT服务器 全套攻略

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

时间:2020-08-30 06:27:41

相关推荐

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

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

✨✨欢迎订阅本专栏或者关注我,一起学习单片机!!✨✨

✨✨欢迎订阅本专栏或者关注我,一起学习单片机!!✨✨

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

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

我的其他文章:

🔥【Python验证码识别】Selenium验证码ddddocr识别:带带ddocr🔥

🔥【C#学习】C#学习记录🔥

————————————————

文章目录

前言一、搭建MQTT云服务器1.下载2.开放端口3.测试使用 二、下载安信可固件1.烧录2.测试连通信 三、连接STC89C521.烧录程序到STC89C522.引脚图连接 四、简单介绍下MQTT总结

前言

本文通过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:latestdocker 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¶Ë¿Ú¶¨ÒåΪledsbit led1=P2^1;//½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪledsbit led2=P2^2;//½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪledsbit led3=P2^3;//½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪledsbit led4=P2^4;//½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪledsbit led5=P2^5;//½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪledsbit led6=P2^6;//½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪledsbit led7=P2^7;//½«µ¥Æ¬»úµÄP0.0¶Ë¿Ú¶¨ÒåΪledint 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) {//´®¿Ú²¨ÌØÂÊÒªÉèΪ9600TMOD = 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){//0kai1tingled=0;delay(50000); //´óÔ¼ÑÓʱ450msled1=0;delay(50000); //´óÔ¼ÑÓʱ450msled2=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); //´óÔ¼ÑÓʱ450msled1=1;delay(50000); //´óÔ¼ÑÓʱ450msled2=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指令,所有代码发送都需要加换行

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。