• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь WebConfig метод WiFi.softAPIP() приводит к перезагрузке

whiteud

New member
Имеется такой кусок кода:
Код:
  if (pWebConfig->IsAP())
    {
      Serial.println("WiFi Mode: AP");
      sendStrXY("Mode: AP",1,0);
      ip = WiFi.softAPIP();    // <----- сыпется тут
    }
  else
    {
      Serial.println("WiFi Mode: Client");
      sendStrXY("Mode: Client",1,0);
      ip = WiFi.localIP();
    }
  Serial.println("IP address: "+ip);
  char result[16];
  sprintf(result, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
  sendStrXY("IP:",2,0);
  sendStrXY(result,2,4);
Его цель: определить в каком режиме работает железка, если в режиме AP тогда мы выводим в консоль и на экран SSD1306 - что используется режим AP, и пытаемся получить Soft AP IP, иначе мы работаем в режиме Client и тогда показываем Local IP. Но в случае AP железка уходит в рестарт, как раз на выделенном в коде месте, т.е. показывает что мы в режиме AP и все, дальше перезагрузка. Т.е. такое чувство что метод этот не работает :( в случае же если на этом месте запросить Local IP то все отлично и выдается адрес 0.0.0.0. Понятное дело хочется чтобы он по человечески выдал 192.168.0.1

Что в консоли:

Код:
WiFi Mode: AP
ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂ
Soft WDT reset       // <----- сыпется тут

ctx: cont
sp: 3fff08f0 end: 3fff0b50 offset: 01b0

>>>stack>>>
3fff0aa0:  0000003c 00000001 3ffe88e1 00000001
3fff0ab0:  3ffef984 0000303e 40ff5d56 4020635c
3fff0ac0:  3ffef984 00000000 3ffefa11 00000001
3fff0ad0:  3ffef984 3fff0b90 3fff0b90 40205a0d
3fff0ae0:  40ff2d18 3fff0b10 3fff0b90 40202924
3fff0af0:  0100a8c0 00ffffff 3fff0b90 40206499
3fff0b00:  3fffdad0 3fff0b90 3ffef958 40202bcb
3fff0b10:  3ffe95b8 0100a8c0 feefeffe feefeffe
3fff0b20:  feefeffe feefeffe feefeffe 3ffefb28
3fff0b30:  3fffdad0 00000000 3ffefb20 4020563c
3fff0b40:  feefeffe feefeffe 3ffefb30 40100958
<<<stack<<<

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1264, room 16
tail 0
chksum 0x42
csum 0x42
~ld
Подскажите плз как побороть?
 

whiteud

New member
Пока писал похоже догадался в чем проблема, вот так работает:

Код:
Serial.println(WiFi.softAPIP());
а так нет:

Код:
ip = WiFi.softAPIP();
ip объявлен в начале вот так:

Код:
IPAddress ip;
в github смотрю ESP8266WiFiAP.h и вижу:

Код:
public:

        bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0);
        bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);
        bool softAPdisconnect(bool wifioff = false);

        uint8_t softAPgetStationNum();

        IPAddress softAPIP();      <- вот она, IPAddress как у меня и объявлена, зараза

        uint8_t* softAPmacAddress(uint8_t* mac);
        String softAPmacAddress(void);
ок, думаю смотрю ESP8266WiFiSTA.h и вижу:

Код:
 public:

--------------------*********--------------------

        // STA network info
        IPAddress localIP();   <- ну вот же она, точно такая же (

        uint8_t * macAddress(uint8_t* mac);
        String macAddress();
Как так то? О_о

И в AP и в STA - одинаковое объявление и в обоих случаях в Public. Но в случае с STA в переменную ip загоняется адрес, а в случае с AP - нет. Даже не могу представить с чем это может быть связано :(
 

pet

Member
Пока писал похоже догадался в чем проблема, вот так работает:

Код:
Serial.println(WiFi.softAPIP());
а так нет:

Код:
ip = WiFi.softAPIP();
ip объявлен в начале вот так:

Код:
IPAddress ip;
в github смотрю ESP8266WiFiAP.h и вижу:

Код:
public:

        bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0);
        bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);
        bool softAPdisconnect(bool wifioff = false);

        uint8_t softAPgetStationNum();

        IPAddress softAPIP();      <- вот она, IPAddress как у меня и объявлена, зараза

        uint8_t* softAPmacAddress(uint8_t* mac);
        String softAPmacAddress(void);
ок, думаю смотрю ESP8266WiFiSTA.h и вижу:

Код:
 public:

--------------------*********--------------------

        // STA network info
        IPAddress localIP();   <- ну вот же она, точно такая же (

        uint8_t * macAddress(uint8_t* mac);
        String macAddress();
Как так то? О_о

И в AP и в STA - одинаковое объявление и в обоих случаях в Public. Но в случае с STA в переменную ip загоняется адрес, а в случае с AP - нет. Даже не могу представить с чем это может быть связано :(
Насколько я помню, для присвоения одного объекта другому нужна перегрузка!
я исходники не ковырял, но сильно сомневаюсь что это один и тот-же тип!

определить в каком режиме работает железка,
я режим определяю так wifi_get_opmode(); //режим 0x01: station mode 0x02: soft-AP mode 0x03: station+soft-AP
 

whiteud

New member
Насколько я помню, для присвоения одного объекта другому нужна перегрузка!
я исходники не ковырял, но сильно сомневаюсь что это один и тот-же тип!


я режим определяю так wifi_get_opmode(); //режим 0x01: station mode 0x02: soft-AP mode 0x03: station+soft-AP
Ну режим определяется четко, вот IP адрес в режиме точки доступа никак определить не могу (
 
Сверху Снизу