ESP8266 + WebSocketsServer + WIFI_AP_STA =断开连接

问题描述

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

forceWiFiRegisterBegin是AP和Web服务器方法

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

IPAddress apIP(5,5,5);

WiFi.disconnect(true);
WiFi.mode(WIFI_AP_STA);
WiFi.softAPConfig(apIP,apIP,IPAddress(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正在尝试连接到另一个AccesPoint。

 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");
  }
}

当我尝试连接时,网络套接字断开连接

   Connecting
   1
   webSocketEvent(0,1,...)
   [0] disconnected!
   webSocketEvent(1,...)
   [1] disconnected!
   2
   3

感谢您的帮助:)

sfmbe

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)