找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 24945|回復(fù): 22
收起左側(cè)

關(guān)于51單片機(jī)與ESP8266通信問題

  [復(fù)制鏈接]
ID:105989 發(fā)表于 2016-3-6 13:14 | 顯示全部樓層 |閱讀模式
利用RXD,TXD與單片機(jī)(STC89C52RC)通信,本來是一件簡單的事情。。。。但是在調(diào)試的過程中卻出現(xiàn)了很多問題。。。。
首先我采用小黃板自帶的3.3V電壓供電。。。但在論壇里面說開發(fā)板引出的電壓不穩(wěn)定無法使ESP8266正常工作。。于是換成了aduino的3.3V以及2節(jié)1.5V的干電池供電,發(fā)現(xiàn)原來的預(yù)先設(shè)置的wifi名稱"bibibibibi"顯示了出來,但是不是程序里的"TEST",于是我想著會不會是波特率有問題,然后我利用AT指令A(yù)T+UART_DEF=9600,8,1,0,3想改變波特率(原先的波特率應(yīng)該是115200),返回的不是ERROR就是空白。。。。我查詢了模塊的AT+GMR

AT version:0.21.0.0
SDK version:0.9.5

OK                               網(wǎng)上看到可能是AT版本太舊,換用AT+CIOBAUD=9600,雖然沒有顯示OK,但是115200波特率卻不能正常通信了,9600波特率可以正常通信,于是我默認(rèn)波特率修改成功。然后給單片機(jī)上電,結(jié)果紅燈亮著,原先的wifi信號都沒了,有時(shí)候甚至是紅藍(lán)燈常亮。。。。。。ESP8266還發(fā)熱。。。。。當(dāng)時(shí)就懵逼了。。。。然后重新通過小黃板想刷一下固件。。。。發(fā)現(xiàn)小黃板好像也出了問題(據(jù)說CH_PD會影響到VCC。。。之前用的小黃板供電)。。。。。檢測串口信號的時(shí)候瘋狂輸出亂碼。。。。本人是學(xué)生新手不知道是51程序(部分沒讀懂)出了問題還是什么地方出了問題,過幾天就要交項(xiàng)目了,希望論壇里的大神能給我一些意見。。。。本人也沒有3.3V


在網(wǎng)上參考的程序資料:
一、關(guān)于51單片機(jī)和無線WIFI模塊的接線方面
RXD、TXD、GND和51單片機(jī)的TXD、RXD、GND接好,模塊其他引腳均為高電平,電源VCC是3.3V左右(兩節(jié)1.5v干電池),本人由于沒有穩(wěn)壓模塊,偷懶了當(dāng)時(shí)使用5V的直流源,測試結(jié)果目前沒有問題(不過不建議啊!)
二、關(guān)于安卓手機(jī)方面
       測試時(shí)可以使用,網(wǎng)絡(luò)調(diào)試助手(下載這個(gè)app安裝在手機(jī)即可)發(fā)送數(shù)字1表示小燈亮,0表示燈滅。后續(xù)想深入的話可以自己開發(fā)安卓app軟件。
三、參數(shù)設(shè)置
     由于參數(shù)的設(shè)置方法和步奏網(wǎng)上資料很全,這里提供相關(guān)的網(wǎng)址自行參考。

Uart-WiFi模塊ESP8266把玩記http://www.torrancerestoration.com/bbs/dpj-30277-1.html
物聯(lián)網(wǎng)wifi模塊工作的STA和AP模式詳細(xì)介紹http://www.torrancerestoration.com/bbs/dpj-50422-1.html
四、資料可能存在不足之處,僅作參考!
/*********************************************************************
題目:基于STC12C560S2 單片機(jī)無線WIFI模塊控制
內(nèi)容:通過MCU上位機(jī)對ESP8266wifi模塊的控制和設(shè)置,實(shí)現(xiàn)手機(jī)端控制LED燈
      的亮滅。
注意:該型號單片機(jī)是普通89C51單片執(zhí)行速度的12倍,內(nèi)含RAM1280字節(jié),ROM為60K,PCA 計(jì)數(shù)器,PWM發(fā)生模塊,ADC轉(zhuǎn)換模塊等,晶振一定是11.0592MHz。
********************************************************************/
#include <reg52.h>                       //包含頭文件
#define uint unsigned int
#define uchar unsigned char
#define RELOAD_COUNT 0xFA         //宏定義波特率發(fā)生器的載入值
//define RELOAD_COUNT (256-(((11520000/16)/12)/9600)) 也可以或波特率9600 //256-晶振頻率/波特率x16=BRT
/*****************LED燈對應(yīng)P0口的1個(gè)端口*************/
sbit LED0=P3^2;
/************波特率發(fā)生器相關(guān)功能寄存器的定義****************/
sfr AUXR=0x8E;
sfr BRT=0x9C;
sfr AUXR1=0xA2;
/*****************相關(guān)變量**************/
uchar Receive,i;                             
uint n;
uchar Recive_table[15];        //用于接收wifi模塊反饋到MCU上的數(shù)據(jù)
/*******************************************************************
名稱:延時(shí)函數(shù)
作用:毫秒級延時(shí),微妙級延時(shí)函數(shù),為數(shù)據(jù)收發(fā)完成作等待.......
********************************************************************/
void ms_delay(uint t)
{
      uint i,j;
      for(i=t;i>0;i--)
       for(j=110;j>0;j--);
}

void us_delay(uchar t)
{
      while(t--);
}



/********************************************************************
名稱:波特率發(fā)生器函數(shù)
作用:波特率發(fā)生器可以是T1定時(shí)器實(shí)現(xiàn),也可以是MCU內(nèi)部獨(dú)立的波特率發(fā)生器,
各自不同的載入值計(jì)算式,具體根據(jù)寄存器相關(guān)設(shè)置來參考計(jì)算,以實(shí)現(xiàn)
異步串行通訊。(經(jīng)測試,兩種設(shè)置方式均可用,可任選一種。)
********************************************************************/
void Uart_Init()//使用定時(shí)器1作為波特率發(fā)生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)
{
      SCON=0x50;     //設(shè)置為串行口以方式1工作,8位異步通訊,允許接收中斷。
      //一幀信息為10位,1位起始位,8位數(shù)據(jù)位(低位在先),1位停止位。
      PCON=0x80;     //SMOD波特率選擇位為1,SMOD=1.
      TMOD=0x21;    //設(shè)置定時(shí)器1為波特率發(fā)生器,工作在模式2,8位自動裝載
      TH1=RELOAD_COUNT;//波特率9600 ,TH1=256-FOSC/16/12/波特率
      TL1=TH1;
      EA=1;                            //總中斷打開
      ES=0;                             //關(guān)閉串口中斷
      TR1=1;                     //啟動定時(shí)器1
}
/*
void Uart_Init()//使用獨(dú)立的波特率發(fā)生器(STC12C560S2或帶有獨(dú)立波特率發(fā)生器//、//的單片機(jī)均可)
{
      SCON=0x50;     //設(shè)置為串行口以方式1工作,8位異步通訊,允許接收中斷。
      PCON=0x80;     //SMOD波特率選擇位為1,SMOD=1.
      BRT=RELOAD_COUNT;//波特率9600 256-晶振頻率/波特率x16=BRT
      AUXR=0xD5;     //T0、T1不12分頻,速度是89C51的12倍,啟動獨(dú)立波特率//發(fā)生器,每個(gè)時(shí)鐘計(jì)數(shù)一次
//設(shè)置串口1的波特率發(fā)生器為獨(dú)立波特率發(fā)生器,
      AUXR1=0x80;    //切換到P1口
      ES=1;         //開啟串口中斷
      EA=1;         //開啟總中斷
}
*/



/********************************************************************
名稱:串口發(fā)送函數(shù)
功能:MCU向其他與其連接的設(shè)備發(fā)送數(shù)據(jù)(此處是無線WIFI模塊ESP8266)
********************************************************************/
void Send_Uart(uchar value)
{
      ES=0;         //關(guān)閉串口中斷
      TI=0;         //清發(fā)送完畢中斷請求標(biāo)志位
      SBUF=value;     //發(fā)送
      while(TI==0);    //等待發(fā)送完畢
      TI=0;         //清發(fā)送完畢中斷請求標(biāo)志位
      ES=1;         //允許串口中斷
}
/********************************************************************
名稱:WIFI模塊設(shè)置函數(shù)
作用: 啟動模塊,以便可以實(shí)現(xiàn)無線接入和控制
********************************************************************/
void ESP8266_Set(uchar *puf) // 數(shù)組指針*puf指向字符串?dāng)?shù)組               
{

      while(*puf!='\0')    //遇到空格跳出循環(huán)
      {
           Send_Uart(*puf);  //向WIFI模塊發(fā)送控制指令。
           us_delay(5);
           puf++;      
      }
      us_delay(5);
      Send_Uart('\r');//回車
      us_delay(5);
      Send_Uart('\n');   //換行
      ms_delay(1000);
}   
/****************************************************
名稱:ESP8266發(fā)送數(shù)據(jù)函數(shù)
功能:用于與wifi模塊相連的終端發(fā)送數(shù)據(jù)
*****************************************************/
void ESP8266_Sent(uchar *puf)       // 數(shù)組指針*puf指向字符串?dāng)?shù)組               
{
      ESP8266_Set("AT+CIPSEND=0,4");
      while(*puf!='\0')    //遇到空格跳出循環(huán)
      {
           Send_Uart(*puf);   //向WIFI模塊發(fā)送控制指令。
           us_delay(5);
           puf++;      
      }
      us_delay(5);
      Send_Uart('\n');   //換行
      ms_delay(10);
}   

