標題:
51單片機驅(qū)動esp8266代碼
[打印本頁]
作者:
漸逝音璃
時間:
2018-5-2 00:26
標題:
51單片機驅(qū)動esp8266代碼
#include<reg52.h> //51單片機常用的頭文件
#define uchar unsigned char //宏定義一個無符號的char類型
#define uint unsigned int //宏定義一個無符號的int類型
//發(fā)送一字節(jié)
void sendByte(uchar b)
{
SBUF = b;
while(!TI);
TI=0;
}
//發(fā)送字符串
void sendString(uchar *s)
{
while(*s != '\0') //字符串默認結(jié)尾'\0',以此來判斷字符串的結(jié)束
{
sendByte(*s);
s++;
}
}
//初始化ESP8266WiFi模塊
void initEsp()
{
uint a;
SCON = 0x50; //8位數(shù)據(jù),可變波特率
TMOD = 0x20; //設置定時器1位16位自動重裝模式
TL1 = 0xfd; //設置定時器初值,波特率為9600
TH1 = 0xfd;
ET1 = 0; //禁止定時器1中斷
TR1 = 1; //啟動定時器1
EA = 1;
for (a=0; a<50000; a++); //延時幾秒,讓模塊有時間啟動
sendString("AT+CWMODE=2\n"); //設置為softAP和station共存模式
//WiFi熱點不能通過代碼設置,可使用串口助手進行設置,該設置斷電不丟失
/*
for (a=0; a<20000; a++);
sendString("AT+CWSAP='TEST','12345678',1,3\n"); //建立WiFi熱點
*/
for (a=0; a<50000; a++);
sendString("AT+CIPMUX=1\n"); //啟動多連接
for (a=0; a<20000; a++);
sendString("AT+CIPSERVER=1,333\n");//建立server,端口為333
for (a=0; a<20000; a++);
sendString("AT+CIPSTO=50\n"); //服務器超時時間設置
RI=0;
ES=1; //初始化完成,串行口中斷打開
}
//獲取數(shù)據(jù),數(shù)據(jù)格式示例:+IPD,0,14:"time":"11:11"
void getData()
{
uint a;
if(receiveFlag)
{
for(i=0; i<2; i++)
{
Hour[i]=Buffer[17+i];
}
Hour[2]='\0';
for(i=0; i<2; i++)
{
Minute[i]=Buffer[20+i];
}
Minute[2]='\0';
//將獲取到的數(shù)據(jù)發(fā)送到串口助手上顯示
for (a=0; a<10000; a++); //需要延時,負責會造成數(shù)據(jù)錯亂導致丟包
sendString(Hour);
for (a=0; a<10000; a++);
sendString(Minute);
receiveFlag=0;
count=0;
for(i=0; i<22; i++)
{
Buffer[i]=0;
}
}
}
//主函數(shù)
void main()
{
initEsp(); //初始化WiFi模塊
receiveFlag = 0; //receiveFlag判斷執(zhí)行g(shù)etData() 的標志
count = 0; //count緩沖區(qū)RXDdata[count]的索引
while(1)
{
getData();
}
}
//利用中斷接收信息,且舍棄無效信息
void uart() interrupt 4
{
if(RI == 1)
{
ES = 0; //關閉串行中斷
RI = 0; //清除串口接收標志位
temp = SBUF; //從串口緩沖區(qū)取得數(shù)據(jù)
if(count<20) //滿足需接收的信息長度,將數(shù)據(jù)存入緩沖區(qū)
{
Buffer[count]=temp;
count++;
if(Buffer[0]=='+') //判斷是否為無效數(shù)據(jù),由于WiFi模塊會自動加上"+PID.."開頭的字符串
{
receiveFlag = 1;
}
else
{
receiveFlag = 0;
count = 0;
}
}
ES = 1;
}
}
作者:
付小熊
時間:
2020-1-3 00:36
樓主大神好,我在使用單片機控制esp8622連接另一個esp8622過程中發(fā)現(xiàn),使用單片機控制連接不上,但是通過電腦串口的AT指令能連接上。這是什么原因?是不是您所說的不能通過51控制連接服務器,這個問題現(xiàn)在可以解決嗎?有伸手黨嫌疑,樓主見諒~
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1