2016-09-21 56 views
0

我很新使用NodeMCU ESP8266 12E模块。我在arduino-IDE上使用它。我有一个简单的草图,通过本地网络控制LED。当我在设备上运行服务器时,它工作正常。但是,大约10分钟后浏览器无法与设备进行通信,似乎服务器关闭。我试着在this video之后闪烁模块,因为我读到了我应该尝试更新固件。我闪到nodemcu_float_0.9.6-dev_20150704。问题仍然存在。nodemcu ESP8266 webserver超时

这是代码。

#include <ESP8266WiFi.h> 
const char* ssid = "mynetwork"; 
const char* password = "mypassword"; 
int ledPin = 13; 
WiFiServer server(80); 
void setup() { 
    Serial.begin(115200); 
    delay(10); 
    pinMode(ledPin, OUTPUT); 
    digitalWrite(ledPin, LOW); 
    Serial.println(); 
    Serial.println(); 
    Serial.print("Connecting to "); 
    Serial.println(ssid); 
    WiFi.begin(ssid, password); 
    while (WiFi.status() != WL_CONNECTED) { 
    delay(500); 
    Serial.print("."); 
    } 
    Serial.println(""); 
    Serial.println("WiFi connected"); 
    server.begin(); 
    Serial.println("Server started"); 
    Serial.print("Use this URL to connect: "); 
    Serial.print("http://"); 
    Serial.print(WiFi.localIP()); 
    Serial.println("/"); 
} 
void loop() { 
    WiFiClient client = server.available(); 
    if (!client) { 
    return; 
    } 
    Serial.println("new client"); 
    while(!client.available()){ 
    delay(1); 
    } 
    String request = client.readStringUntil('\r'); 
    Serial.println(request); 
    client.flush(); 
    int value = LOW; 
    if (request.indexOf("/LED=ON") != -1) { 
    digitalWrite(ledPin, HIGH); 
    value = HIGH; 
    } 
    if (request.indexOf("/LED=OFF") != -1) { 
    digitalWrite(ledPin, LOW); 
    value = LOW; 
    } 
// Return the response 
    client.println("HTTP/1.1 200 OK"); 
    client.println("Content-Type: text/html"); 
    client.println(""); // do not forget this one 
    client.println("<!DOCTYPE HTML>"); 
    client.println("<html>"); 
    client.print("Led pin is now: "); 

    if(value == HIGH) { 
    client.print("On"); 
    } else { 
    client.print("Off"); 
    } 
    client.println("<br><br>"); 
    client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>"); 
    client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />"); 
    client.println("</html>"); 

    delay(1); 
    Serial.println("Client disonnected"); 
    Serial.println(""); 
} 

为什么它突然超时或关闭?我希望服务器全天候运行,我的计划是建立一个Android应用程序,通过互联网打开/关闭风扇,灯光,水泵等。

请指教。

+0

0.9.6是旧的和越野车。使用https://nodemcu-build.com/中的固件 –

+0

感谢您的链接......选择模块的任务非常多,特别是因为我不清楚所有这些模块。 – Binaryrespawn

+0

闪烁NodeMCU固件对您没有任何好处 - 您在使用Arduino SDK时未使用固件。实际上,每当你刷新上面的代码时,它都会擦除芯片上的任何固件。 –

回答

1

您的代码仅将WiFiClient保持在范围内,持续运行最终延迟/序列打印所需的时间 - 此后,WiFiClient将被销毁,并且没有数据保证将其传送到客户端。现在,在前十分钟里,这似乎很适合你,但是,我不希望事情总是如此。

此外,您是否可以启用调试日志记录并在此处发布结果?该SDK具有设置该功能的功能Serial.setDebugOutput(true/false)。它将包含可能有所帮助的其他信息。

最后,您是否考虑过使用ESP Arduino SDK附带的ESP8266WebServer类?它已经实现了一个经过良好测试和功能的网络服务器,这似乎正是你想要的,并且可以为你自己开发节省你的挫折。

相关问题