Node mcu (1.0) ESP8266 12E 在软AP模式下IDLE时间后没有响应
Node mcu (1.0) ESP8266 12E doesn't respond after IDLE time in soft AP mode
我正在尝试将节点 mcu 设置为具有静态 IP 的接入点。我能够使用 tcp 套接字连接到 AP 并从中接收响应。
但是,如果客户端在一定时间内未连接到它,节点 MCU 根本不会响应。
假设如果 1 小时作为空闲时间过去,则节点 mcu 允许客户端连接到 AP,但它不响应查询。
这是我的代码。
#include <ESP8266WiFi.h>
WiFiServer server(8080);
IPAddress IP(192,168,4,15);
IPAddress mask = (255, 255, 255, 0);
//byte ledPin = 16;
byte ledPin = 2;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_AP);
WiFi.softAP("PRAKASH", "1234567890");
WiFi.softAPConfig(IP, IP, mask);
server.begin();
pinMode(ledPin, OUTPUT);
Serial.println();
Serial.println("Server started.");
Serial.print("IP: "); Serial.println(WiFi.softAPIP());
Serial.print("MAC:"); Serial.println(WiFi.softAPmacAddress());
}
void loop(void) {
WiFiClient client = server.available();
if (client) {
Serial.println("Client connected.");
while (client.connected()) {
if (client.available()) {
String request = client.readStringUntil('\r');
Serial.println("____NEW_COMMAND_____");
if (request == "LED_ON") {
digitalWrite(ledPin, LOW);
Serial.println("LED is now on.");
} else if (request == "LED_OFF") {
digitalWrite(ledPin, HIGH);
Serial.println("LED is now off.");
} else {
Serial.println("Invalid command:");
Serial.println(request);
}
Serial.println("From the station: " + request);
client.flush();
Serial.print("Byte sent to the station: ");
Serial.println(client.println(request + "ca" + "\r"));
Serial.println("*____COMMAND_COMPLETED____*");
}
}
Serial.println("Client disconnected.");
client.stop();
}
}
我正在使用 Arduino ide 刷写代码。
Arduino版本:1.8.10
开发板:Node Mcu 1.0 12E
上传速度:115200
CPU 频率:80Mhz
(董事会经理) Esp8266 : 2.6.2
只是在空闲期后总结节点 mcu 让我使用 tcp 套接字连接但它不会打开 off/on LED 并且它不会发送任何响应。如果我重置节点 mcu 然后它再次工作。
我不明白为什么会这样。感谢任何帮助。
我想通了这里的问题。
当我没有正确终止 tcp 套接字连接时,节点 mcu 处于失效连接状态。它会显示客户端仍然连接。
我使用 phone wifi 测试了 AP 连接。如果我直接关闭 phone wifi 而没有调用显式断开连接,那么我就会遇到这个问题。
为了解决这个问题,我添加了一个检查,如果连接站的数量为零,然后断开客户端。
这解决了我的问题。
感谢 juraj 提供调试提示。
我正在尝试将节点 mcu 设置为具有静态 IP 的接入点。我能够使用 tcp 套接字连接到 AP 并从中接收响应。
但是,如果客户端在一定时间内未连接到它,节点 MCU 根本不会响应。
假设如果 1 小时作为空闲时间过去,则节点 mcu 允许客户端连接到 AP,但它不响应查询。
这是我的代码。
#include <ESP8266WiFi.h>
WiFiServer server(8080);
IPAddress IP(192,168,4,15);
IPAddress mask = (255, 255, 255, 0);
//byte ledPin = 16;
byte ledPin = 2;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_AP);
WiFi.softAP("PRAKASH", "1234567890");
WiFi.softAPConfig(IP, IP, mask);
server.begin();
pinMode(ledPin, OUTPUT);
Serial.println();
Serial.println("Server started.");
Serial.print("IP: "); Serial.println(WiFi.softAPIP());
Serial.print("MAC:"); Serial.println(WiFi.softAPmacAddress());
}
void loop(void) {
WiFiClient client = server.available();
if (client) {
Serial.println("Client connected.");
while (client.connected()) {
if (client.available()) {
String request = client.readStringUntil('\r');
Serial.println("____NEW_COMMAND_____");
if (request == "LED_ON") {
digitalWrite(ledPin, LOW);
Serial.println("LED is now on.");
} else if (request == "LED_OFF") {
digitalWrite(ledPin, HIGH);
Serial.println("LED is now off.");
} else {
Serial.println("Invalid command:");
Serial.println(request);
}
Serial.println("From the station: " + request);
client.flush();
Serial.print("Byte sent to the station: ");
Serial.println(client.println(request + "ca" + "\r"));
Serial.println("*____COMMAND_COMPLETED____*");
}
}
Serial.println("Client disconnected.");
client.stop();
}
}
我正在使用 Arduino ide 刷写代码。
Arduino版本:1.8.10 开发板:Node Mcu 1.0 12E 上传速度:115200 CPU 频率:80Mhz (董事会经理) Esp8266 : 2.6.2
只是在空闲期后总结节点 mcu 让我使用 tcp 套接字连接但它不会打开 off/on LED 并且它不会发送任何响应。如果我重置节点 mcu 然后它再次工作。
我不明白为什么会这样。感谢任何帮助。
我想通了这里的问题。
当我没有正确终止 tcp 套接字连接时,节点 mcu 处于失效连接状态。它会显示客户端仍然连接。
我使用 phone wifi 测试了 AP 连接。如果我直接关闭 phone wifi 而没有调用显式断开连接,那么我就会遇到这个问题。
为了解决这个问题,我添加了一个检查,如果连接站的数量为零,然后断开客户端。
这解决了我的问题。
感谢 juraj 提供调试提示。