各位大家好。我正在开展一个项目,我需要每秒向我的ESP8266发送大约60个TCP套接字,以便实时更改灯泡强度"#34;。套接字非常小,比如5个字节。
服务器设备: NodeMCU 1.0(ESP-12E模块)
客户端设备: Linux 16.04 PC 使用Node.js
发送数据- NodeMCU板正在运行最后一个Arduino固件:https://github.com/esp8266/Arduino
当我每秒发送大量TCP数据包时,ESP8266 wifi最终会停止工作。 cpu继续工作,但它不会回复任何ping或TCP请求。
我创建了一个非常小的程序来测试这个bug,这里是wireshark output。
( 192.168.1.11 ) - > ESP8266
( 192.168.1.101 ) - > Linux PC
如您所见,有一段时间ESP8266停止发送ACK。有时它会在几秒钟后恢复,有时它不会。
以下是我在ESP8266中使用的代码:
#include <ESP8266WiFi.h>
#define TCP_PORT 17717
#define PIN_LED 2
#define MAX_INTENSITY 255
#define MAX_PWM_FREQ 1023
WiFiServer server(TCP_PORT);
WiFiClient socket;
const char * ssid = "MyWifi";
const char * password = "MyPass";
void setLed(byte intensity) {
analogWrite(PIN_LED, (int)(intensity/(float)MAX_INTENSITY * MAX_PWM_FREQ));
}
void setup() {
Serial.begin(115200);
pinMode(PIN_LED, OUTPUT);
setLed(0);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.print("Ready! IP = ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
if (server.hasClient()) {
socket = server.available();
while (socket.connected()) {
if (socket.available()) {
setLed(socket.read());
}
}
}
}
知道这里发生了什么事吗?
答案 0 :(得分:0)
可能是因为 Ethernet.h 文件中定义的 MAX_SOCK_NUM 4 。因此,我们无法连接超过4个TCP连接,这些连接受到ESP8266中TCP / IP堆栈的小内存大小的限制,如果我们超过固定数量,则主板崩溃。