ESP8266+;WebSocketsServer+;WIFI\u AP\u STA=已断开连接

ESP8266+;WebSocketsServer+;WIFI\u AP\u STA=已断开连接,websocket,arduino,webserver,esp8266,Websocket,Arduino,Webserver,Esp8266,我知道我可能对esp8266的要求太高了,但在设备连接到wifi时,是否可以通过WebSocket向客户端发送消息 forceWiFiRegisterBegin是AP和web服务器方法 void WiFiController::forceWiFiRegisterBegin() { WiFi.forceSleepWake(); delay(500); IPAddress apIP(5, 5, 5, 5); WiFi.disconnect(true); WiFi.mode(WIFI_AP_STA

我知道我可能对esp8266的要求太高了,但在设备连接到wifi时,是否可以通过WebSocket向客户端发送消息

forceWiFiRegisterBegin是AP和web服务器方法

void WiFiController::forceWiFiRegisterBegin()
{
WiFi.forceSleepWake();
delay(500);

IPAddress apIP(5, 5, 5, 5);

WiFi.disconnect(true);
WiFi.mode(WIFI_AP_STA);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));

dnsServer.setTTL(1);
dnsServer.start(53, "*", apIP);

if (WiFi.softAP(_apName)) {
    Serial.printf("\nPlease connect to the Access Point: %s\n", _apName);
    Serial.printf("then open %s in a web browser\n", WiFi.softAPIP().toString().c_str());
}
else {
    Serial.println("FAILED to create Access Point");
    yield();
    ESP.restart();
}

WiFi.scanNetworks(false, false);
_server.on("/", std::bind(&WiFiController::handleRoot, this));
_server.on("/connect", std::bind(&WiFiController::ssidFromWeb, this));
_server.begin();

webSocket.begin();
webSocket.onEvent(std::bind(&WiFiController::webSocketEvent, this, _1, _2, _3, _4));

 while(true) 
 {
     _server.handleClient();
     webSocket.loop();
     dnsServer.processNextRequest();
     yield();
 }
}
ssidFromWeb正在尝试连接到另一个AccessPoint

 void WiFiController::ssidFromWeb() {
_server.send(200, "text/html", "ok");

Serial.println("Connecting");
if(_server.arg("key")=="19"){
    _ssid = _server.arg("ssid");
    _pass = _server.arg("pass");

    uint8_t i(0), multi(4);
    unsigned long previousMillis = 0;
    WiFi.begin((const char*)_server.arg("ssid").c_str(), (const char*)_server.arg("pass").c_str());
    while (WiFi.status() != WL_CONNECTED && i <= 10*multi) {

        unsigned long currentMillis = millis();
        if (currentMillis - previousMillis >= 500) {
            previousMillis = currentMillis;
            ++i;
            if (i % multi == 0)
            {
                //webSocket.broadcastTXT('W' + String(i / multi));    //<---
                Serial.println(i / multi);
            }
        }
        webSocket.loop();                                             //<---
        yield();
    }
    webSocket.broadcastTXT("I");
  }
}
谢谢你的帮助:)


sfmbe

连接到AP会强制esp8266更改SoftAP的频道,以匹配其加入的AP的频道。。所有软AP站断开连接。这里我有一些解决办法
   Connecting
   1
   webSocketEvent(0, 1, ...)
   [0] Disconnected!
   webSocketEvent(1, 1, ...)
   [1] Disconnected!
   2
   3