تنظیم mDNS برد ESP32 (تنظیم آدرس متنی برای برد بجای IP)

اگر یک ESP32 در شبکه خود دارید، می توانید با استفاده از آدرس IP آن (مثلاً 192.168.1.128) به آن متصل شوید. اما تصور کنید چندین ESP32 در اطراف خانه شما پراکنده است. ناگهان متوجه خواهید شد که نیاز دارید چندین آدرس IP را به خاطر بسپارید که به طرز وحشتناکی وقت گیر است. برای بهتر کردن شرایط، ما از mDNS استفاده میکنیم.
mDNS به شما این امکان را می دهد که به جای اینکه با آدرس IP سر و کار داشته باشید، با استفاده از یک نام میزبان کاربر پسند، مانند “esp32.local” به وب سرور در حال اجرا بر روی ESP32 خود دسترسی داشته باشید. حتی اگر آدرس IP ESP32 شما تغییر کند، mDNS به طور خودکار آدرس IP جدید را به همان نام میزبان تنظیم می کند. این بدان معنی است که می توانید بدون نگرانی در مورد پیگیری تغییرات آدرس IP، از همان نام میزبان استفاده کنید.
در این آموزش گام به گام نحوه راه اندازی mDNS در ESP32 را یاد خواهید گرفت. اما ابتدا اجازه دهید در مورد چیستی mDNS صحبت کنیم.
mDNS چیست؟
سی سال پیش، زمانی که اینترنت هنوز در مراحل اولیه خود بود، اگر می خواستید از یک وب سایت بازدید کنید، باید آدرس IP آن را می دانستید. این به این دلیل بود که رایانه ها فقط با استفاده از اعداد می توانستند ارتباط برقرار کنند.
آدرس IP مانند 127.33.54.200 را در نظر بگیرید: طولانی است، به خاطر سپردن آن سخت است و مطمئناً کاربر پسند نیست. ما به راهی برای ترجمه این آدرس های IP قابل خواندن توسط ماشین به چیزی قابل درک تر نیاز داشتیم.
در اوایل دهه 1980، پل موکاپتریس یک سیستم انقلابی را معرفی کرد که آدرس های IP را به نام های دامنه به یاد ماندنی تر تبدیل می کرد و سیستم نام دامنه (DNS) متولد شد. این سیستم پایه و اساس اینترنت امروزی است.
وقتی نام دامنه ای مانند google.com را در مرورگر خود تایپ می کنید، از سرور رکورد های DNS می پرسد که آیا سوابق DNS آن دامنه را دارند یا خیر. یک رکورد DNS فقط فایلی است که می گوید “این دامنه” به “این آدرس IP” متصل می شود. به عنوان مثال، نام دامنه google.com ممکن است به یک آدرس IP مانند 142.250.189.174 مرتبط باشد.
DNS یکی از پایه های نحوه کار اینترنت است. بدون آن، ما نمیتوانیم به راحتی در اینترنت جستجو کنیم.
اما در شبکه خانگی محلی (وب سرور های لوکال) چطور؟ در چنین محیطی که دستگاهها اغلب روشن و خاموش میشوند، به شبکه میپیوندند و از شبکه خارج میشوند و اغلب آدرسهای IP پویا دارند، این سیستم غیرعملی میشود، زیرا استقرار یک سرور اختصاصی فقط برای تبدیل نام میزبان به آدرسهای IP راهحلی امکانپذیر نیست. آیا راه ساده تری وجود دارد؟ بله، در واقع به آن Multicast DNS می گویند که به اختصار mDNS نامیده می شود.
mDNS یک پروتکل غیرمتمرکز و P2P است که به طور خاص برای شبکه های کوچک طراحی شده است. این دستگاه ها را قادر می سازد تا آدرس های IP یکدیگر را کشف کنند. این کار با اجازه دادن به هر دستگاه برای پخش نام و آدرس IP خود به هر دستگاه دیگری در شبکه کار می کند. بدیهی است که این رویکرد برای اینترنت به خوبی کار نمیکند، اما برای سرور های لوکال عالی است.
ویژگی ها و مزایای کلیدی mDNS
- نامهای میزبان کاربر پسند: به جای آدرسهای IP، میتوان به دستگاههای موجود در شبکه با استفاده از نامهای میزبانی که به راحتی به خاطر سپرده میشوند، مانند “esp32.local” دسترسی داشت.
- مدیریت IP پویا: حتی اگر آدرس IP دستگاه تغییر کند، mDNS از حل آدرس IP جدید با همان نام میزبان مراقبت می کند.
- پیکربندی صفر: نیازی به تنظیم DNS اضافی نیست، زیرا mDNS به صورت مستقل در شبکه های محلی عمل می کند.
- استقلال پلتفرم: mDNS را می توان در دستگاه ها و سیستم عامل های مختلف استفاده کرد و یکپارچه سازی را انجام داد.
بیایید گام به گام نحوه تنظیم mDNS در ESP32 را بررسی کنیم.
تنظیم mDNS در برد های ESP32
ما از Arduino IDE برای برنامه نویسی ESP32 استفاده خواهیم کرد، بنابراین لطفاً قبل از ادامه، مطمئن شوید که برد های ESP32 را در نرم افزار آردوینو خود نصب کرده اید. برای اتصال برد ESP32 خود به رایانه از یک کابل میکرو USB استفاده کنید.
کد کامل این تنظیم در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مختلف کد توضیح داده میشود. در اینجا یک کد ساده وجود دارد که راه اندازی mDNS را در یک برد ESP32 نشان می دهد. این کد به یک شبکه Wi-Fi متصل می شود، یک سرویس mDNS را راه اندازی می کند و یک سرور HTTP برای ارائه یک صفحه وب ساده ایجاد می کند. پس از آپلود، باید بتوانید با پیمایش به http://esp32.local/ در یک مرورگر وب، به وب سرور دسترسی داشته باشید.
توضیح مرحله به مرحله کد تنظیم نام هاست
طرح با گنجاندن کتابخانههای لازم آغاز میشود: WiFi.h برای اتصال به شبکه، WebServer.h برای راهاندازی سرور HTTP و ESPmDNS.h برای خدمات mDNS.
#include <WiFi.h> #include <WebServer.h> #include <ESPmDNS.h>
در ادامه دو ثابت ssid و password تعریف می شوند. اینها متغیرهایی برای نام (SSID) و رمز عبور شبکه Wi-Fi شما هستند.
const char* ssid = "YourNetworkName"; // Enter SSID here const char* password = "YourPassword"; //Enter Password here
خط بعدی یک آبجکت وب سرور ایجاد می کند که به پورت 80 مربوط میشود (پورت HTTP پیش فرض).
WebServer server(80);
در تابع setup() ابتدا ارتباط سریال با کامپیوتر را راه اندازی می کنیم.
Serial.begin(115200);
سپس ESP32 با استفاده از تابع WiFi.begin که SSID (نام شبکه) و رمز عبور را به عنوان آرگومان می پذیرد، سعی می کند به شبکه WiFi بپیوندد.
WiFi.begin(ssid, password);
در حالی که ESP32 تلاش می کند به شبکه متصل شود، می توانیم وضعیت اتصال را با استفاده از تابع ()WiFi.status بررسی کنیم.
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
} در مرحله بعد، ما به سادگی متد begin() را در یک متغیر خارجی به نام MDNS برای راه اندازی سرویس mDNS فراخوانی می کنیم. این متغیر MDNS نمونه ای از کلاس MDNSResponder است.
فراخوانی متد begin() که قبلا ذکر شد در زیر نشان داده شده است. به عنوان آرگومان متد، نام میزبان مورد نظر (که در URL استفاده خواهد شد) را ارسال می کنیم. توجه به این نکته ضروری است که نام میزبان نباید بیشتر از 63 کاراکتر باشد.
if (!MDNS.begin("esp32")) { // Set the hostname to "esp32.local"
Serial.println("Error setting up MDNS responder!");
while(1) {
delay(1000);
}
} کد زیر به سادگی یک کنترل کننده برای URL تنظیم می کند. هنگامی که شخصی به URL دسترسی پیدا می کند، handle_OnConnect() فراخوانی می شود. همچنین کنترل کننده ای را تنظیم می کند که زمانی که URL درخواستی در سرور یافت نمی شود فراخوانی می شود.
server.on("/", handle_OnConnect);
server.onNotFound(handle_NotFound); در نهایت برای راه اندازی سرور، متد ()fill را روی آبجکت سرور فراخوانی می کنیم.
server.begin();
تابع loop() به طور مداوم درخواست های ورودی را بررسی می کند و با فراخوانی متد handleClient() روی آبجکت سرور آنها را مدیریت می کند.
void loop() {
server.handleClient();
} handle_OnConnect() تابعی است که با دسترسی به URL ریشه (“/”) یک پاسخ HTML را به مشتری ارسال می کند. با استفاده از متد server.send() یک صفحه HTML ساده ارسال می کند.
متد server.send() کد پاسخ HTTP، نوع محتوا و خود محتوا را به عنوان آرگومان می پذیرد. در مورد ما، ما کد 200 (یکی از کدهای وضعیت HTTP) را ارسال می کنیم که با پاسخ OK مطابقت دارد (که نشان می دهد درخواست با موفقیت پردازش شده است). سپس نوع محتوا را به عنوان “text/html” مشخص می کنیم. در نهایت، ما یک رشته طولانی داریم که چیزی جز کد HTML نیست که یک صفحه وب ساده ایجاد می کند که پیام «Hey there!» را نمایش می دهد.
void handle_OnConnect() {
server.send(200, "text/html", "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\"></head><body><h1>Hey there!</h1></body></html>");
} اگر سرور درخواستی برای URL دریافت کرد که در سرور وجود ندارد، handle_NotFound() یک پاسخ 404 Not Found ارسال می کند.
void handle_NotFound(){
server.send(404, "text/plain", "Not found");
} تست تنظیم آدرس ESP32
پس از آپلود کد، Serial Monitor را باز کرده و نرخ باود را روی 115200 قرار دهید. سپس دکمه EN را در ESP32 فشار دهید. ممکن است چند لحظه طول بکشد تا به شبکه شما وصل شود، پس از آن پیامهای «mDNS responder started» و «HTTP server started» را نمایش میدهد.

سپس، یک مرورگر وب را راه اندازی کنید و به http://esp32.local/ بروید. ESP32 باید یک صفحه وب با پیام مثل زیر نمایش دهد.

موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود







