久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 25050|回復: 22
收起左側

關于51單片機與ESP8266通信問題

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

AT version:0.21.0.0
SDK version:0.9.5

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


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

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



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



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

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

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

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

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

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

恩恩,我的也是,各種調試都沒有問題,但是和單片機接在一起就不能用,出現亂碼,你的解決了嗎?
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

你的波特率設置的一樣嗎
回復

使用道具 舉報

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

不一定不行,可能模塊不一樣
回復

使用道具 舉報

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

遇到了同樣的問題
大佬調好了嗎?
跪求
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

我也是,請問下,你解決這個問題了嗎
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人操日日干 | 国产一区二区观看 | 国产精品免费看 | 久久婷婷av | 亚洲一区二区在线电影 | 天天操天天舔 | 欧美 日韩 国产 在线 | 国产在线精品一区二区三区 | 国产精品一区二区三区在线 | 久久综合一区二区 | 每日在线更新av | 免费一级黄色电影 | 毛片在线看片 | 日日夜夜天天 | 亚洲永久精品国产 | 97久久超碰 | 国产成人av电影 | 日韩一区二区在线看 | 人人干人人玩 | 操视频网站 | 国产一级黄色网 | 四虎影院新网址 | 久久久久久久综合 | 中文字幕国产第一页 | 日韩精品视频一区二区三区 | 99精品视频在线 | 精品网| 久久毛片网站 | 一级片免费视频 | 午夜精品一区二区三区在线视 | k8久久久一区二区三区 | 五十女人一级毛片 | 久久成人午夜 | 午夜天堂精品久久久久 | 免费在线观看91 | 亚洲成人免费视频在线 | 伊人精品国产 | 91伊人网| 伊人网99| 在线天堂免费中文字幕视频 | 羞羞的视频在线看 |