• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Каждые 5 минут WiFi.localIP() выдает нулевой (0.0.0.0) ip-адрес

Paul_B

Member
Случайно столкнулся с таким фактом, который не могу понять. Имеется два модуля ESP8266-07. На обоих запущено одинаковый скетч, один модуль подключен к домашней сети и на нем создана точка доступа, к которой подключен второй модуль, на том тоже создана точка доступа, но к нейничто не подключено.
В залитых скетчах в цикле каждую секунду происходит опрос локального IP-адреса.
Код:
if ( WiFi.status() == WL_CONNECTED )
  if(ip!=WiFi.localIP() || gateway!=WiFi.gatewayIP())
    {
     ip=WiFi.localIP();
     gateway=WiFi.gatewayIP();
     subnet=WiFi.subnetMask(); 
     Serial.println("\n IP address: "+IP_to_String(ip));
     Serial.println("Subnet "+IP_to_String(subnet));
     Serial.println("Gate "+IP_to_String(gateway));
     Serial.println("DNS "+IP_to_String(WiFi.dnsIP()));   
     Send(gateway, 80, "/connect?func=connect&from_ip="+IP_to_String(ip)+"&chip="+Chip_id+"&module="+String(Module_ID));   
     }
Так вот, на том модуле, что подключен к домашней сети все нормально, а на другом такая картина:
Код:
11:06:29 IP address: 192.168.5.100
Subnet 255.255.255.0
Gate 192.168.5.1
DNS 192.168.5.1
11:06:29 Send to IP 192.168.5.1
message:/connect?func=connect&from_ip=192.168.5.100&chip=D124E6&module=1&id=963
Client connect...
Answer: OK 963

11:11:30 IP address: 0.0.0.0
Subnet 0.0.0.0
Gate 0.0.0.0
DNS 192.168.5.1
11:11:30 Send to IP 0.0.0.0
message:/connect?func=connect&from_ip=0.0.0.0&chip=D124E6&module=1&id=843
Connection failed to 0.0.0.0

11:11:37 IP address: 192.168.5.100
Subnet 255.255.255.0
Gate 192.168.5.1
DNS 192.168.5.1
11:11:37 Send to IP 192.168.5.1
message:/connect?func=connect&from_ip=192.168.5.100&chip=D124E6&module=1&id=843
Client connect...
Answer: OK 843

11:16:40 IP address: 0.0.0.0
Subnet 0.0.0.0
Gate 0.0.0.0
DNS 192.168.5.1
11:16:40 Send to IP 0.0.0.0
message:/connect?func=connect&from_ip=0.0.0.0&chip=D124E6&module=1&id=313
Connection failed to 0.0.0.0

11:16:47 IP address: 192.168.5.100
Subnet 255.255.255.0
Gate 192.168.5.1
DNS 192.168.5.1
11:16:47 Send to IP 192.168.5.1
message:/connect?func=connect&from_ip=192.168.5.100&chip=D124E6&module=1&id=313
Client connect...
Answer: OK 313

11:21:49 IP address: 0.0.0.0
Subnet 0.0.0.0
Gate 0.0.0.0
DNS 192.168.5.1
11:21:49 Send to IP 0.0.0.0
message:/connect?func=connect&from_ip=0.0.0.0&chip=D124E6&module=1&id=266
Connection failed to 0.0.0.0

11:21:56 IP address: 192.168.5.100
Subnet 255.255.255.0
Gate 192.168.5.1
DNS 192.168.5.1
11:21:56 Send to IP 192.168.5.1
message:/connect?func=connect&from_ip=192.168.5.100&chip=D124E6&module=1&id=266
Client connect...
Answer: OK 266

11:26:58 IP address: 0.0.0.0
Subnet 0.0.0.0
Gate 0.0.0.0
DNS 192.168.5.1
11:26:58 Send to IP 0.0.0.0
message:/connect?func=connect&from_ip=0.0.0.0&chip=D124E6&module=1&id=875
Connection failed to 0.0.0.0

11:27:05 IP address: 192.168.5.100
Subnet 255.255.255.0
Gate 192.168.5.1
DNS 192.168.5.1
11:27:05 Send to IP 192.168.5.1
message:/connect?func=connect&from_ip=192.168.5.100&chip=D124E6&module=1&id=875
Client connect...
Answer: OK 875
И так бесконечно долго. Периодичность в 5 минут 02 (или 03 ) секунды (хотя опрос идет каждую секунду), а потом через 7 секунд восстановление показаний правильного ip-адреса непонятна.
Может кто-то объяснить сей факт? Точка доступа на первом модуле не отваливается, т.к. ведется количество подключенных клиентов по команде WiFi.softAPgetStationNum(), которая не выявляет ничего подозрительного (как только я с ноутбука подключаюсь вторым клиентом и отключаюсь, то программа это отслеживает и выводит на печать количество подключенных клиентов 2 и потом опять 1) WiFi.status() на втором модуле тоже все время показывает, что он подключен.
 
Последнее редактирование:

Юрий Ботов

Moderator
Команда форума
ip фиксированный или по dhcp? что вообще за скетч? роутинг есть какой то или точка-точка?
 

Paul_B

Member
ip фиксированный или по dhcp? что вообще за скетч? роутинг есть какой то или точка-точка?
Поменял модули местами - тот же эффект у второго подключенного (DHCP). Убрал режим DHCP (прописав статический адрес) и эффект пропал. Т.е. нет изменения ip. Интересно, в чем дело. Внутри цикла ничего не происходит (пока) - установил процедуру проверки IP, т.к. планирую реализацию древовидного подключения модулей и случайно наткнулся на такую вот зависимость.
 

Юрий Ботов

Moderator
Команда форума
А что удивительного? Если в модуле не поднят DHCP сервер и нет DHCP relay, не настроен роутинг... чего вы от него хотите?
 

Paul_B

Member
А что удивительного? Если в модуле не поднят DHCP сервер и нет DHCP relay, не настроен роутинг... чего вы от него хотите?
Я ничего не хочу. На обоих модулях реализована точка доступа, На обоих модулях стоят HTTP-сервера и TCP-клиенты. Меня удивляет закономерность. Если я прописываю статический адрес при подключении одного модуля к другому, то все замечательно, если говорю, что dhcp-подключение, то ровно каждые 5 минут наблюдение за его IP-адресом показывает значение (0.0.0.0) вместо, скажем (192.168.5.100) и потом ровно через 7 секунд адрес опять становится (192.168.5.100).
Вот акая закономерность мне удивительна.
 

gerkimuyda

New member
Paul_B, ищите проблему не в dhcp, а в причинах отвала.
Попробуйте объединить этот пример: Arduino/WiFiEvents.ino at master · esp8266/Arduino · GitHub
с следующим кодом:
Код:
extern "C" {
#include "user_interface.h"
}
void wifi_handle_event_cb(System_Event_t *evt) {
  Serial.print("\r\n[%s] WiFi: ");
  switch (evt->event) {
    case EVENT_STAMODE_CONNECTED: Serial.printf("Connected to ssid: '%s',  channel: %d", evt->event_info.connected.ssid, evt->event_info.connected.channel); break;
    case EVENT_STAMODE_DISCONNECTED: Serial.printf("Disconnected from ssid: '%s',  reason: %s", evt->event_info.disconnected.ssid, WIFI_REASON[evt->event_info.disconnected.reason]); break;
    case EVENT_STAMODE_AUTHMODE_CHANGE: Serial.printf("Auth-mode: %d -> %d", evt->event_info.auth_change.old_mode, evt->event_info.auth_change.new_mode); break;
    case EVENT_STAMODE_GOT_IP: Serial.printf("Received ip: " IPSTR ",  mask: " IPSTR ",  gw: " IPSTR, IP2STR(&evt->event_info.got_ip.ip), IP2STR(&evt->event_info.got_ip.mask), IP2STR(&evt->event_info.got_ip.gw)); break;
    case EVENT_SOFTAPMODE_STACONNECTED: Serial.printf("Station: " MACSTR "join,  AID = %d", MAC2STR(evt->event_info.sta_connected.mac), evt->event_info.sta_connected.aid); break;
    case EVENT_SOFTAPMODE_STADISCONNECTED: Serial.printf("Station: " MACSTR "leave,  AID = %d", MAC2STR(evt->event_info.sta_disconnected.mac), evt->event_info.sta_disconnected.aid); break;
    default: Serial.printf("Unknown."); break;
  }
}
/*в setup --> */ wifi_set_event_handler_cb(wifi_handle_event_cb);
 

Сергей_Ф

Moderator
Команда форума
@Paul_B, что у вас является DHCP-сервером при соединении с другой esp? Подсказка: ничего. Потому и сбрасывается адрес и переназначается по новой. Каждые 5 минут. Что удивительного? Ставьте статический адрес или пробрасывайте DHCP.
 
Сверху Снизу