无法连接到ESP8266:超时等待报文头

时间:2019-12-19 23:32:02

标签: arduino esp8266

我正在使用两个头文件SoftwareSerial.hESP8266WiFi.h。当我使用ESP8266WiFi.h编译和上传程序时,出现错误“无法连接到ESP8266:超时等待报文头”。我仅用ESP8266WiFi.h尝试过,但是它有相同的错误。要使用此头文件,我该怎么办?

这是我的电路和代码。

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char *ssid = "circuits4you";
const char *pass = "password"; 

unsigned int localPort = 2000; // local port to listen for UDP packets

IPAddress ServerIP(192,168,4,1);
IPAddress ClientIP(192,168,4,2);


WiFiUDP udp;

char packetBuffer[9];   //Where we get the UDP data
void setup()
{
    Serial.begin(9600);
    Serial.println();
    WiFi.softAP(ssid, pass);    //Create Access point

    Serial.println("Starting UDP");
    udp.begin(localPort);
    Serial.print("Local port: ");
    Serial.println(udp.localPort());
}
void loop()
{
    int cb = udp.parsePacket();
    if (!cb) 
    {
      if(Serial.available()>0)
        {
        udp.beginPacket(ClientIP, 2000);

        char a[1];
        a[0]=char(Serial.read()); //Serial Byte Read
        udp.write(a,1); //Send one byte to ESP8266 
        udp.endPacket();
        }
    }
    else {
      udp.read(packetBuffer, 1);
      Serial.print(packetBuffer);
      delay(20);
    }
}

enter image description here

1 个答案:

答案 0 :(得分:0)

您的代码旨在将ESP8266用作与Arduino Core一起运行的独立微控制器。我意识到您对ESP8266的运行方式感到困惑。使用ESP8266基本上有两种方法。

  • 使用ESP8266作为独立的微控制器,在这种情况下,ESP8266需要具有RTOS或Arduino Core for ESP8266之类的固件;
  • 使用ESP8266作为可与AT Command通讯的普通WiFi设备。

当前,您的代码专为在独立ESP8266上运行而设计,但我意识到您的硬件配置已配置为与ESP8266作为WiFi设备进行通信,并且ESP8266上具有AT命令固件。为了让Arduino通过AT命令与ESP8266通讯,您需要运行此Arduino草图开始使用,该草图基本上会读取您在Serial Monitor上键入的AT命令并将其发送给ESP8266,并回显从ESP8266收到的消息:

#include <SoftwareSerial.h>

SoftwareSerial espSerial(2, 3);  //RX,TX

//  Arduino pin 2 (RX) to ESP8266 TX
//  Arduino pin 3 to voltage divider then to ESP8266 RX
//  Connect GND from the Arduiono to GND on the ESP8266
//  Pull ESP8266 CH_PD HIGH

void setup() 
{ 
    Serial.begin(9600);     // for communication with the host computer
    espSerial.begin(9600);  // Soft derail for communicate with ESP8266
    // Remember to set 'Both NL & CR' in the serial monitor   
}

void loop() 
{
    // listen for data from the ESP8266 and then write it to the serial monitor
    if ( espSerial.available() ) {  
      Serial.write( espSerial.read() );  
    }

    // listen for manual input from user and send it to the ESP8266
    if ( Serial.available() ) {
      mySerial.write( Serial.read() );  
    }
}

请记住在串行监视器中设置“ NL和CR两者”

Expressif有一个不错的官方AT Command example,您可以关注其中,其中包括UDP通信。您可以通过串行监视器手动键入AT命令以逐步测试ESP8266。一切正常后,您可以编写草图以使程序中的所有AT命令自动化,以替换loop()中的代码。

如果与ESP8266的通信工作量太大并且对您来说太繁琐,您可能需要考虑通过使用Arduino Core之类的固件升级ESP8266来将ESP8266用作独立的微控制器。然后,您可以使用显示的代码。但您的硬件需要稍作更改才能将ESP8266设置为固件闪存模式,您需要将ESP8266的GPIO0接地,并在ESP8266的复位引脚和接地之间设置一个复位开关,以便您可以按一下它来放置ESP8266进入编程模式。

在这种情况下,请确保您的目标板已在Arduino IDE上设置为ESP8266。