🚀🚀 本文记录一下5.20在宿舍宅了两天搞懂的东西,由于对于单片机还是个萌新,没有可以咨询的人,无奈之下,翻遍了度娘、B站、C站,没办法学习就是所有东西都要靠自己去摸索,期间踩了很多坑,有很多问题值得我去解决,这里做一个记录,便于以后自己查阅,也希望能对现在学习的你做一个参考,避免和我一样踩坑🚀🚀
??欢迎订阅本专栏或者关注我,一起学习单片机!!?? ??欢迎订阅本专栏或者关注我,一起学习单片机!!??
?????? 最后,希望我的这篇文章能对你的有所帮助!
愿自己还有你在未来的日子,保持学习,保持进步,保持热爱,奔赴山海! ??????
我的其他文章: 🔥【Python验证码识别】Selenium验证码ddddocr识别:带带ddocr🔥 🔥【C#学习】C#学习记录🔥 ————————————————
前言
本文通过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
废话不多说!上代码!
bit uart_busy = 0; //′??ú·μ?????¢
char flag=0;
sbit led=P2^0; //??μ¥???úμ?P0.0???ú?¨ò??aled
sbit led1=P2^1; //??μ¥???úμ?P0.0???ú?¨ò??aled
sbit led2=P2^2; //??μ¥???úμ?P0.0???ú?¨ò??aled
sbit led3=P2^3; //??μ¥???úμ?P0.0???ú?¨ò??aled
sbit led4=P2^4; //??μ¥???úμ?P0.0???ú?¨ò??aled
sbit led5=P2^5; //??μ¥???úμ?P0.0???ú?¨ò??aled
sbit led6=P2^6; //??μ¥???úμ?P0.0???ú?¨ò??aled
sbit led7=P2^7; //??μ¥???úμ?P0.0???ú?¨ò??aled
int i; //??????????
char receiveData=0x37; //????mqtt????????
typedef unsigned int u16; //??êy?YààDí??DDéù?÷?¨ò?
typedef unsigned char u8;
void delay(u16 i){
while(i--);
}
void dealy(u16 i){
while(i--);
}
void Init_uart(void) { //′??ú2¨ì??êòaéè?a9600
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++);
}
}
//3?ê??ˉ????8266£????¨·t???÷
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"); //í¨1y′??ú·¢?í×?·?′???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指令,所有代码发送都需要加换行
|