首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ESP8266 TCP停止在“大”流量上工作

ESP8266 TCP停止在“大”流量上工作
EN

Stack Overflow用户
提问于 2017-07-22 17:59:54
回答 1查看 1.5K关注 0票数 1

上下文

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

硬件

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

客户端设备:Linux16.04PC用Node.js发送数据

-The NodeMCU板正在运行最后一个Arduino固件:https://github.com/esp8266/Arduino

问题所在

当我每秒钟发送大量的TCP数据包时,ESP8266 wifi最终停止工作。cpu继续工作,但不会回复任何ping或TCP请求。

我创建了一个非常小的程序来测试这个bug,这里是wireshark输出

(192.168.1.11) -> ESP8266

(192.168.1.101) -> Linux PC

如您所见,有一段时间ESP8266停止发送ACK。有时它会在几秒钟后恢复,有时则不会。

下面是我在ESP8266中使用的代码:

代码语言:javascript
复制
#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());
            }
        }
    }
}

知道这是怎么回事吗?

EN

回答 1

Stack Overflow用户

发布于 2018-03-17 14:48:18

这可能是因为MAX_SOCK_NUM是在Ethernet.h文件中定义的4。因此,我们不能连接超过4个TCP连接,这受到ESP8266中TCP/IP堆栈的小内存大小的限制,如果超过固定的数目,板就会崩溃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45257634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档