I have NodeMCU ESP32s and I am using Arduino framework.
I want the ESP to connect to local Wifi, so I set AP on ESP and send to it UDP packet with WIFI credentials. I am doing it in a loop until sent credentials are correct so the board connects to local WIFI. Here is a diagram with logic flow for visualization. enter image description here
For full code reference GitHub link: https://github.com/bartex-bartex/AirQualitySensor-esp32-arduino
WifiManger
class:
#ifndef WifiManager_H
#define WifiManager_H
#include "ConfigManager.h"
class WifiManager {
private:
ConfigManager& configManager = ConfigManager::getInstance();
const char* ap_ssid = "ESP32-AP";
const char* ap_pass = "12345678";
void getWiFiCredentials();
public:
WifiManager();
bool connectToWiFi(char* ssid, char* pass);
bool connectToWiFi(ConfigManager& configManager, int maxUniqueCredentials);
};
#endif // WifiManager_H
connectToWiFi:
bool WifiManager::connectToWiFi(ConfigManager& configManager, int maxUniqueCredentials) {
bool success = false;
char ssid[32] = {0};
char pass[32] = {0};
configManager.load();
while (!configManager.isDeviceConfigured()) {
getWiFiCredentials();
}
do{
configManager.getSSID(ssid);
configManager.getPassword(pass);
ESP_LOGI("CREDENTIALS", "SSID: %s", ssid);
ESP_LOGI("CREDENTIALS", "Password: %s", pass);
success = connectToWiFi(ssid, pass);
if (!success){
getWiFiCredentials();
}
} while(!success && maxUniqueCredentials--);
return success;
}
connectToWiFi:
bool WifiManager::connectToWiFi(char* ssid, char* pass) {
bool success = false;
ESP_LOGI("WIFI", "Connecting to WiFi with SSID: %s", ssid);
Serial.printf("Connecting to: %s\n", ssid);
WiFi.disconnect(); // clears config, so it won't try to reconnect
WiFi.mode(WIFI_STA); // this stops AP - THAT IS TESTED!
WiFi.begin(ssid, pass);
// try to connect to WiFi using saved credentials
int time = 5;
while (time--){
if (WiFi.status() == WL_CONNECTED){
success = true;
ESP_LOGI("WIFI", "Successfully connected to SSID: %s", ssid);
break;
}
delay(1000);
ESP_LOGD("WIFI", "Attempt %d, still trying to connect...", 5 - time);
}
if (success){
ESP_LOGI("WIFI", "Connected to WiFi SSID: %s", ssid);
} else {
ESP_LOGE("WIFI", "Failed to connect to WiFi SSID: %s", ssid);
WiFi.disconnect(); // clears config, so it won't try to reconnect
}
return success;
}
getWiFiCredentials:
void WifiManager::getWiFiCredentials() {
ESP_LOGI("WIFI", "Resetting WiFi configuration");
configManager.reset();
ESP_LOGI("WIFI", "Initializing Access Point (AP)");
// create own network
IPAddress local_IP(192, 168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(local_IP, gateway, subnet);
WiFi.softAP(ap_ssid, ap_pass);
ESP_LOGI("WIFI", "Access Point created with SSID: %s", ap_ssid);
// obtain and save data
UDPMessengerService udpMessengerService = UDPMessengerService(1234);
ESP_LOGI("WIFI", "Waiting for UDP packet containing WiFi credentials");
UdpPacket packet;
while (!configManager.isDeviceConfigured()) {
// TODO: Sometimes without sending UDP packet the code moves on...
if (udpMessengerService.readPacket(packet)){
ESP_LOGI("WIFI", "Received UDP packet with content: %s", packet.content);
// writes response message in packet.content
CommandProcessor::processMessage(packet.content);
udpMessengerService.sendPacket(packet);
}
}
ESP_LOGI("WIFI", "WiFi credentials received and saved.");
// false -> AP is turn off and immediatelly on (probably clear config or so)
// true -> AP switches state 3 times: START STOP START / STOP START STOP -> if second then occure error after first STOP
WiFi.softAPdisconnect();
ESP_LOGI("WIFI", "Access Point disabled.");
}
Problems:
1) when I invoke getWiFiCredentials
for the second time and execution reaches function end I receive bad head error and system reboots
I guess there is some memory corruption, but I really couldn't spot it in my code.
...
CORRUPT HEAP: Bad head at 0x3ffbad94. Expected 0xabba1234 got 0x0412c61c
assert failed: multi_heap_free multi_heap_poisoning.c:259 (head != NULL)
2) How to handle properly AP turning off + should I use WiFi.mode(WIFI_AP)
or WiFi.mode(WIFI_STA)
.
I don't get much from docs: https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/api/wifi.html#softapdisconnect
I have found that WiFi.softAPdisconnect()
did some kind of config clear, but doesn't stop the AP, rather RESTART it.
...
[ 8693][I][WifiManager.cpp:118] getWiFiCredentials(): [WIFI] WiFi credentials received and saved.
[ 8715][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 13 - AP_STADISCONNECTED
[ 8726][I][WifiManager.cpp:124] getWiFiCredentials(): [WIFI] Access Point disabled.
[ 8727][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 8741][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
...
However WiFi.mode(WIFI_STA)
do stop AP.
WiFi.softAPdisconnect(true)
should stop AP, but I received an error
...
[ 4212][I][WifiManager.cpp:118] getWiFiCredentials(): [WIFI] WiFi credentials received and saved.
[ 4234][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 13 - AP_STADISCONNECTED
[ 4246][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
E (8622) wifi_init_default: netstack cb reg failed with 12308
[ 4259][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 4266][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 4298][I][WifiManager.cpp:124] getWiFiCredentials(): [WIFI] Access Point disabled.
...
Full logs:
With: WiFi.softAPdisconnect(true)
[ 78][D][esp32-hal-cpu.c:244] setCpuFrequencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
[ 215][I][ConfigManager.cpp:29] load(): [CONFIG] Loading config
[ 231][E][ConfigManager.cpp:57] load(): [CONFIG] Config file is empty
[ 238][I][WifiManager.cpp:82] getWiFiCredentials(): [WIFI] Resetting WiFi configuration
[ 261][I][WifiManager.cpp:86] getWiFiCredentials(): [WIFI] Initializing Access Point (AP)
[ 291][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 0 - WIFI_READY
[ 372][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 382][I][WifiManager.cpp:97] getWiFiCredentials(): [WIFI] Access Point created with SSID: ESP32-AP
[ 392][I][WifiManager.cpp:102] getWiFiCredentials(): [WIFI] Waiting for UDP packet containing WiFi credentials
[ 2657][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 12 - AP_STACONNECTED
[ 2676][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 14 - AP_STAIPASSIGNED
[ 4118][I][WifiManager.cpp:109] getWiFiCredentials(): [WIFI] Received UDP packet with content: { "cmd": "setWiFi", "params": {"ssid": "Dom", "password":"password"}}
[ 4133][I][CommandProcessor.cpp:20] processMessage(): [UDP] Processing incoming UDP content
[ 4142][I][CommandProcessor.cpp:32] processMessage(): [UDP] Received command: setWiFi
[ 4150][I][CommandProcessor.cpp:58] saveWifiCredentials(): [WIFI] Setting WiFi credentials: SSID: Dom | pass: password
[ 4170][I][CommandProcessor.cpp:41] processMessage(): [UDP] WiFi credentials saved successfully.
[ 4179][I][UDPMessengerService.cpp:31] sendPacket(): [UDP] Sending UDP packet to IP: 192.168.1.2, Port: 60766
[ 4189][D][UDPMessengerService.cpp:32] sendPacket(): [UDP] Packet content: {"tymd": "setWiFi", "params": {"ssid": "Dom", "password":"password"}}
[ 4204][I][UDPMessengerService.cpp:38] sendPacket(): [UDP] Packet sent successfully.
[ 4212][I][WifiManager.cpp:118] getWiFiCredentials(): [WIFI] WiFi credentials received and saved.
[ 4234][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 13 - AP_STADISCONNECTED
[ 4246][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
E (8622) wifi_init_default: netstack cb reg failed with 12308
[ 4259][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 4266][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 4298][I][WifiManager.cpp:124] getWiFiCredentials(): [WIFI] Access Point disabled.
[ 4306][I][WifiManager.cpp:65] connectToWiFi(): [CREDENTIALS] SSID: Dom
[ 4312][I][WifiManager.cpp:66] connectToWiFi(): [CREDENTIALS] Password: password
[ 4320][I][WifiManager.cpp:17] connectToWiFi(): [WIFI] Connecting to WiFi with SSID: Dom
Connecting to: Dom
[ 4347][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 0 - WIFI_READY
[ 4362][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 2 - STA_START
[ 5379][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 1, still trying to connect...
[ 6388][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 2, still trying to connect...
[ 6791][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 5 - STA_DISCONNECTED
[ 6799][W][WiFiGeneric.cpp:1062] _eventCallback(): Reason: 201 - NO_AP_FOUND
[ 6806][D][WiFiGeneric.cpp:1082] _eventCallback(): WiFi Reconnect Running
[ 7397][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 3, still trying to connect...
[ 8406][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 4, still trying to connect...
[ 9235][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 5 - STA_DISCONNECTED
[ 9242][W][WiFiGeneric.cpp:1062] _eventCallback(): Reason: 201 - NO_AP_FOUND
[ 9249][D][WiFiGeneric.cpp:1086] _eventCallback(): WiFi AutoReconnect Running
[ 9415][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 5, still trying to connect...
[ 9423][E][WifiManager.cpp:42] connectToWiFi(): [WIFI] Failed to connect to WiFi SSID: Dom
[ 9432][I][WifiManager.cpp:82] getWiFiCredentials(): [WIFI] Resetting WiFi configuration
[ 9449][I][WifiManager.cpp:86] getWiFiCredentials(): [WIFI] Initializing Access Point (AP)
[ 9461][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 3 - STA_STOP
[ 9469][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 9489][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 9661][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 9661][I][WifiManager.cpp:97] getWiFiCredentials(): [WIFI] Access Point created with SSID: ESP32-AP
[ 9679][I][WifiManager.cpp:102] getWiFiCredentials(): [WIFI] Waiting for UDP packet containing WiFi credentials
[ 21588][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 12 - AP_STACONNECTED
[ 21612][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 14 - AP_STAIPASSIGNED
[ 23077][I][WifiManager.cpp:109] getWiFiCredentials(): [WIFI] Received UDP packet with content: { "cmd": "setWiFi", "params": {"ssid": "Dom", "password":"password"}}
[ 23092][I][CommandProcessor.cpp:20] processMessage(): [UDP] Processing incoming UDP content
[ 23100][I][CommandProcessor.cpp:32] processMessage(): [UDP] Received command: setWiFi
[ 23108][I][CommandProcessor.cpp:58] saveWifiCredentials(): [WIFI] Setting WiFi credentials: SSID: Dom | pass: password
[ 23128][I][CommandProcessor.cpp:41] processMessage(): [UDP] WiFi credentials saved successfully.
[ 23137][I][UDPMessengerService.cpp:31] sendPacket(): [UDP] Sending UDP packet to IP: 192.168.1.2, Port: 60766
[ 23147][D][UDPMessengerService.cpp:32] sendPacket(): [UDP] Packet content: {"tymd": "setWiFi", "params": {"ssid": "Dom", "password":"password"}}
[ 23162][I][UDPMessengerService.cpp:38] sendPacket(): [UDP] Packet sent successfully.
[ 23170][I][WifiManager.cpp:118] getWiFiCredentials(): [WIFI] WiFi credentials received and saved.
[ 23192][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 13 - AP_STADISCONNECTED
[ 23256][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
CORRUPT HEAP: Bad head at 0x3ffbada4. Expected 0xabba1234 got 0xabba1200
assert failed: multi_heap_free multi_heap_poisoning.c:259 (head != NULL)
Backtrace: 0x4008368d:0x3ffbbd80 0x4008be49:0x3ffbbda0 0x40091325:0x3ffbbdc0 0x40090f21:0x3ffbbef0 0x40083bfd:0x3ffbbf10 0x40091355:0x3ffbbf30 0x401029d9:0x3ffbbf50
With: WiFi.softAPdisconnect()
[ 78][D][esp32-hal-cpu.c:244] setCpuFrequencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
[ 215][I][ConfigManager.cpp:29] load(): [CONFIG] Loading config
[ 231][E][ConfigManager.cpp:57] load(): [CONFIG] Config file is empty
[ 238][I][WifiManager.cpp:82] getWiFiCredentials(): [WIFI] Resetting WiFi configuration
[ 261][I][WifiManager.cpp:86] getWiFiCredentials(): [WIFI] Initializing Access Point (AP)
[ 292][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 0 - WIFI_READY
[ 370][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 392][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 564][I][WifiManager.cpp:97] getWiFiCredentials(): [WIFI] Access Point created with SSID: ESP32-AP
[ 565][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 582][I][WifiManager.cpp:102] getWiFiCredentials(): [WIFI] Waiting for UDP packet containing WiFi credentials
[ 7000][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 12 - AP_STACONNECTED
[ 7015][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 14 - AP_STAIPASSIGNED
[ 8600][I][WifiManager.cpp:109] getWiFiCredentials(): [WIFI] Received UDP packet with content: { "cmd": "setWiFi", "params": {"ssid": "Dom", "password":"password"}}
[ 8614][I][CommandProcessor.cpp:20] processMessage(): [UDP] Processing incoming UDP content
[ 8623][I][CommandProcessor.cpp:32] processMessage(): [UDP] Received command: setWiFi
[ 8631][I][CommandProcessor.cpp:58] saveWifiCredentials(): [WIFI] Setting WiFi credentials: SSID: Dom | pass: password
[ 8651][I][CommandProcessor.cpp:41] processMessage(): [UDP] WiFi credentials saved successfully.
[ 8660][I][UDPMessengerService.cpp:31] sendPacket(): [UDP] Sending UDP packet to IP: 192.168.1.2, Port: 60766
[ 8670][D][UDPMessengerService.cpp:32] sendPacket(): [UDP] Packet content: {"tymd": "setWiFi", "params": {"ssid": "Dom", "password":"password"}}
[ 8685][I][UDPMessengerService.cpp:38] sendPacket(): [UDP] Packet sent successfully.
[ 8693][I][WifiManager.cpp:118] getWiFiCredentials(): [WIFI] WiFi credentials received and saved.
[ 8715][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 13 - AP_STADISCONNECTED
[ 8726][I][WifiManager.cpp:124] getWiFiCredentials(): [WIFI] Access Point disabled.
[ 8727][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 8741][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 8749][I][WifiManager.cpp:65] connectToWiFi(): [CREDENTIALS] SSID: Dom
[ 8755][I][WifiManager.cpp:66] connectToWiFi(): [CREDENTIALS] Password: password
[ 8763][I][WifiManager.cpp:17] connectToWiFi(): [WIFI] Connecting to WiFi with SSID: Dom
Connecting to: Dom
[ 8774][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 8781][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 2 - STA_START
[ 9799][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 1, still trying to connect...
[ 10808][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 2, still trying to connect...
[ 11212][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 5 - STA_DISCONNECTED
[ 11220][W][WiFiGeneric.cpp:1062] _eventCallback(): Reason: 201 - NO_AP_FOUND
[ 11227][D][WiFiGeneric.cpp:1082] _eventCallback(): WiFi Reconnect Running
[ 11817][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 3, still trying to connect...
[ 12826][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 4, still trying to connect...
[ 13656][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 5 - STA_DISCONNECTED
[ 13663][W][WiFiGeneric.cpp:1062] _eventCallback(): Reason: 201 - NO_AP_FOUND
[ 13670][D][WiFiGeneric.cpp:1086] _eventCallback(): WiFi AutoReconnect Running
[ 13835][D][WifiManager.cpp:36] connectToWiFi(): [WIFI] Attempt 5, still trying to connect...
[ 13843][E][WifiManager.cpp:42] connectToWiFi(): [WIFI] Failed to connect to WiFi SSID: Dom
[ 13852][I][WifiManager.cpp:82] getWiFiCredentials(): [WIFI] Resetting WiFi configuration
[ 13869][I][WifiManager.cpp:86] getWiFiCredentials(): [WIFI] Initializing Access Point (AP)
[ 13880][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 3 - STA_STOP
[ 13942][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 13955][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 14134][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 14133][I][WifiManager.cpp:97] getWiFiCredentials(): [WIFI] Access Point created with SSID: ESP32-AP
[ 14151][I][WifiManager.cpp:102] getWiFiCredentials(): [WIFI] Waiting for UDP packet containing WiFi credentials
[ 20809][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 12 - AP_STACONNECTED
[ 20828][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 14 - AP_STAIPASSIGNED
[ 25837][I][WifiManager.cpp:109] getWiFiCredentials(): [WIFI] Received UDP packet with content: { "cmd": "setWiFi", "params": {"ssid": "Dom", "password":"password"}}
[ 25851][I][CommandProcessor.cpp:20] processMessage(): [UDP] Processing incoming UDP content
[ 25860][I][CommandProcessor.cpp:32] processMessage(): [UDP] Received command: setWiFi
[ 25868][I][CommandProcessor.cpp:58] saveWifiCredentials(): [WIFI] Setting WiFi credentials: SSID: Dom | pass: password
[ 25887][I][CommandProcessor.cpp:41] processMessage(): [UDP] WiFi credentials saved successfully.
[ 25896][I][UDPMessengerService.cpp:31] sendPacket(): [UDP] Sending UDP packet to IP: 192.168.1.2, Port: 60766
[ 25906][D][UDPMessengerService.cpp:32] sendPacket(): [UDP] Packet content: {"tymd": "setWiFi", "params": {"ssid": "Dom", "password":"password"}}
[ 25921][I][UDPMessengerService.cpp:38] sendPacket(): [UDP] Packet sent successfully.
[ 25929][I][WifiManager.cpp:118] getWiFiCredentials(): [WIFI] WiFi credentials received and saved.
[ 25951][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 13 - AP_STADISCONNECTED
[ 25962][I][WifiManager.cpp:124] getWiFiCredentials(): [WIFI] Access Point disabled.
[ 25963][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
[ 25977][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
CORRUPT HEAP: Bad head at 0x3ffbad94. Expected 0xabba1234 got 0x0412c61c
assert failed: multi_heap_free multi_heap_poisoning.c:259 (head != NULL)
Backtrace: 0x4008368d:0x3ffb1cc0 0x4008be49:0x3ffb1ce0 0x40091325:0x3ffb1d00 0x40090f21:0x3ffb1e30 0x40083bfd:0x3ffb1e50 0x40091355:0x3ffb1e70 0x40145345:0x3ffb1e90 0x401451f9:0x3ffb1eb0 0x400d47fc:0x3ffb1ed0 0x400d5ac7:0x3ffb1ef0 0x400d5bd1:0x3ffb21c0 0x400d5c35:0x3ffb2250 0x400db3ae:0x3ffb2290
1 Answer 1
I think I have solved those problems:
Problem #1:
The line UDPMessengerService udpMessengerService = UDPMessengerService(1234)
was causing heap corruption when the object was created multiple times. To resolve this, I moved the object creation to the connectToWiFi
function and passed it by reference, which eliminates the issue.
Problem #2:
Although WiFi.softAPdisconnect(true) throws an error, it appears to successfully stop the AP eventually, so I consider this behavior acceptable.
[ 4234][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 13 - AP_STADISCONNECTED
[ 4246][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP
E (8622) wifi_init_default: netstack cb reg failed with 12308
[ 4259][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 10 - AP_START
[ 4266][D][WiFiGeneric.cpp:1040] _eventCallback(): Arduino Event: 11 - AP_STOP