断开与SoftAP的连接

时间:2018-08-05 00:33:41

标签: esp8266 arduino-esp8266

我对ESP8266-Arduino的SoftAP有问题。

如果ACCESS_POINT为false,则一切正常。 但是,如果ACCESS_POINT为true:则可以。但是几秒钟的数据传输后,AP消失了。重新连接的唯一方法是重启ESP8266。

我需要使用AP模式才能在智能手机上使用手机。

我已经清除了ESP8266的完整内存。但这无济于事...

#define PIN_NEOPIXEL 2
#define PIN_LED_SWITCH 0

#define NUMPIXELS 60

#define ACCESS_POINT true

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);

ESP8266WebServer server(80);
WebSocketsServer webSocket(81);

void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght) {
    switch (type) {
        case WStype_BIN:
            //Serial.printf("[%u] get Text: %s  %u\n", num, payload, lenght);
            if (payload[0] == '#') {
                if(lenght == 1 + NUMPIXELS * 3) {
                    for(int i=0;i<NUMPIXELS;i++){
                        int r = payload[1 + i * 3];
                        int g = payload[1 + i * 3 + 1];
                        int b = payload[1 + i * 3 + 2];

                        pixels.setPixelColor(i, pixels.Color(r,g,b));
                    }

                    pixels.show();
                }
            }
            if (payload[0] == '!') { //LED ein/aus
                if (payload[1] == '1') {
                    digitalWrite(PIN_LED_SWITCH, false);
                    pinMode(PIN_LED_SWITCH, OUTPUT);
                } else {
                    pinMode(PIN_LED_SWITCH, INPUT_PULLUP);
                }
            }
            break;
    }
}


void setup() {
    pixels.begin();

    Serial.begin(115200);

    WiFi.mode(WIFI_OFF);
    if(!ACCESS_POINT) {
        WiFi.mode(WIFI_STA);
        WiFi.begin("SSID", "...key...");

        while (WiFi.status() != WL_CONNECTED) {
            delay(1000);
        }

        Serial.print("IP address:\t");
        Serial.println(WiFi.localIP());
    } else {
        WiFi.mode(WIFI_AP);
        IPAddress apIP(192, 168, 4, 1);
        IPAddress netMsk(255, 255, 255, 0);
        WiFi.softAPConfig(apIP, apIP, netMsk);
        WiFi.softAP("Pixelstick");
        while (WiFi.softAPgetStationNum() < 1) {
            delay(1000);
        }
    }


    server.on("/", []() {
        server.send(200, "text/html", INDEX_HTML);
    });
    server.begin();

    webSocket.begin();
    webSocket.onEvent(webSocketEvent);
}

void loop() {
    webSocket.loop();
    server.handleClient();
    yield();
}

1 个答案:

答案 0 :(得分:0)

由于您未提供任何版本的软件或硬件:

以下内容在NodeMCU v0.9和v1.0(ESP8266-12E)上稳定运行

IDE->具有ESP软件包版本2.42的Arduino IDE 1.85(也适用于2.41)

包装的版本可以在这里检查 C:\ Users [您的用户名] \ AppData \ Local \ Arduino15 \ packages \ esp8266 \ hardware \ esp8266 \ 2.4.2

对于这些环境,请执行以下操作

void loop() {
    webSocket.loop();
    server.handleClient();
 //   yield(); ==> delete this line
}

yield()导致esp8266库无法预测的行为-在较旧的版本中,它被用作某些bug的解决方法,但从来都不是令人满意的解决方案