2015-09-18 19 views
0

我在將ESP8266與Arduino Mega連接時發生問題。它總是說「模塊沒有反應。」將ESP8266與Arduino Mega連接時出現問題。它總是說「模塊沒有反應。」

請檢查並糾正我,如果我錯了,任何地方。

我使用下面的代碼和與佈線圖是 enter image description here

我的代碼:

//#include <SoftwareSerial.h> 
    //use mega Serial 2 for serial monitor; Serial 1 on pins 19 (RX) and 18 (TX);// Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX). 
    #define SSID "SopraSteria" 
    #define PASS "1234567890" 
    #define DST_IP "220.181.111.85" //baidu.com 
    //SoftwareSerial dbgSerial(10, 11); // RX, TX 
    void setup() 
    { 
    // Open serial communications and wait for port to open: 
    //serial 2 is to esp8266 
    Serial2.begin(9600);//9600 (mine), 57600, 115200 
    Serial2.setTimeout(2000); 

    //serial 0 is to usb 
    Serial.begin(115200); 


    while(!Serial); 
    while(!Serial2); 

    //dbgSerial.begin(9600); //can't be faster than 19200 for softserial 
    //dbgSerial.println("ESP8266 Demo"); 
    Serial.println("ESP8266 Demo on Mega2560"); 

    while(Serial2.available()>0) 
    Serial2.read(); 

    delay(1000); 
     //test if the module is ready 
    Serial2.println("AT+RST"); 
    //delay(1000); 
    //delay(1000); 
    Serial.println("Resetting module"); 
    Serial2.flush(); 

    //if(Serial2.find("ready")) 
    if(Serial2.find("Ready")||Serial2.find("ready")) 
    { 
     //dbgSerial.println("Module is ready"); 
     Serial.println("Module is ready"); 
    } 
    else 
    { 
     //dbgSerial.println("Module have no response."); 
     Serial.println("Module have no response."); 
     //while(1); 
    } 
    delay(1000); 
    //connect to the wifi 
    boolean connected=false; 
    for(int i=0;i<5;i++) 
    { 
     if(connectWiFi()) 
     { 
     connected = true; 
     break; 
     } 
    } 
    if (!connected){ 
     //while(1); 
     Serial.println("Not Connected."); 
    } 
    delay(1000); 
    //print the ip addr 

    Serial2.println("AT+CIFSR"); 
    Serial.println("ip address:"); 
    while (Serial2.available()) 
    Serial.write(Serial2.read()); 


    //set the single connection mode 
    Serial2.println("AT+CIPMUX=0"); 
    } 
    void loop() 
    { 
    //connectWiFi(); 
    String cmd = "AT+CIPSTART=\"TCP\",\""; 
    cmd += DST_IP; 
    cmd += "\",80"; 
    Serial2.println(cmd); 
    Serial.println(cmd); 
    Serial.println(cmd); 
    if(Serial2.find("Error")) return; 
    cmd = "GET/HTTP/1.0\r\n\r\n"; 
    Serial2.print("AT+CIPSEND="); 
    Serial2.println(cmd.length()); 
    if(Serial2.find(">")) 
    { 
     //dbgSerial.print(">"); 
     Serial.print(">"); 
     }else 
     { 
     Serial2.println("AT+CIPCLOSE"); 
     //dbgSerial.println("connect timeout"); 
     Serial.println("connect timeout"); 
     delay(1000); 
     return; 
     } 
     Serial2.print(cmd); 
     delay(2000); 
     //Serial.find("+IPD"); 
     while (Serial2.available()) 
     { 
     char c = Serial2.read(); 
     //dbgSerial.write(c); 
     Serial.write(c); 
     //if(c=='\r') dbgSerial.print('\n'); 
     if(c=='\r') Serial.print('\n'); 
     } 
     //dbgSerial.println("===="); 
     Serial.println("===="); 
     delay(1000); 
    } 
    boolean connectWiFi() 
    { 
     Serial2.println("AT+CWMODE=1"); 
     String cmd="AT+CWJAP=\""; 
     cmd+=SSID; 
     cmd+="\",\""; 
     cmd+=PASS; 
     cmd+="\""; 
     //dbgSerial.println(cmd); 
     Serial2.println(cmd); 
     Serial.println(cmd); 
     delay(2000); 
     if(Serial2.find("OK")) 
     { 
     //dbgSerial.println("OK, Connected to WiFi."); 
     Serial.println("OK, Connected to WiFi."); 
     return true; 
     }else 
     { 
      //dbgSerial.println("Can not connect to the WiFi."); 
      Serial.println("Can not connect to the WiFi."); 
      return false; 
     } 
     } 
+0

我投票關閉這一問題作爲題外話,因爲這是關於硬件的問題,而不是軟件。 – Olaf

回答

0

從架構我所看到的,該裝置使用3V邏輯(我想是從張力分頻器) ?在這種情況下,如果你使用5V邏輯進行通信,那麼你應該在Tx和Rx上使用5v/3v緩衝器。這是我的猜測和我的建議:

總是用示波器調試通信問題。

沒有這個,你根本無法知道發生了什麼。

也使一些其他的調試。你認爲,該設備迴應ready or Ready,但嘗試打印出來,它實際上輸出的是什麼。否則,我們不可能在沒有硬件的情況下調試硬件。

也請注意,這是不適合這種問題的論壇,因爲有https://arduino.stackexchange.com/

+0

謝謝Dawid寶貴的回覆。 –

+0

翻譯:冷凝器=電容器 –

-1

對不起@DawidPi那不是完全地正確。 是的,它不適合用分壓器來做。但這不是問題。爲了解決這個問題,3.3 TX將起作用(肯定是在9600波特率 - >我已經這樣做了)

你的問題是你的Arduino板的威力。 ESP需要很多電流。你的主板不支持這個高電流。您必須爲您的ESP提供外部電源。我可以推薦一款固定電壓調節器,如LF33CV。有兩個冷凝器,它會工作:-)

像這樣的接線:enter image description here。 如果您使用LF33CV,您的UE應該在4.3到40V之間。爲了測試,我使用了我的USB端口的5V。這也將起作用。

嘗試啓動您的ESP這樣的:

#define pin_reset 2 //Connect to RST pin of ESP8266 

bool start() 
{ 
    pinMode(PinReset, OUTPUT); 
    delay(1); 
    pinMode(PinReset, INPUT); 

    delay(1000); 
    if (Serial.find("Ready")) 
    { 
    delay(1000); 
    return true; 
    } 
    else 
    { 
    return false; 
    } 
} 
+0

第一個圖案不屬於答案,它是對另一個答案的評論! – Olaf

+0

謝謝Fruchtzwerg您的好建議。你能否給我提供接線圖,你如何將它與Arduino Mega和ESP8266連接起來。 如果您可以提供測試的源代碼,那麼將非常感激。 –

+0

看看我的編輯。 – Fruchtzwerg

相關問題