如何用ESP8266修复Arduino中的超时?

时间:2015-12-10 07:20:05

标签: arduino timeout esp8266

我正在与Arduino Uno和ESP8266合作。

我将ESP8266连接到Arduino Uno, 并下载了ESP8266库(https://github.com/Diaoul/arduino-ESP8266)..

' joinAP'没事,连接'也没关系。

但问题是http请求。

" getStatus(wifi.send(" GET / HTTP / 1.0 \ r \ n \ r \ n \ n"))"在设置代码中始终显示我' TIMEOUT'。

以下是我的代码。

请保存我的代码..

#include <SoftwareSerial.h>
#include "ESP8266.h"

#define SSID "SSID"
#define PASS "PASS"
#define DST_IP "www.google.com"

SoftwareSerial esp8266Serial = SoftwareSerial(2, 3);
ESP8266 wifi = ESP8266(esp8266Serial);

void setup()
{
Serial.begin(9600);

// ESP8266
esp8266Serial.begin(9600);
wifi.begin();
wifi.setTimeout(10);

/****************************************/
/******       Basic commands       ******/
/****************************************/
// test
Serial.print("test: ");
Serial.println(getStatus(wifi.test()));

// restart
Serial.print("restart: ");
Serial.println(getStatus(wifi.restart()));

// getVersion
char version[16] = {};
Serial.print("getVersion: ");
Serial.print(getStatus(wifi.getVersion(version, 16)));
Serial.print(" : ");
Serial.println(version);


// getWifiMode
///*
ESP8266WifiMode mode;
Serial.print("getWifiMode: ");
Serial.println(getStatus(wifi.getMode(&mode)));//*/
Serial.print("Wifi mode>>:"); 
Serial.println(mode);
if( mode != ESP8266_WIFI_STATION)
{
// setWifiMode
Serial.print("setWifiMode: ");
// Serial.println(getStatus(wifi.setMode(ESP8266_WIFI_ACCESSPOINT)));
Serial.println(getStatus(wifi.setMode(ESP8266_WIFI_STATION )));
}
else
Serial.println("already ESP8266_WIFI_STATION mode");

/****************************************/
/******        WiFi commands       ******/
/****************************************/
// joinAP
Serial.print("joinAP: ");
Serial.println(getStatus(wifi.joinAP(SSID, PASS)));


/****************************************/
/******       TCP/IP commands      ******/
/****************************************/
// connect
Serial.print("connect: ");
Serial.println(getStatus(wifi.connect(ESP8266_PROTOCOL_TCP, DST_IP, 80)));

// send
Serial.print("send: ");
Serial.println(getStatus(wifi.send("GET / HTTP/1.0\r\n\r\n")));

}

void loop()
{
/****************************************/
/******        WiFi commands       ******/
/****************************************/

// read data
unsigned int id;
int length;
int totalRead;
char buffer[300] = {};

if ((length = wifi.available()) > 0) {
  id = wifi.getId();
  totalRead = wifi.read(buffer, 300);

  if (length > 0) {
    Serial.print("Received ");
    Serial.print(totalRead);
    Serial.print("/");
    Serial.print(length);
    Serial.print(" bytes from client ");
    //Serial.print("from client ");
    Serial.print(id);
    Serial.print(": ");
    Serial.println((char*)buffer);
  }
  }
 }

String getStatus(bool status)
{
if (status)
    return "OK";

return "KO";
}

String getStatus(ESP8266CommandStatus status)
{
switch (status) {
case ESP8266_COMMAND_INVALID:
    return "INVALID";
    break;

case ESP8266_COMMAND_TIMEOUT:
    return "TIMEOUT";
    break;

case ESP8266_COMMAND_OK:
    return "OK";
    break;

case ESP8266_COMMAND_NO_CHANGE:
    return "NO CHANGE";
    break;

case ESP8266_COMMAND_ERROR:
    return "ERROR";
    break;

case ESP8266_COMMAND_NO_LINK:
    return "NO LINK";
    break;

case ESP8266_COMMAND_TOO_LONG:
    return "TOO LONG";
    break;

case ESP8266_COMMAND_FAIL:
    return "FAIL";
    break;

default:
    return "UNKNOWN COMMAND STATUS";
    break;
}
}

String getRole(ESP8266Role role)
{
switch (role) {
case ESP8266_ROLE_CLIENT:
    return "CLIENT";
    break;

case ESP8266_ROLE_SERVER:
    return "SERVER";
    break;

default:
    return "UNKNOWN ROLE";
    break;
}
}

String getProtocol(ESP8266Protocol protocol)
{
switch (protocol) {
case ESP8266_PROTOCOL_TCP:
    return "TCP";
    break;

case ESP8266_PROTOCOL_UDP:
    return "UDP";
    break;

default:
    return "UNKNOWN PROTOCOL";
    break;
}
}

0 个答案:

没有答案