首页 文章

ESP8266 TCP停止处理“繁重”流量

提问于
浏览
1

上下文

大家好 . 我正在开发一个项目,我需要每秒向我的ESP8266发送大约60个TCP套接字,以便“实时”更改灯泡强度 . 套接字非常小,就像5个字节一样 .

硬件

服务器设备:NodeMCU 1.0(ESP-12E模块)

客户端设备:Linux 16.04 PC使用Node.js发送数据

问题

当我每秒发送大量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());
            }
        }
    }
}

知道这里发生了什么吗?

1 回答

  • 0

    这可能是因为 MAX_SOCK_NUMEthernet.h 文件中定义了 4 . 因此,我们无法连接超过4个TCP连接,这些连接受到ESP8266中TCP / IP堆栈的小内存大小的限制,如果我们超过固定数量,则主板崩溃 .

相关问题