Découvrez comment configurer le DNS multidiffusion (mDNS) sur votre ESP32 programmé avec l’IDE Arduino. mDNS vous permet de faire référence à votre ESP32 en utilisant un nom convivial au lieu de son adresse IP. Par exemple, au lieu d’avoir à saisir l’adresse IP ESP32 pour accéder à un serveur Web dans votre navigateur sur votre réseau local, vous pouvez simplement utiliser quelque chose comme http://esp32.local.

Qu’est-ce que le mDNS ?
mDNS, ou Multicast DNS, vous permet d’attribuer des noms spécifiques aux appareils de votre réseau local, chacun associé à son adresse IP spécifique. De cette façon, vous pouvez y faire référence via ce nom au lieu de l’adresse IP.
mDNS pour l’ESP32
De cette façon, au lieu d’avoir à mémoriser les adresses IP spécifiques de plusieurs de vos cartes ESP32 sur votre réseau, vous pouvez simplement donner un nom à chacune d’entre elles, par exemple esp32-room, esp32-lights. Ensuite, vous pouvez y accéder sur votre réseau en utilisant http://esp32-room.local, par exemple, au lieu d’avoir à mémoriser ou noter l’adresse IP spécifique de chaque carte.
Comment configurer mDNS sur un ESP32 (Arduino IDE) ?
La configuration de mDNS sur un ESP32 programmé avec l’IDE Arduino est assez simple et ne nécessite que l’ajout de quelques lignes à votre code existant.
1) Tout d’abord, incluez la bibliothèque ESPmDNS.
#include
2) Dans le setup() de votre code, après vous être connecté à votre réseau, définissez mDNS en utilisant les lignes suivantes. Transmettez le nom d’hôte souhaité à la fonction start(), celle qui sera utilisée dans l’URL lorsque vous accéderez à un serveur Web ESP32.
if (!MDNS.begin(mdnsName)) {
Serial.println("Error setting up MDNS responder!");
while(1) {
delay(1000);
}
}
3) Enfin, annoncez le service Web HTTP de votre ESP32 (sur le port TCP 80).
MDNS.addService("_http", "_tcp", 80);
Serveur Web ESP32 avec mDNS
Pour vous montrer comment implémenter mDNS, nous allons vous montrer un serveur Web de base « Hello World » avec cette fonctionnalité implémentée.
Pour accéder à ce serveur Web sur votre navigateur, au lieu d’avoir à saisir votre adresse IP ESP32, vous pouvez saisir http://myesp32.local
Voici l’exemple de code.
/*
Rui Santos & Sara Santos - Raspberryme.com
Complete project details at https://Raspberryme.com/esp32-mdns-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include
#include
#include
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// mDNS name (customize this as needed)
const char* mdnsName = "myesp32";
// Create a web server object
WebServer server(80);
// Function to handle the root URL
void handleRoot() {
String html = "";
html += "";
html += "";
html += "";
html += "";
html += "ESP32 mDNS Demo.
";
html += "";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
// Connect to Wi-Fi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set mDNS
if (!MDNS.begin(mdnsName)) {
Serial.println("Error setting up MDNS responder!");
while(1) {
delay(1000);
}
}
// Add service to MDNS-SD
MDNS.addService("_http", "_tcp", 80);
Serial.println("mDNS responder started. Access your ESP32 at http://" + String(mdnsName) + ".local");
// Set up the web server to handle route
server.on("/", handleRoot);
// Start the web server
server.begin();
Serial.println("HTTP server started");
}
void loop() {
// Handle incoming client requests
server.handleClient();
}
Afficher le code brut
Comment fonctionne le code ?
Pour simplifier les choses, nous créons le serveur Web à l’aide de la bibliothèque WebServer intégrée au noyau ESP32.
#include
Nous avons déjà expliqué en détail comment créer des serveurs Web simples à l’aide de cette bibliothèque dans le didacticiel suivant :
Nous allons donc simplement expliquer les parties pertinentes du code pour ce didacticiel.
Y compris la bibliothèque mDNS
Comme nous l’avons mentionné précédemment, vous devez inclure la bibliothèque ESPmDNS.
#include
Informations d’identification réseau
Insérez vos informations d’identification réseau sur les lignes suivantes afin que l’ESP32 puisse se connecter à votre réseau local.
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Nom d’hôte mDNS
Ajoutez le nom d’hôte souhaité. Dans notre cas, nous l’appelons myesp32, mais vous pouvez lui donner un nom différent.
const char* mdnsName = "myesp32";
Configurer mDNS
Dans le setup(), après avoir initialisé le Wi-Fi et imprimé l’adresse IP de la carte…
// Connect to Wi-Fi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
…Nous définissons mDNS en utilisant les lignes de code suivantes :
// Set mDNS
if (!MDNS.begin(mdnsName)) {
Serial.println("Error setting up MDNS responder!");
while(1) {
delay(1000);
}
}
// Add service to MDNS-SD
MDNS.addService("_http", "_tcp", 80);
Serial.println("mDNS responder started. Access your ESP32 at http://" + String(mdnsName) + ".local");
Et c’est tout. Vous pouvez utiliser cette méthode pour n’importe lequel de vos projets IoT.
Démonstration
Téléchargez le code précédent sur votre carte ESP32. Ensuite, ouvrez le moniteur série à un débit en bauds de 115 200 et appuyez sur le bouton ESP32 RST pour qu’il commence à exécuter le code.
Il imprimera l’adresse IP de la carte et le lien pour accéder au serveur Web en utilisant le nom d’hôte que vous avez donné dans le code. Dans mon cas, j’accéderai au serveur Web ESP32 à l’adresse http://myesp32.local.

Ouvrez un navigateur sur votre réseau local et tapez http://myesp32.local, ou tout autre nom que vous avez donné (vous devez ajouter le .local à la fin), et vous devriez avoir accès au serveur Web.

Il s’agit simplement d’un simple serveur Web à des fins de test, mais cela peut être appliqué à n’importe quel autre serveur Web, application Web, etc.
Plusieurs appareils avec le même nom d’hôte
Lorsque vous utilisez la bibliothèque ESPmDNS, si vous donnez le même nom d’hôte qu’un appareil qui existe déjà sur le réseau local, la bibliothèque le gérera automatiquement et ajoutera un suffixe au nom. Par exemple, si esp32.local existe déjà, il le renommera esp32-2.local, et ainsi de suite. La bibliothèque le fait en arrière-plan.
Pour connaître le nom d’hôte réel attribué au périphérique, nous devons utiliser davantage de fonctions de bas niveau telles que mdns_hostname_get() incluses dans la bibliothèque mdns.h d’ESP-IDF.
Le code suivant est similaire à l’exemple précédent, mais il utilise la fonction mdns_hostname_get() pour obtenir le nom d’hôte réel attribué au périphérique. Ceci est utile si vous donnez par erreur le même nom d’hôte à plusieurs appareils ou s’il existe déjà un autre appareil portant le même nom sur le réseau.
/*
Rui Santos & Sara Santos - Raspberryme.com
Complete project details at https://Raspberryme.com/esp32-mdns-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include
#include
#include
#include // For low-level mDNS functions from ESP-IDF
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// mDNS name (customize this as needed)
const char* mdnsName = "myesp32";
// Create a web server object
WebServer server(80);
// Function to handle the root URL
void handleRoot() {
String html = "";
html += "";
html += "";
html += "";
html += "";
html += "ESP32 mDNS Demo.
";
html += "";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
// Connect to Wi-Fi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set mDNS
if (!MDNS.begin(mdnsName)) {
Serial.println("Error setting up MDNS responder!");
while(1) {
delay(1000);
}
}
delay(5000);
// Add service to MDNS
MDNS.addService("_http", "_tcp", 80);
// Retrieve and print the actual (resolved) hostname - checking if there are any conflicts in the network
char actualHostname[MDNS_NAME_BUF_LEN]; // MDNS_NAME_BUF_LEN is 64 from mdns.h
esp_err_t err = mdns_hostname_get(actualHostname);
if (err == ESP_OK) {
String actualName = String(actualHostname);
Serial.println("mDNS responder started. Given name: " + String(mdnsName));
Serial.println("Current hostname: http://" + actualName + ".local");
if (actualName != mdnsName) {
Serial.println("Hostname renamed.");
}
} else {
Serial.println("Failed to retrieve current hostname (error: " + String(err) + ")");
}
// Set up the web server to handle route
server.on("/", handleRoot);
// Start the web server
server.begin();
Serial.println("HTTP server started");
}
void loop() {
// Handle incoming client requests
server.handleClient();
}
Afficher le code brut
Comment fonctionne le code ?
Dans ce code, nous incluons la bibliothèque mdns.h d’ESP-IDF.
#include // For low-level mDNS functions from ESP-IDF
Après avoir configuré mDNS sur l’ESP32, nous utilisons la fonction mdns_hostname_get() pour obtenir le nom d’hôte réel attribué à l’appareil.
// Retrieve and print the actual (resolved) hostname - checking if there are any conflicts in the network
char actualHostname[MDNS_NAME_BUF_LEN]; // MDNS_NAME_BUF_LEN is 64 from mdns.h
esp_err_t err = mdns_hostname_get(actualHostname);
if (err == ESP_OK) {
String actualName = String(actualHostname);
Serial.println("mDNS responder started. Given name: " + String(mdnsName));
Serial.println("Current hostname: http://" + actualName + ".local");
if (actualName != mdnsName) {
Serial.println("Hostname renamed.");
}
} else {
Serial.println("Failed to retrieve current hostname (error: " + String(err) + ")");
}
Tester le code
Pour tester ce code, vous devez laisser le code précédent s’exécuter sur une autre carte. Ensuite, téléchargez ce nouveau code sur un autre tableau.
Puisque nous essayons d’utiliser le nom d’hôte myesp32 déjà utilisé par le périphérique précédent, la bibliothèque changera automatiquement le nom d’hôte en myesp32-2.

De la même manière, vous pouvez accéder au serveur web sur http://myesp32-2.local sur votre navigateur web.

Conclusion
Dans ce didacticiel, vous avez appris à utiliser et à configurer mDNS sur vos cartes ESP32 programmées avec l’IDE Arduino. mDNS vous permet d’attribuer des noms d’hôte spécifiques à vos appareils sur votre réseau local. De cette façon, vous pouvez y faire référence en utilisant le nom d’hôte, qui est plus convivial, plutôt que l’adresse IP.
Grâce à la bibliothèque mDNS.h, il est assez simple d’ajouter cette fonctionnalité à vos projets de serveur Web ESP32.
Nous espérons que vous avez trouvé ce tutoriel utile.
Apprenez-en plus sur l’ESP32 avec nos ressources :
Cette vidéo vous emmène dans l’histoire de Raspberry Pi :

-
KEYESTUDIO ESP32 Smart Home IoT Kit Compatible avec Arduino IDE, avec ESP32 Board, Python C, Musical Project, etc. Tutoriel en Ligne 13 Fonctions
-
ELEGOO Carte Starter Kit de Démarrage ESP-32 avec Tutoriel et Carte de Développement Microcontrôleur Double Cœur USB-C Prise en Charge AP/STA/AP+STA, Compatible avec Arduino IDE
