问题描述
我知道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 (将#修改为@)