در سلسله آموزش های ماژول ESP8266، در بخش نهم به بررسی متد GET جهت ارسال و دریافت داده می پردازیم. در سلسله آموزش های ماژول ESP8266، مطالب را به صورت پایه ای جهت راه اندازی و کار با این ماژول، به صورت صفر تا صد مورد بحث و بررسی قرار داده ایم. با کلیک بر روی این لینک می توانید این سلسله آموزش را دنبال و مطالعه کنید. در این قسمت به بررسی متد GET جهت ارسال و دریافت داده هم به صورت محلی(LOCAL) و هم به صورت اینترنتی می پردازیم. سپس در قسمت بعدی به متد دیگر جهت تبادل داده، متد POST خواهیم پرداخت. متد GET تحت پروتکل HTTP یکی از پرکاربردترین و اساسی ترین روش های تبادل داده در شبکه است. در این آموزش ضمن معرفی و بررسی فرمت آن، به نحوه استفاده در ماژول های ESP، در ادامه این آموزش، با مرجع تخصصی ESP8266 به زبان فارسی، دیجی اسپارک، همراه باشید.
پروتکل HTTP و متد GET
همانطور که در قسمت های پیشین به آن اشاره شد، مفهوم کلاینت و سرور دو مفهوم بسیار کلیدی و پر اهمیت در شبکه به شمار می روند. دراین مفهوم کلاینت مسئول ارسال درخواست و سرور مسئول دریافت درخواست و پاسخ است. در قسمت های پیشین قرارگیری ماژول ESP در مد سرور را مورد بررسی قرار دادیم. حتی توانستیم به کمک قابلیت MDNS، آدرس آی پی ماژول را به نامی ثابت، دقیقا مثل نام های وب سایت ها مانند digispark تبدیل کنیم. بدین ترتیب با تغییر آی پی، نام ثابت خواهد ماند.
جهت ارسال درخواست به سرور، همانطور که در قسمت های پیشین مشاهده کردید، متد درخواست می بایست تعیین گردد. یکی از این متدها، متد GET است. متد GET خود زیر شاخه پروتکل HTTP محسوب می شود. پروتکل HTTP یکی از پروتکل های معروف و کاربردی جهت تبادل داده در شبکه است. به کمک این پروتکل که در کنار پروتکل تبادل فایل FTP، ارسال و دریافت ایمیل SMTP، در شبکه فعال است، می توانیم داده های مختلف همچون دما، رطوبت و… که از حجم پایینی نیز برخوردار هستند را ارسال کنیم. حتی به کمک این پروتکل می توانیم فرامین کاربر را از سرور دریافت و اجرا کنیم. به عنوان مثال می توانیم از راه دور فرمان فعال و یا غیر فعال سازی رله را صادر کنید. در این روش کاربر درخواست تعیین وضعیت رله را بر روی سرور تعیین می کند. کلاینت با اتصال به سرور، ضمن ارسال درخواست، پیغام را از سرور دریافت می کند. این پیغام حاوی وضعیت رله است. جهت اطلاعات بیشتر در این زمینه، می توانید با کلیک بر روی این لینک، پروژه کاربردی آن را مطالعه کنید. البته این پروژه با متد POST، دیگر روش تبادل داده در HTTP است که در آموزش بعدی به ظرح کامل آن می پردازیم. در قسمت بعدی به توابع آردوینو جهت ارسال درخواست GET در حالت شبکه محلی(LOCAL) و اینترنت می پردازیم.
فرمت ارسال داده تحت متد GET
متدهای POST و GET جهت ارسال داده دارای فرمت مخصوص به خود هستند. در این قسمت به متد GET پرداخته و سپس در آموزش بعدی متد POST را بررسی خواهیم کرد. در متد GET جهت ارسال داده به سرور می بایست آدرس سرور که نام و یا آی پی آن را وارد کنیم. پس از این مرحله، آدرس آن بخشی از سرور که داده قرار است به آن ارسال شود را وارد می کنیم. در ادامه این موضوع باید آدرس صفحه ای از سرور که مسئول دریافت داده است وارد گردد. پس از این قسمت متغیر ها تعیین می شوند. برای شروع متغییر ها، از علامت سوال استفاده می شود. پس از علامت سوال متغیرها با مقدار آن تعیین شده و هر متغیر با متغیر دیگر، به کمک علامت & جدا می شود. به مثال زیر دقت کنید.
example.com/data?variable1=15&variable2=18
در مثال فوق عبارت example.com نام سرور است. در ادامه data نام پیج در سرور بوده که مسئول دریافت داده ها و ارسال پاسخ است. پس از آن با علامت ? روند ارسال متغیرها آغاز می شود. در این حالت variable1 متغیر شماره یک و پس از عبارت مساوی مقدار آن قرار گرته است. پس از این مرحله عملگر & این متغیر را از متغیر بعدی جدا کرده تا متغیر variable2 مقدار دهی و به سرور ارسال شود. در قسمت بعدی به معرفی توابع جهت تبادل داده پرداخته و پس از آن با ارائه مثال، موضوع را در پی می گیریم.
توابع ارسال و دریافت داده تحت متد GET
در این قسمت به توابع آردوینو که جهت برقراری تبادل داده تحت متد GET توسعه یافته است، می پردازیم. در ابتدا از آنجاییکه ماژول در حالت کلاینت است، می بایست کتابخانه آن را به شکل زیر به برنامه اضافه کنیم.
#include <ESP8266HTTPClient.h
در ادامه جهت اتصال به سرور و تبادل داده، نیاز داریم تا از کلاس کتابخانه یک نمونه شی ایجاد کنیم. به همین منظور به شیوه زیر عمل می کنیم.
HTTPClient http
پس از ایجاد شی با نام دلخواه، نوبت به فرایند اتصال به سرور، ارسال داده و دریافت پاسخ می رسد. به همین منظور به کمک تابع begin و به فرمت زیر، داده ها را به سرور ارسال می کنیم.
http.begin(example.com/data?variable1=15&variable2=18
در تابع فوق، آدرس و داده ها جهت ارسال تعیین شده و سپس ارتباط برقرار می شود. در ادامه تابع فوق، تابع زیر می بایست جهت تعیین نوع ارتباط، در اینجا متد GET تعیین گردد.
int t = http.GET()
در قطعه کد فوق به کمک تابع GET داده ها ارسال و نتیجه در متغیر t قرار می گیرد.. پس از این مرحله، به کمک تابع زیر می توانیم پاسخ سرور را مشاهده کنیم.
http.getString()
خروجی تابع فوق به صورت رشته و پاسخ دریافتی از سرور را نمایش می دهد. این مورد را در قسمت سرور ماژول ESP، Transparent و MDNS مورد بررسی قررا داده ایم. در این آموزش ها خروجی پیام سرور را بر روی صفحه مرورگر مشاهده کردیم. در اینجا پیغام سرور نیز توسط تابع فوق دریافت شده و در متغیر ذخره می گردد. در نهایت به کمک تابع زیر، ارتباط با سرور قطع می گردد. توجه داشته باشید که پس از هر بار ارسال داده، می بایست ارتباط با سرور را قطع نمایید.
http.end()
در قسمت بعدی ضمن ارائه دو مثال، نحوه تبادل داده در حالت LOCAL و ارتباط اینترنتی را مشاهده خواهیم نمود.
تبادل داده تحت متد GET با سرور
در این قسمت به بررسی متد GET می پردازیم. برای این موضوع، در ابتدا به صورت local، یک ماژول ESP را در حالت سرور و ماژول دیگر را در حالت کلاینت قرار می دهیم. در این حالت به سرور پیغامی ارسال کرده و پاسخ آن را کلاینت در سریال مانیتور چاپ می کند. ابتدا کدهای زیر را بر روی ماژول سرور آپلود کنید.
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
پس از اجرای برنامه فوق، مطابق تصویر زیر می توانید پاسخ دریافتی از سرور را در سریال مانیتور نمایش دهید.
توجه داشته باشید که شما می توانید علاوه بر آی پی آدرس، آدرس نام سرور که به کمک MDNS تعیین کرده اید را قرار داده تا ارتباط شما همواره با یک آدرس ثابت برقرار گردد. در نظر داشته باشید که برای برقراری ارتباط با سرور در اینترنت، مراحل دقیقا همانند قسمت کلاینت بوده و شما با تعیین نام سرور، آدرس و داده ها، می توانید به ارسال داده به سرور و یا دریافت فرمان از آن بپردازید.
لوازم مورد نیاز
جمع بندی
در مجموعه آموزش های ماژول ESP8266، در قسمت نهم به سراغ تبادل داده به کمک متد GET تحت پروتکل HTTP پرداختیم. از آنجاییکه متد GET یکی از مهم ترین و پرکاربردترین روش ها جهت ارسال داده و دریافت پاسخ از سرور به کار می رود، در این آموزش به طور کامل این متد را مورد بررسی قرار دادیم. همانند سایر سلسله آموزش ها، ابتدا به معرفی متد GET و مکانیزم عملکرد آن پرداختیم. پس از آن، توابع کلیدی و کاربردی آردوینو تحت جهت استفاده از این متد را مورد بررسی قرار دادیم. در نهایت با اجرای برنامه، به صورت عملی نحوه کار با این متد در برنامه ها را مشاهده نمودیم. در قسمت بعدی به معرفی متد POST که یکی دیگر از متدهای کلیدی جهت تبادل داده به شمار می رود، خواهیم پرداخت.
چنانچه مطالب این آموزش را گنک یافتید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در مطالب درج شده و یا کدها وجود دارد میتوانید از همین طریق اطلاع رسانی کنید.
سلام
مهندس جان در صورتیکه بخوام از هاست و دامنه برای ارتباط راه دور استفاده کنم آیا این کدها این قابلیت رو دارند؟
در طرف هاست باید چه کدی نوشته شود؟
سلام
بله کاملا امکان پذیر است.
این آموزش را مطالعه نمایید
لینک آموزش ساخت پلتفرم IOT، کلیک کنید
سلام جناب مهندس،
اگه بخوایم توسط برنامه اندروید در بستر اینترنت با esp ارتباط برقرار کنیم و به تبادل داده بپردازیم باید از چه روشی استفاده کنیم؟
سلام
برای این کار نیاز به یک سرور واسط و دانش برنامه نویسی اندروید دارید. یعنی اپلیکیشن به سرور درخواست ارسال نماید و ماژول هم از طرف دیگر به سرور درخواست ارسال نماید. حال سرور به عنوان واسط، اقدام به تبادل داده بین ماژول و اپلیکیشن می کند. پیشنهاد می کنم آموزش زیر را مطالعه کنید:
ساخت پلتفرم اختصاصی IOT، قسمت اول کلیک کنید
ساخت پلتفرم اختصاصی IOT، قسمت دوم کلیک کنید
نمیشه با استفاده از پروتکل mqtt این کار رو انجام داد؟ یعنی سخت افزار و نرم افزار نمیتونن در این پروتکل به ارتباط دو طرفه بپردازن؟
به کمک پروتکل HTTP که در این آموزش هم استفاده شده، تبادل دو طرفه داده وجود دارد. ساختار MQTT کمی متفاوت نسبت به HTTP است، اما روال کاری دقیقا همین است. نیاز به یک سرور به عنوان واسط است.