/********************************************************************
名稱:主函數(shù)
作用:程序的執(zhí)行入口
********************************************************************/
void main()
{
      LED0=0;//關(guān)閉LED燈
      Uart_Init();//使用獨(dú)立的波特率發(fā)生器
ESP8266_Set("AT+CWMODE=2"); //設(shè)置路由器模式 1 station模式 2 AP
//點(diǎn) 路由器模式 3 station+AP混合模式
      ESP8266_Set("AT+RST");     //重新啟動wifi模塊
          ESP8266_Set("AT+CWSAP=\"WIFI\",\"1234567890\",11,4");
//設(shè)置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK)
ESP8266_Set("AT+CIPMUX=1");//開啟多連接模式,允許多個(gè)各客戶端接入
ESP8266_Set("AT+CIPSERVER=1,5000");  //啟動TCP/IP 端口為8080 實(shí)現(xiàn)基于網(wǎng)絡(luò)//控制
      ES=1;                                                           //允許串口中斷
      while(1)
      {         
if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的數(shù)據(jù)為+IPD時(shí)進(jìn)入判斷控制0\1來使小燈亮與滅
            {
                if((Recive_table[3]=='D')&&(Recive_table[6]==','))
                     {   
                      if(Recive_table[9]=='0')
                            {
                                  LED0=0;//0 燈滅               
ESP8266_Sent("燈滅");
//wifi模塊向pc端或手機(jī)端 發(fā)送"燈滅
}

                           else if (Recive_table[9]=='1')
                            {                                
                                  LED0=1;     //1 燈亮
                                 ESP8266_Sent("燈亮");     
//wifi模塊向pc端或手機(jī)端 發(fā)送"燈亮"            
                 }
           }   
        }      
}         
}

/*********************************************************************
名稱:串行通訊中斷
作用:發(fā)送或接收結(jié)束后進(jìn)入該函數(shù),對相應(yīng)的標(biāo)志位軟件清0,實(shí)現(xiàn)模塊對數(shù)
         據(jù)正常的收發(fā)。
********************************************************************/
void Uart_Interrupt() interrupt 4        
{
  static uchari=0;
      if(RI==1)
      {
           RI=0;
           Receive=SBUF;        //MCU接收wifi模塊反饋回來的數(shù)據(jù)
           Recive_table[ i]=Receive;      
           i++;         
           if((Recive_table[i-1]=='\n'))i=0;  //遇到換行 重新裝值
}
      else TI=0;        
}

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:117512 發(fā)表于 2016-5-9 16:21 | 顯示全部樓層
ESP8266的WiFi名稱并沒有更改,也就是說模塊沒有接收到單片機(jī)發(fā)來的AT指令,這是為什么?

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:121077 發(fā)表于 2016-5-15 23:21 | 顯示全部樓層
發(fā)送AT+RST可以返回OK,但發(fā)送其他指令就是空白,使什么原因

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:121039 發(fā)表于 2016-5-15 23:46 | 顯示全部樓層
坐等大神
回復(fù)

使用道具 舉報(bào)

ID:157958 發(fā)表于 2016-12-27 10:24 | 顯示全部樓層
樓主有解決問題嗎,我遇到和你一樣的問題
回復(fù)

使用道具 舉報(bào)

ID:158346 發(fā)表于 2016-12-28 15:30 | 顯示全部樓層
你得先確定8266的AT是否工作正常,先直接接電腦串口上面測試修改WIFI賬號,密碼,連接看看,如果能成功,再和單片機(jī)通訊測試,因?yàn)槭袌錾厦嬗泻枚鄠(gè)版本的板子,都是基于8266的,而且每個(gè)的AT固件都不太一樣,有點(diǎn)版本很低,有的公司重新打包了自己的東西,有的還改了AT指令集,所以,建議你先弄清楚板子型號,最好下載板子官方的AT文檔,現(xiàn)在電腦串口調(diào)試通過了,再接到單片機(jī)調(diào)試
回復(fù)

使用道具 舉報(bào)

ID:158950 發(fā)表于 2017-1-5 18:56 | 顯示全部樓層
同樣的問題  電腦上串口都沒有問題  上板子就不行
回復(fù)

使用道具 舉報(bào)

ID:113573 發(fā)表于 2017-4-13 20:14 來自觸屏版 | 顯示全部樓層
我也是在電腦上串口沒問題,接單片機(jī)上就不行了
回復(fù)

使用道具 舉報(bào)

ID:188623 發(fā)表于 2017-5-15 08:24 | 顯示全部樓層
15200909684 發(fā)表于 2017-4-13 20:14
我也是在電腦上串口沒問題,接單片機(jī)上就不行了

恩恩,我的也是,各種調(diào)試都沒有問題,但是和單片機(jī)接在一起就不能用,出現(xiàn)亂碼,你的解決了嗎?
回復(fù)

使用道具 舉報(bào)

ID:186936 發(fā)表于 2017-5-16 21:58 | 顯示全部樓層
666,不錯
回復(fù)

使用道具 舉報(bào)

ID:173860 發(fā)表于 2017-6-19 09:18 | 顯示全部樓層
回帖感謝,已成功測試。
回復(fù)

使用道具 舉報(bào)

ID:222463 發(fā)表于 2017-7-27 16:02 | 顯示全部樓層
你好,我把你的程序燒錄到STC52單片機(jī)后,52單片機(jī)沒有與wifi模塊(ESP8266)進(jìn)行串口通信,即沒有做設(shè)置wifi的工作模式,密碼等一系列工作,大神能不能幫我分析一下呢
回復(fù)

使用道具 舉報(bào)

ID:219204 發(fā)表于 2017-8-2 14:59 | 顯示全部樓層
串口調(diào)試沒問題用單片機(jī)就不行了這是為什么
回復(fù)

使用道具 舉報(bào)

ID:185907 發(fā)表于 2017-8-6 14:29 | 顯示全部樓層
樓主 請教個(gè)問題  我在115200的情況下能發(fā)射wifi  但是不能接收信息    在9600的情況下能接收信息,但是不能發(fā)射出wifi  請問什么破  QQ767621566 方便的話 能發(fā)資料或程序過來  我對照一下嗎  謝謝
回復(fù)

使用道具 舉報(bào)

ID:225258 發(fā)表于 2017-8-6 19:36 | 顯示全部樓層
感謝! 已測試成功!
回復(fù)

使用道具 舉報(bào)

ID:275764 發(fā)表于 2018-1-23 18:03 | 顯示全部樓層
小小de手心 發(fā)表于 2017-8-6 14:29
樓主 請教個(gè)問題  我在115200的情況下能發(fā)射wifi  但是不能接收信息    在9600的情況下能接收信息,但是不 ...

你的波特率設(shè)置的一樣嗎
回復(fù)

使用道具 舉報(bào)

ID:275764 發(fā)表于 2018-1-23 18:04 | 顯示全部樓層
初學(xué)者111 發(fā)表于 2016-5-15 23:21
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

不一定不行,可能模塊不一樣
回復(fù)

使用道具 舉報(bào)

ID:247350 發(fā)表于 2018-3-20 15:41 | 顯示全部樓層
jzyuan 發(fā)表于 2017-7-27 16:02
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

遇到了同樣的問題
大佬調(diào)好了嗎?
跪求
回復(fù)

使用道具 舉報(bào)

ID:259701 發(fā)表于 2018-6-6 10:12 | 顯示全部樓層
遇到同樣問題 ,串口助手調(diào)試一切都好,和單片機(jī)連起來就不行了
回復(fù)

使用道具 舉報(bào)

ID:303383 發(fā)表于 2018-6-6 11:09 | 顯示全部樓層
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復(fù)

使用道具 舉報(bào)

ID:504142 發(fā)表于 2019-5-15 19:06 | 顯示全部樓層
你好,我想請問下(急),我的單片機(jī)與ESP8266連接后,手機(jī)網(wǎng)絡(luò)調(diào)試助手發(fā)送信息過去,界面顯示發(fā)送成功,但沒有接收到,所以單片機(jī)無法做出相應(yīng)指令,這是什么原因啊
回復(fù)

使用道具 舉報(bào)

ID:504142 發(fā)表于 2019-5-15 19:07 | 顯示全部樓層
1657813591 發(fā)表于 2018-6-6 10:12
遇到同樣問題 ,串口助手調(diào)試一切都好,和單片機(jī)連起來就不行了

我也是,請問下,你解決這個(gè)問題了嗎
回復(fù)

使用道具 舉報(bào)

ID:130230 發(fā)表于 2020-1-8 13:46 | 顯示全部樓層
AT命令需要發(fā)送回車+空格
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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