• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 адрес в режиме точки доступа никак определить не могу (
 
Сверху Снизу