esp8266 / esp8266/Arduino

MDNS does not start during setup, if use With ArduinoOTA

Open
#7,861 12 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
16.7k
Forks
13.1k
PR merge metrics
No merged PRs in 30d

Description

#### Platform

- Hardware: [ESP8285 device]
- Core Version: [latest git]
- Development Env: [Arduino IDE]
- Operating System: [Windows]

### Settings in IDE

- Module: [Nodemcu]
- Flash Size: [4MB]
- lwip Variant: [v2 Lower Memory or Higher Bandwidth]
- Reset Method: [nodemcu]
- Flash Frequency: [40Mhz]
- CPU Frequency: [80Mhz]
- Upload Using: [SERIAL]
- Upload Speed: 115200

### Problem Description

After enabling mdns during setup, ot does not work. Although the ip is available. If you reconnect (by its function) after losing the connection, it is available. Which looks weird.

Setup:
### [MCVE](https://stackoverflow.com/help/mcve) Sketch

```cpp

Serial.println(F("WIFIConnectInternet() start"));
WiFi.softAPdisconnect();
if (WiFi.SSID() != "") {
Serial.println(F("WiFi credentials set in flash, wiping them"));
WiFi.disconnect(true);
}
if (WiFi.getAutoConnect()) {
Serial.println(F("Disabling auto-connect"));
WiFi.setAutoConnect(false);
}
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
delay(100);

byte tries = 11;
String _ssid = jsonRead(configSetup, "ssid");
String _password = jsonRead(configSetup, "password");
if (_ssid == "" && _password == "") {
WiFi.begin("null","null");
}
else {
WiFi.begin(_ssid.c_str(), _password.c_str());
}


while (--tries && WiFi.status() != WL_CONNECTED) //ждем подключения.
{
Serial.print(".");
yield();
delay(1000);
}

if (WiFi.status() != WL_CONNECTED) {
//не удалось....
Serial.println(F("NO CONNECT ROUTER!\n"));
} else {
// удалось подключиться, говорим о подключении и выводим адрес IP
connectMode=1;
delay(150);
if (!MDNS.begin(DNS_NAME,WiFi.localIP()))
{
Serial.printf("Cannot restart mDNS responder\n");
}
else
{
Serial.printf("mDNS responder Started, IP is: %s\n", WiFi.localIP().toString().c_str());
}
delay(150);
MDNS.addService("http", "tcp", 80);
MDNS.addService("ws", "tcp", 81);
}

```

All right, he's connected:
```
13:18:14.591 -> WIFIConnectInternet() start
13:18:14.694 -> Disabling auto-connect
13:18:14.797 -> ......mDNS responder Started, IP is: 192.168.31.83
```

but DNS_NAME remains unavailable. Although 192.168.31.83 is available

I also use the connection check function, and if the connection is lost, it disables DNS and connects it when the connection is restored. After that, DNS_NAME works.

loop: CheckConnect();
```cpp
void CheckConnect(){
static int lastStatus = WiFi.status();

if (WiFi.status() != WL_CONNECTED && lastStatus == WL_CONNECTED ){
Serial.printf("Интернета нет...... OFF MDNS! \n");
MDNS.end(); //завершаем.
delay(150);
}

if (WiFi.status() == WL_CONNECTED && lastStatus != WL_CONNECTED ){ //если интернета небыло, и он появился:
Serial.printf("Connected, IP is: %s\n", WiFi.localIP().toString().c_str());
delay(150);
Serial.printf("MDNS begin 1 \n");
if (!MDNS.begin(DNS_NAME,WiFi.localIP())) //пытаемся запустить днс на новом ип.
{
Serial.printf("Cannot restart mDNS responder\n");
}
else
{
Serial.printf("mDNS responder restarted\n");
}
delay(50);
Serial.printf("MDNS addService 2 \n");
MDNS.addService("http", "tcp", 80); yield(); //запускаем сервисы.
MDNS.addService("ws", "tcp", 81); yield();
delay(150);
}
lastStatus = WiFi.status();
yield();
};

```

I specifically checked by turning off the Internet:
```
13:20:07.828 -> Интернета нет...... OFF MDNS!
13:20:13.378 -> FreeHeap: 40504 -- Uptime: 00:02:00
13:20:18.574 -> Connected, IP is: 192.168.31.83
13:20:18.711 -> MDNS begin 1
13:20:18.711 -> mDNS responder restarted
13:20:18.745 -> MDNS addService 2
```

After that, the DNS works...

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.