ESP32 (Arduino): WiFi.softAPdisconnect(true) выдаёт ошибку + проблемы с повреждением кучи

esp32 wifi softap

У меня 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

, 👍0


1 ответ


Лучший ответ:

0

Я думаю, что я решил эти проблемы:

Проблема №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
,