找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5470|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)驅(qū)動(dòng)esp8266代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:320164 發(fā)表于 2018-5-2 00:26 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>               //51單片機(jī)常用的頭文件
#define uchar unsigned char     //宏定義一個(gè)無(wú)符號(hào)的char類型
#define uint unsigned int       //宏定義一個(gè)無(wú)符號(hào)的int類型

//發(fā)送一字節(jié)
void sendByte(uchar b)
{
  SBUF = b;
  while(!TI);
  TI=0;
}

//發(fā)送字符串
void sendString(uchar *s)
{
  while(*s != '\0') //字符串默認(rèn)結(jié)尾'\0',以此來(lái)判斷字符串的結(jié)束
  {
    sendByte(*s);
    s++;
  }
}

//初始化ESP8266WiFi模塊
void initEsp()
{
  uint a;
  SCON = 0x50;    //8位數(shù)據(jù),可變波特率
  TMOD = 0x20;    //設(shè)置定時(shí)器1位16位自動(dòng)重裝模式
  TL1 = 0xfd;     //設(shè)置定時(shí)器初值,波特率為9600
  TH1 = 0xfd;
  ET1 = 0;        //禁止定時(shí)器1中斷
  TR1 = 1;        //啟動(dòng)定時(shí)器1
  EA = 1;

  for (a=0; a<50000; a++);      //延時(shí)幾秒,讓模塊有時(shí)間啟動(dòng)
  sendString("AT+CWMODE=2\n");  //設(shè)置為softAP和station共存模式

  //WiFi熱點(diǎn)不能通過(guò)代碼設(shè)置,可使用串口助手進(jìn)行設(shè)置,該設(shè)置斷電不丟失
  /*
  for (a=0; a<20000; a++);
  sendString("AT+CWSAP='TEST','12345678',1,3\n"); //建立WiFi熱點(diǎn)
  */

  for (a=0; a<50000; a++);   
  sendString("AT+CIPMUX=1\n"); //啟動(dòng)多連接

  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");     //服務(wù)器超時(shí)時(shí)間設(shè)置

  RI=0;
  ES=1;   //初始化完成,串行口中斷打開(kāi)
}

//獲取數(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í),負(fù)責(zé)會(huì)造成數(shù)據(jù)錯(cuò)亂導(dǎo)致丟包
    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() 的標(biāo)志
  count = 0;            //count緩沖區(qū)RXDdata[count]的索引  
  while(1)
  {
    getData();
  }
}

//利用中斷接收信息,且舍棄無(wú)效信息
void uart() interrupt 4  
{
  if(RI == 1)   
  {
    ES = 0;     //關(guān)閉串行中斷
    RI = 0;     //清除串口接收標(biāo)志位
    temp = SBUF; //從串口緩沖區(qū)取得數(shù)據(jù)

    if(count<20)    //滿足需接收的信息長(zhǎng)度,將數(shù)據(jù)存入緩沖區(qū)
    {
      Buffer[count]=temp;
      count++;
      if(Buffer[0]=='+')  //判斷是否為無(wú)效數(shù)據(jù),由于WiFi模塊會(huì)自動(dòng)加上"+PID.."開(kāi)頭的字符串
      {
        receiveFlag = 1;
      }
      else
      {
        receiveFlag = 0;
        count = 0;
      }
    }
    ES = 1;
  }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:623393 發(fā)表于 2020-1-3 00:36 | 只看該作者
樓主大神好,我在使用單片機(jī)控制esp8622連接另一個(gè)esp8622過(guò)程中發(fā)現(xiàn),使用單片機(jī)控制連接不上,但是通過(guò)電腦串口的AT指令能連接上。這是什么原因?是不是您所說(shuō)的不能通過(guò)51控制連接服務(wù)器,這個(gè)問(wèn)題現(xiàn)在可以解決嗎?有伸手黨嫌疑,樓主見(jiàn)諒~
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表