• Система автоматизации с открытым исходным кодом на базе 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.
 
Сверху Снизу