ESP32 WiFi.status() 总是 returns WL_DICSONNECTED (STA_MODE)
ESP32 WiFi.status() always returns WL_DICSONNECTED (STA_MODE)
我花了很多时间试图解决这个问题。
我添加了多次尝试,在Wifi.begin()之前尝试了WiFi.disconnect()。
没有任何效果:status
仍然是 WL_DISCONNECTED
(0x06)。
WiFi.mode(WIFI_STA);
for(;;) {
attempt++;
Wifi.begin(ssid, password);
wl_status_t status = WiFi.status();
String m = connectionStatusMessage(status);
log("Connection attempt %d: status is%s", attempt, m.c_str());
if (status == WL_CONNECTED) {
Serial.println();
success("connected (WL_CONNECTED)");
information();
break;
}
[更新]
注意:我使用的是 ESP-WROOM-32 开发包。 ESP32 SDK 是 PlatformIO 上可用的最新稳定版。我也测试了其他开发工具包,例如来自 Az-Delivery 的开发工具包。
我有一个想法:WiFi.begin(ssid, password)
应该只调用一次。放在循环之前:
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
for(;;) {
attempt++;
wl_status_t status = WiFi.status();
String m = connectionStatusMessage(status);
log("Connection attempt %d: status is%s", attempt, m.c_str());
if (status == WL_CONNECTED) {
Serial.println();
success("connected (WL_CONNECTED)");
information();
break;
}
}
我终于找到了解决方案:解决方法是使用 WiFi.waitForConnectResult()
而不是 WiFi.status()
。
我最初认为这是一个错误,但正如@juraj 提到的,通过检查 WiFi 代码,这是一个等待状态到来的问题。 waitFoConnectionResult() 就是这样做的。因此结果。
工作代码如下:
WiFi.mode(WIFI_STA);
for(;;) {
attempt++;
Wifi.begin(ssid, password);
// >>>> the fix <<<<<
uint8_t status = WiFi.waitForConnectResult();
String m = connectionStatusMessage(status);
log("Connection attempt %d: status is%s", attempt, m.c_str());
if (status == WL_CONNECTED) {
Serial.println();
success("connected (WL_CONNECTED)");
information();
break;
}
我花了很多时间试图解决这个问题。
我添加了多次尝试,在Wifi.begin()之前尝试了WiFi.disconnect()。
没有任何效果:status
仍然是 WL_DISCONNECTED
(0x06)。
WiFi.mode(WIFI_STA);
for(;;) {
attempt++;
Wifi.begin(ssid, password);
wl_status_t status = WiFi.status();
String m = connectionStatusMessage(status);
log("Connection attempt %d: status is%s", attempt, m.c_str());
if (status == WL_CONNECTED) {
Serial.println();
success("connected (WL_CONNECTED)");
information();
break;
}
[更新] 注意:我使用的是 ESP-WROOM-32 开发包。 ESP32 SDK 是 PlatformIO 上可用的最新稳定版。我也测试了其他开发工具包,例如来自 Az-Delivery 的开发工具包。
我有一个想法:WiFi.begin(ssid, password)
应该只调用一次。放在循环之前:
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
for(;;) {
attempt++;
wl_status_t status = WiFi.status();
String m = connectionStatusMessage(status);
log("Connection attempt %d: status is%s", attempt, m.c_str());
if (status == WL_CONNECTED) {
Serial.println();
success("connected (WL_CONNECTED)");
information();
break;
}
}
我终于找到了解决方案:解决方法是使用 WiFi.waitForConnectResult()
而不是 WiFi.status()
。
我最初认为这是一个错误,但正如@juraj 提到的,通过检查 WiFi 代码,这是一个等待状态到来的问题。 waitFoConnectionResult() 就是这样做的。因此结果。
工作代码如下:
WiFi.mode(WIFI_STA);
for(;;) {
attempt++;
Wifi.begin(ssid, password);
// >>>> the fix <<<<<
uint8_t status = WiFi.waitForConnectResult();
String m = connectionStatusMessage(status);
log("Connection attempt %d: status is%s", attempt, m.c_str());
if (status == WL_CONNECTED) {
Serial.println();
success("connected (WL_CONNECTED)");
information();
break;
}