ESP8266 возвращает неправильный статус после автоматического переподключения к Wi-Fi точке доступа в WIFI_STA и WIFI_AP_STA режимах. Как я ожидаю, функци WiFi.isConnected() должна вернуть true, а WiFi.status() код WL_CONNECTED после автоматического переподключения к точке доступа, однако по каким-то причинам эти функции возвращают false и WL_DISCONNECTED соответственно. Хотя в действительности ESP8266 успешно переподключается к Wi-Fi точке доступа, но возвращает неправильный статус. Может быть кто-нибудь может подсказать, что я делаю неправильно, из-за чего получаю не те статусы?
Мой скетч, который компилировался в Arduino IDE v. 1.8.5:
Вывод монитора последовательного порта можно найти в прикреплённом файле serial_monitor_output.txt.
Заранее благодарю за любую помощь.
Мой скетч, который компилировался в Arduino IDE v. 1.8.5:
Код:
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
const char* ssid = "MYWIFISSID";
const char* password = "MYWIFIPSK";
void setup()
{
Serial.begin(115200);
delay(1000);
WiFi.mode(WIFI_AP_STA);
WiFi.softAP("my_esp");
delay(1000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
void loop()
{
delay(5000);
DynamicJsonDocument doc;
JsonObject& obj = doc.to<JsonObject>();
obj["chip_id"] = String(ESP.getChipId(), HEX);
JsonObject& wifi = obj.createNestedObject("wifi");
switch (WiFi.getMode()) {
case WIFI_OFF:
wifi["mode"] = "WIFI_OFF";
break;
case WIFI_STA:
wifi["mode"] = "WIFI_STA";
break;
case WIFI_AP:
wifi["mode"] = "SWIFI_AP";
break;
case WIFI_AP_STA:
wifi["mode"] = "WIFI_AP_STA";
break;
default:
wifi["mode"] = "UNKNOWN";
}
JsonObject& ap = wifi.createNestedObject("ap");
ap["ssid"] = WiFi.softAPSSID();
ap["psk"] = WiFi.softAPPSK();
ap["ip"] = WiFi.softAPIP().toString();
ap["mac"] = WiFi.softAPmacAddress();
ap["station_num"] = (uint8_t) WiFi.softAPgetStationNum();
JsonObject& station = wifi.createNestedObject("station");
station["ssid"] = WiFi.SSID();
station["psk"] = WiFi.psk();
station["ip"] = WiFi.localIP().toString();
station["hostname"] = WiFi.hostname();
station["mac"] = WiFi.macAddress();
station["subnet"] = WiFi.subnetMask().toString();
station["gateway"] = WiFi.gatewayIP().toString();
JsonObject& dns = station.createNestedObject("dns");
dns["0"] = WiFi.dnsIP(0).toString();
dns["1"] = WiFi.dnsIP(1).toString();
JsonObject& states = obj.createNestedObject("state");
states["AutoConnect"] = WiFi.getAutoConnect();
states["AutoReconnect"] = WiFi.getAutoReconnect();
states["Persistent"] = WiFi.getPersistent();
states["isConnected"] = WiFi.isConnected();
switch (WiFi.status()) {
case WL_CONNECTED:
states["status"] = "WL_CONNECTED";
break;
case WL_NO_SHIELD:
states["status"] = "WL_NO_SHIELD";
break;
case WL_IDLE_STATUS:
states["status"] = "WL_IDLE_STATUS";
break;
case WL_NO_SSID_AVAIL:
states["status"] = "WL_NO_SSID_AVAIL";
break;
case WL_SCAN_COMPLETED:
states["status"] = "WL_SCAN_COMPLETED";
break;
case WL_CONNECT_FAILED:
states["status"] = "WL_CONNECT_FAILED";
break;
case WL_CONNECTION_LOST:
states["status"] = "WL_CONNECTION_LOST";
break;
case WL_DISCONNECTED:
states["status"] = " ";
break;
}
Serial.println("========================================");
serializeJsonPretty(obj, Serial);
Serial.println("========================================");
}
Заранее благодарю за любую помощь.
Вложения
-
12.9 KB Просмотры: 14
Последнее редактирование: