0

将 ESP8266 与 Arduino Mega 连接时遇到问题。它总是说“模块没有响应”。

如果我在任何地方错了,请检查并纠正我。

我正在使用下面的代码,接线图是 在此处输入图像描述

我的代码:

//#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;
         }
       }
4

2 回答 2

0

从我可以看到的架构中,该设备使用 3V 逻辑(我猜它来自张力分配器)?在这种情况下,如果您使用 5V 逻辑进行通信,那么您应该在 Tx 和 Rx 上使用 5v/3v 缓冲器。这是我的猜测和建议:

始终使用示波器调试通信问题。

没有这个,你根本无法知道发生了什么。

还要进行一些其他的调试。您假设该设备以 响应ready or Ready,但尝试将其打印出来,它实际上在输出中给出了什么。否则我们不可能在没有您的硬件的情况下调试您的硬件。

另请注意,这不是此类问题的适当论坛,因为有https://arduino.stackexchange.com/

于 2015-09-18T09:12:03.717 回答
-1

抱歉@DawidPi 那不完全正确。是的,用分压器来做这件事并不是最理想的。但这不是问题。为了解决 3.3 TX 的问题(肯定是 9600 波特 --> 我已经这样做了)

你的问题是你的 Arduino 板的力量。ESP 需要很大的电流。您的电路板不支持这种高电流。您必须通过外部电源来提供您的 ESP。我可以推荐一个固定电压调节器,如 LF33CV。Youse它有两个冷凝器,它会工作:-)

像这里的接线:在此处输入图像描述。如果您使用 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;
  }
}
于 2015-09-18T13:28:13.413 回答