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 のような定電圧レギュレーターをお勧めします。2つのコンデンサーでそれを使用すると、動作します:-)

ここのような配線: ここに画像の説明を入力. 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 に答える