ESP32 (Arduino): WiFi.softAPdisconnect(true) выдаёт ошибку + проблемы с повреждением кучи
У меня NodeMCU ESP32s, и я использую фреймворк Arduino.
Я хочу, чтобы ESP подключался к локальному Wi-Fi, поэтому я устанавливаю точку доступа на ESP и отправляю ему UDP-пакет с учетными данными WIFI.
Я делаю это циклически до тех пор, пока отправленные учетные данные не будут правильными, чтобы плата подключилась к локальной сети WIFI.
Ниже представлена диаграмма с логической схемой для визуализации.

Полная ссылка на код GitHub: https://github.com/bartex-bartex/AirQualitySensor-esp32-arduino
Класс WifiManger:
#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
подключиться к Wi-Fi:
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;
}
подключиться к Wi-Fi:
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(); // очищает конфигурацию, чтобы не пытаться переподключиться
WiFi.mode(WIFI_STA); // это останавливает точку доступа - ЭТО ПРОВЕРЕНО!
WiFi.begin(ssid, pass);
// попробуйте подключиться к Wi-Fi, используя сохраненные учетные данные
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(); // очищает конфигурацию, чтобы не пытаться переподключиться
}
return success;
}
getWiFiCredentials:
void WifiManager::getWiFiCredentials() {
ESP_LOGI("WIFI", "Resetting WiFi configuration");
configManager.reset();
ESP_LOGI("WIFI", "Initializing Access Point (AP)");
// создать собственную сеть
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);
// получить и сохранить данные
UDPMessengerService udpMessengerService = UDPMessengerService(1234);
ESP_LOGI("WIFI", "Waiting for UDP packet containing WiFi credentials");
UdpPacket packet;
while (!configManager.isDeviceConfigured()) {
// TODO: Иногда без отправки UDP-пакета код продолжает работу...
if (udpMessengerService.readPacket(packet)){
ESP_LOGI("WIFI", "Received UDP packet with content: %s", packet.content);
// записывает ответное сообщение в packet.content
CommandProcessor::processMessage(packet.content);
udpMessengerService.sendPacket(packet);
}
}
ESP_LOGI("WIFI", "WiFi credentials received and saved.");
// false -> ТД выключается и тут же включается (вероятно, сброс настроек или что-то в этом роде)
// true -> ТД переключает состояние 3 раза: START STOP START / STOP START STOP -> если второй, то возникает ошибка после первого STOP
WiFi.softAPdisconnect();
ESP_LOGI("WIFI", "Access Point disabled.");
}
Проблемы:
1) когда я вызываю getWiFiCredentials во второй раз и выполнение достигает конца функции, я получаю ошибку bad head и система перезагружается
Полагаю, что произошло некоторое повреждение памяти, но я не смог обнаружить его в своем коде.
...
CORRUPT HEAP: Bad head at 0x3ffbad94. Expected 0xabba1234 got 0x0412c61c
assert failed: multi_heap_free multi_heap_poisoning.c:259 (head != NULL)
2) Как правильно обрабатывать отключение точки доступа + следует ли использовать WiFi.mode(WIFI_AP) или WiFi.mode(WIFI_STA).
Я не получаю многого от документов: https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/ru/latest/api/wifi.html#softapdisconnect
Я обнаружил, что WiFi.softAPdisconnect() выполняет своего рода очистку конфигурации, но не останавливает точку доступа, а скорее ПЕРЕЗАПУСКАЕТ ее.
...
[ 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
...
Однако WiFi.mode(WIFI_STA) останавливает точку доступа.
WiFi.softAPdisconnect(true) должен был остановить точку доступа, но я получил ошибку
...
[ 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.
...
Полные логи:
С: 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
С: 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 ответ
Лучший ответ:
Я думаю, что я решил эти проблемы:
Проблема №1:
Строка UDPMessengerService udpMessengerService = UDPMessengerService(1234) вызывала повреждение кучи при многократном создании объекта. Чтобы решить эту проблему, я перенёс создание объекта в функцию connectToWiFi и передал её по ссылке, что устранило проблему.
Проблема №2:
Хотя WiFi.softAPdisconnect(true) выдает ошибку, в конечном итоге он успешно останавливает точку доступа, поэтому я считаю такое поведение приемлемым.
[ 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
- Максимальное количество подключений точки доступа ESP32: 4 или 10?
- ESP32 открывает "captive portal" при подключении
- Автоматическая веб-страница ESP32 AP
- Неудачные попытки входа в систему на SoftAP
- SSID softAP ESP32 не является постоянным
- ESP32 не предоставляет IP-адрес шлюза в точке доступа
- Контакты RX и TX на esp32
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi