Wat is mDNS?

Wanneer je een ESP-module in je WiFi-netwerk hebt waarmee je connectie wilt maken vanuit bijv. je laptop of je telefoon, dan moet je het IP-adres weten. Maar dat wordt veelal dynamisch uitgedeeld door de WiFi-router en dat moet je dan gaan gokken: je kunt de IP-range waarbinnen de router IP-adressen uitdeelt, achterhalen aan de hand van het IP-adres van je laptop. Als je dan het laatste getal laat oplopen van 1 tot 255 dan kom je meestal wel bij het gezochte device uit.
Maar dit is natuurlijk super omslachtig.
In Windows-netwerken wordt dit vaak opgelost door elke PC of laptop een herkenbare HostName te geven, bijv. ‘LAPTOP-BEN’. De devices zijn dan ‘by name’ te benaderen.
Een vergelijkbare oplossing die bij ESP’s werkt, is het gebruik van mDNS (multicast DNS). Daarbij krijgt de ESP een ‘naam’ waarna dit device is te benaderen via [naam].local
. Dat .local
moet er echt achter geplakt worden.
Implementatie met Arduino libraries
Ik gebruikte bij deze experimenten de Arduino IDE versie 1.8.19.
Hieraan toegevoegd was de Boards-set ‘esp8266’, by ESP5266 Community version 3.0.2.
includes
#include <ESP8266mDNS.h>
Deze unit is onderdeel van de ESP8266-Board-installatie.
setup()
void initMDSN() {
SerialLogger->println("mDNS responder started");
SerialLogger->println("Error setting up MDNS responder!");
MDNS.addService("http", "tcp", 80);
}
Nog uitzoeken: is die addService()
perse nodig? Want ping eps.local
blijkt ook te werken, dat is geen http. Is dat te danken aan die “tcp” ?
loop()
In de loop-functie moet je dit statement toevoegen:
MDNS.update();
Dit vond ik overigens pas na lang zoeken – en bijna ten einde raad – in deze forum-draad: https://forum.arduino.cc/t/mdns-not-working-esp8226/925304/9.
Veel voorbeelden noemen dit statement niet. Bij mij – en voor iedereen? – bleek dit wel essentieel.
Testresultaten
Bovenstaande code heb ik toegevoegd aan een bestaande applicatie op ESP8266. Deze applicatie bevat ook een HTTP-server.
Vervolgens heb ik vanaf verschillende apparaten geprobeerd om met mDNS verbinding te krijgen met de ESP. Dat deed ik vanuit een browser: http://esp.local/index.htm of met het Ping-commando vanuit een DOS-box of Linux Terminal: ping esp.local
. Uiteraard werd er eerst een WiFi verbinding gelegd met de ESP.
De testresultaten staan in de tabel hieronder.
Omgeving | mDNS werkt wel/niet |
---|---|
Windows 10 + FireFox | Niet |
Windows 10 + Edge | Wel |
Windows 10 + Ping | Wel |
Linux Debian + FireFox | Wel |
Linux Debian + Ping | Wel |
Samsung Galaxy A51 + Samsung browser | Niet |
De versies van de software zijn die van rond november 2024.