در سلسله آموزش های ماژول ESP32، قسمت دهم به MDNS می پردازیم. قابلیت MDNS یکی از قابلیت های کلیدی و کاربردی در استفاده از ماژول های ESP و به طور خاص در خانه های هوشمند است. در آموزش های قبل تر در رابطه با لایه انتقال و نقش آن در خانه های هوشمند صحبت نمودیم. لایه انتقال سبب می شود تا تلفن همراه، رایانه و ماژول های ESP در یک شبکه قرار بگیرند. بدین ترتیب بدون نیاز به ایجاد شبکه جدید و صرفا از طریق یک مودم خانگی، تلفن همراه می تواند به لامپ ها، پریز ها و… دسترسی داشته باشد. اما مشکلی که وجود دارد، تغییر آی پی های دستگاه ها پس از هر بار اتصال است. این مشکل به کمک فناوری MDNS پوشش داده خواهد شد. در این آموزش به این قابلیت می پردازیم. در ادامه با مرجع تخصصی ESP32 به زبان فارسی، دیجی اسپارک همراه باشید.
MDSN تعریف و کاربرد
در این قسمت به بررسی مقهوم MDNS پرداخته و سپس آموزش را در پی می گیریم. پیش از بررسی مفهوم MDNS، می بایست به تعریف و تشریح مفهوم DNS بپردازیم. عبارت DNS که مخفف Domain Name Service است، یک پروسه کلی در شبکه اینترنت جهت تبدیل آدرس آی پی به نام دامنه است. در این روش، آدرس آی پی هر سرور اینترنتی، به نام دامنه آن نگاشت می شود.
بنابراین در سرویس DNS، آدرس آی پی به نام تبدیل می شود. به عنوان مثال، یکی از آی پی آدرس های گوگل برابر با ۱۴۲٫۲۵۰٫۱۸۵٫۴۶ است. طبعا به خاطر سپاری این آدرس مشکل خواهد بود. سرویس DNS با تبدیل آدرس آی پی سرویس گوگل به google.com، به خاطر سپاری آن را ممکن کرده و همواره آدرسی ثابت برای سرویس گوگل فراهم می کند. دقیقا مشابه همین سرویس، سرویس MDNS را خواهیم داشت. این عبارت که مخفف MulticastDNS است، سرویس DNS را در شبکه محلی (LOCAL) اجرا می کند. در این سرویس دستگاه های حاضر در شبکه یک آدرس به صورت نام، همانند google.com دریافت می کنند. ماژول های ESP نیز از این سرویس پشتیبانی کامل می نمایند. در این سروش شما با قرار دادن ماژول در حالت سرور و تعریف آدرس، می توانید آدرس سرور همانند سایت ها تعریف کنید. بدین ترتیب با تغییر آی پی ماژول، آدرس سرور ثابت خواهد ماند. از آنجاییکه شبکه به صورت محلی اداره می شود، بنابراین پسوند آدرس ها .local خواهد بود. به عنوان مثال می توانیم سروری با آدرس esp32.local بسازیم. در ادامه به شرح این موضوع و نحوه ایجاد آدرس دامنه برای سرورها می پردازیم.
اجرای MDNS در ماژول ESP32
در این قسمت به دستورات و توابع مورد نیاز جهت اجرای MDNS می پردازیم، سپس در قسمت بعدی طی یک برنامه، به سرور فرمان ارسال خواهیم نمود. برای این مورد ابتدا می بایست از کتابخانه MDNS به صورت زیر استفاده کنیم.
#include <ESPmDNS.h>
در ادامه به کمک تابع زیر، نام سرور MDNS را فعال می کنیم. در این تابع ورودی نام سرور است. دقت کنید که نام سرور بدون پسوند باشد. پسوند کلیه نام های دامنه در این سیستم، به صورت .local تعیین خواهد شد.
MDNS.begin("esp32")
در تابع فوق نام آدرس ورودی را esp32 تعیین کرده ایم. در ادامه به کمک تابع زیر می بایست مشخصات سرور خود را تعیین کنید. در تابع زیر ورودی اول پروتکل ارتباطی، ورودی دوم سرشاخه پروتکل ارتباطی یعنی tcp یا udp و ورودی سوم شماره پورت را تعیین می کند.
MDNS.addService("http", "tcp", 80);
در تابع فوق ما ورودی اول را به صورت http، ورودی دوم از نوع tcp و ورودی سوم را از نوع پورت ۸۰ تعیین کرده ایم. در قسمت بعدی این موارد را طی یک برنامه کامل مشاهده خواهیم نمود.
اجرای یک نمونه برنامه
پس از بررسی توابع کلیدی MDNS، نوبت به اجرای یک پروژه می رسد. پیش از اجرا، به نکات زیر توجه داشته باشید.
۱- جهت اجرا و تست روی مروگر کروم ویندوز، حتما نرم افزار bonjour نسخه ویندوز را دانلود و نصب کنید. در صورتیکه بر روی تلفن همراه اندرویدی با مشکل مواجه شدید؛ حتما نسخه اندرویدی این نرم افزار را نصب کنید.
۲-جهت اتصال مرورگر رایانه یا تلفن همراه به ماژول ESP، ماژول و تلفن یا رایانه به یک مودم باید متصل شده باشند.
در برنامه زیر، هرگاه داده ای به سرور ارسال شده و این داده تحت متد GET در متغیر data قرار گیرد؛ عبارتی از سمت سرور به کلاینت ارسال می شود. به همین منظور ابتدا برنامه زیر را روی برد ESP32 آپلود کنید.
#include <WiFi.h> //کتابخانه وای فای جهت تعریف ماژول در مد نقطه دسترسی #include <WebServer.h> //تعریف کتابخانه در حالت سرور #include <ESPmDNS.h> WebServer server(80); void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin("SSID", "PASSWORD"); //اطلاعات مودم را جهت اتصال قرار دهید. Serial.print("WATING TO CONNECT TO MODEM"); Serial.flush(); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); } Serial.println("."); Serial.flush(); Serial.print("IP : "); Serial.flush(); Serial.print(WiFi.localIP()); Serial.flush(); while (!MDNS.begin("esp32")) { Serial.println("Error setting up MDNS responder!"); delay (1); } server.on("/", send_data); server.begin(); MDNS.addService("http", "tcp", 80); //تنظیم سروی MDNS روی پرتکل HTTP و TCP و پورت ۸۰ } void loop() { server.handleClient(); } void send_data() { String s = ""; if (server.hasArg("data")) { // در اینجا کنترل می کنیم که داده های ارسالی از سوی کلاینت در متغیر data قرار گرفته باشد. s = server.arg("data"); //به کمک این تابع مقادیر قرار گرفته در رشته data را در رشته s ذخیره می کنیم. server.send(200, "text/html", "data received"); //سرور پاسخ ۲۰۰ به معنای موفقیت آمیز بودن تبادل داده را به کلاینت ارسال می کند. همچنین به کلاینت عبارت data received ارسال می شود. } }
پس از اجرای برنامه، آدرس زیر را در مرورگر تایپ کنید. این آدرس تحت متد GET داده های را به سرور ESP ارسال می کند. صفحه گیرنده در سمت سرور، صفحه اصلی یا “/” است.
http://esp32.local/?data=salam
در نهایت با تایپ عبارت فوق در مرورگر، با تصویر زیر رو به رو خواهید شد.
به کمک فناوری MDNS، هرگاه آی پی دریافتی ماژول از مودم تغییر کند، آدرس وب سرور همواره ثابت باقی خواهد ماند. در این صورت نیازی به اطلاع از آی پی جدید و ایجاد ساختارهای پیچیده جهت ارتباط تلفن همراه با وسایل برقی در خانه هوشمند؛ نیست!
لوازم متناسب با آموزش
جمع بندی
در سلسله آموزش های ماژول ESP32، قسمت دهم به فناوری MDNS، یکی از کلیدی ترین و پرکاربردترین فناوری های ارتباطی در شبکه پرداختیم. به کمک این فناوری، ماژول های ESP32 در حالت وب سرور، نام دامنه به خود اختصاص می دهند. بدین ترتیب با هر بار تغییر آی پی ماژول ها، نام دامنه ثابت می ماند. این قابلیت در خانه های هوشمند بسیار کلیدی و کاربردی خواهد بود. چراکه با هر بار تغییر آی پی ماژول ها با خاموش و روشن شدن مودم ها، نام دامنه ثابت باقی مانده و شبکه پایدار باقی خواهد ماند. در این آموزش ماژول ESP با اتصال به مودم خانگی، آی پی دریافت می نماید. سپس ماژول در حالت سرور قرار می گیرد. از طرف دیگر، رایانه و یا تلفن همراه که آن هم به مودم خانگی متصل شده، از طریق لایه انتقال به ماژول متصل می شود. در اینجا نیاز به وارد کردن آی پی آدرس سرور جهت تبادل داده با آن نبوده و تنها با درج نام آن با پسوند local. در مرورگر، ارتباط برقرار خواهد شد.
لطفا در انتهای همین پست، به صورت ثبت نظر سوالات خود را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
ادامه مطالب این آموزش
راه اندازی و کار با ماژول ESP32 قسمت یازدهم: ESP-Cam دوربین و کارت SD
راه اندازی و کار با برد ESP32 قسمت دوازدهم: راه اندازی بلوتوث Bluetooth
سلام تازه با سایتتون اشنا شدم بسیار خوب و روان توضیح داده بودبد
درود و سپاس خیلی برام مفید بود
سلام و متشکرم از لطف شما
سلام
یعنی برای ارسال دستورات از طریق وایفا از راه دور گوشی و ماژول باید به یک مودم وصل باشند؟
پس اینکه از راه دور نمیشه
سلام
بله باید به یک مودم متصل شوند.
درست است، این روش برای ارتباط LOCAL کاربرد دارد، برای کنترل از راه دور آموزش زیر را مطالعه کنید:
https://digispark.ir/simple-iot-platform-with-esp8266-and-cloud-server/