一.通過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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413994.html
標籤:其他
上一篇:想隨時定位自己做的智能設備在哪?安排,ESP32 + HaaS Python足矣,定位還能顯示在地圖上哦
下一篇:【畢設】自定義的串口通信協議_1
