一.通过AT指令设置esp01s(记得发送新行)
将esp01s与ch340(usb转ttl相连)
1.esp01s默认的波特率为115200,而51的波特率无法达到如此高度,发送AT+CIOBAUD=9600 将esp01s设置成9600的波特率,发送AT+RST重启esp,之后串口助手波特率记得改回9600
2.发送AT+CWMODE_DEF=3设置esp为热点客户端并存模式
3.发送AT+CWJAP_DEF="tuan","12345678"连接热点,前一个字符串为热点名称,后一个为密码
4.发送AT+SAVETRANSLINK=1,"test.mosquitto.org",1883,"TCP"连接公共的mqtt服务器,即mosquitto服务器
5.重启esp01s
二.发送mqtt报文
1.发送mqtt的连接报文(具体报文格式请参考其他大佬写的博客)
记得以hex模式发送,同时取消发送新行
10 13 00 04 4D 51 54 54 04 C2 00 78 00 03 68 6A 74 00 00 00 00
如果返回的是20 02 00 00则代表连接成功
2.发送订阅的报文
82 08 00 02 00 03 68 6A 74 00
返回 00 结尾表示成功
三.将51单片机与esp01s相连
将以下代码写进51单片机(注意51的晶振一定是要11.05926的)
#include "reg52.h"
sbit led=P2^4; //led灯io口位定义
char connect[]={
0x10,0x13,0x00,0x04,0x4D,0x51,0x54,0x54,0x04,0xC2,
0x00,0x78,0x00,0x03,0x68,0x6A,0x74,0x00,0x00,0x00,0x00
}; //mqtt连接报文 21个
char dingyue[]={0x82,0x08,0x00,0x02,0x00,0x03,0x68,0x6A,0x74,0x00};//mqtt订阅报文,10个
int i; //用来循环串口输出数据
char receiveData=0x37; //用来保存mqtt服务器发来的信息
void delay(int j) //随便写的延迟函数
{
while(j--);
}
void UsartInit() //串口配置函数
{
TMOD=0x20; //设置定时器1工作方式
TH1=0xfd; //波特率9600
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void connect_mqtt() //连接mqtt函数
{
for(i=0;i<21;i++)
{
SBUF=connect[i];//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
}
void dingyue_mqtt() //mqtt订阅函数
{
for(i=0;i<10;i++)
{
SBUF=dingyue[i];//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
}
void alive_mqtt() //mqtt保活函数
{
SBUF=0xc0;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
SBUF=0x00;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
void main()
{
UsartInit(); // 串口初始化
connect_mqtt(); // 连接mqtt服务器
delay(10000);
dingyue_mqtt(); // 订阅名为 hjt 的主题
delay(10000);
led=0;
while(1)
{
delay(500000);
delay(500000);
delay(500000);
delay(500000);
alive_mqtt();
}
}
void Usart() interrupt 4 //串口中断函数
{
receiveData=SBUF;//将接收到的数据存到变量内
RI = 0;//清除接收中断标志位
if(receiveData == 0x31) //如果接收到的信息为‘1’,则打开led灯
{
led=1;
}
if(receiveData == 0x32) //如果接收到的信息为 ‘2’,则关闭led灯
{
led=0;
}
}
烧进去后将51单片机进行复位,打开mqtt.fx向服务器hjt主题发送数据测试一下
四.测试视频
https://www.bilibili.com/video/BV1Bm4y1U7L7?share_source=copy_web
看最后二分钟就行
五.资源下载
代码和资源已经托管到giteee
找到其中的mqtt51文件夹即可下载
https://gitee.com/hong-jiatuan/hjt.git
版权声明:本文为CSDN博主「好肥的猪猪啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51105655/article/details/122532259
暂无评论