如何解决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 举报,一经查实,本站将立刻删除。