در سلسله آموزش های ماژول ESP32 قسمت نهم به اجرای متد POST، یکی از کلیدی ترین و پرکاربردترین متدهای جا به جایی دیتا در پروتکل HTTP می پردازیم. متد POST ساختاری شبیه به متد GET دارد. اما هنگام ارسال داده ها، هدر باید تعیین گردد. هدرها مشخص کننده نحوه انتقال مقادیر داده ای هستند. مطابق سایر آموزش ها، ابتدا به معرفی این متد و سپس دستورات آن در آردوینو پرداخته می شود. در نهایت با ارائه یک برنامه کامل، نحوه تبادل داده در این متد مورد بررسی قرار خواهد گرفت. در ادامه با مرجع تخصصی ESP32 به زبان فارسی، دیجی اسپارک همراه باشید.
متد POST تعریف و کاربرد
متد POST یکی از مهم ترین و پرکاربردترین متدها جهت تبادل داده در پروتکل HTTP است. این متد که عملکردی بسیار شبیه به متد GET دارد، قادر به ارسال داده ها به سرور و دریافت پاسخ از سرور است. در مروگرها، متد POST بر خلاف متد GET، آدرس مسیر ارسال داده ها را از دید کاربر پنهان می کند. بدین ترتیب امنیت تبادل داده افزایش می یابد. البته این موضوع در پردازنده های ESP که بحث مرورگر مطرح نیست، موضوعیت ندارد. در اینجا، زمان کار با سرورهای اینترنتی و تبادل داده در فضای وب، متد POST اهمیتی بیش از پیش پیدا می کند. با توجه به اینکه معمولا سرورها دارای حافظه کش هستند، بنابراین استفاده از متد POST بسیار حائز اهمیت است. این متد داده ای را کش نمی کند و در ارتباط بین سرور و ماژول ESP، بسیار کاربردی است. جهت ارسال و دریافت داده در متد POST، می بایست همانند متد GET آدرس سرور، شماره پورت و آدرس صفحه ای که مسئول دریافت داده است تعیین شود.
مطابق تصویر فوق می توانیم داده ها را به سرور ارسال کرده و همانند متد GET، از سرور پاسخ دریافت کنیم. این پاسخ می تواند یک پیام متنی، فرمان خاموش/روشن شدن رله و …. باشد. در متد POST بر خلاف متد GET، از آنجاییکه داده ها در سمت سرور کش نمی شوند، لذا همواره بروزترین داده ها از سررور دریافت می گردد. در این آموزش به شرح توابع و دستورات متد POST پرداخته و سپس ضمن یک مثال عملی، نحوه کار با آن را مشاهده می کنیم.
توابع آردوینو متد POST
همانطور که پیشتر نیز گفته شد، استفاده از متد POST روندی کاملا مشابه متد GET دارد. در اینجا نیز می بایست آدرس، شماره پورت و مسیر صفحه ای که قرار به ارسال داده است، تعیین شود. برای این منظور ابتدا باید کتابخانه کلاینت را فراخوانی نماییم.
#include <HTTPClient.h>
پس از اضافه نمودن کتابخانه، می بایست ارسال و دریافت داده را با تعریف یک شی از کلاس کتابخانه HTTPClient به صورت زیر شروع کنیم.
HTTPClient http
پس از این مرحله به کمک تابع begin، نام سرور و آدرس آن را تعیین می کنیم. این مورد مشابه متد GET اما با کمی تفاوت صورت می گیرد. فرض کنید آدرس پیجی از سرور که قرار به ارسال داده است، /data باشد. از طرفی دیگر آدرس سرور را example.com فرض کنید. در این حالت، تابع begin به صورت زیر تعیین ورودی می گردد.
http.begin("http://example.com/data ")
در ادامه این تابع، یک ویژگی بیشتر نسبت به متد GET می بایست تنظیم شود. در این قسمت می بایست هدر تنظیم گردد. هدرها مجموعه داده هایی هستند که علاوه بر داده اصلی، به سرور ارسال می شوند. سرور با دریافت هدرها، عملیات لازم را بر روی داده ها انجام می دهد. برای اطلاعات بیشتر در این زمینه، می توانید روی این لینک کلیک نمایید. در ادامه، به کمک تابع addHeader هدر و نوع آن به شکل زیر تعیین می گردند.
http.addHeader("Content-Type", "application/x-www-form-urlencoded")
int httpCode = http.POST(“Temp=26”)
در رابطه با ارسال داده ها تحت متد POST دقت داشته باشید که فرمت ارسال، به شکل زیر خواهد بود.
Variable1=value1&Variable2=value2
در ادامه به کمک تابع زیر می توانیم پاسخ های ارسالی از سوی سرور را دریافت کنیم.
http.getString()
توجه داشته باشید که تابع فوق خروجی از نوع رشته داشته و پاسخ دریافتی از سرور را درون رشته قرار می دهد. در ادامه به ارائه مثالی از این متد جهت تبادل داده در اینترنت می پردازیم.
نمونه برنامه
در این قسمت به ارائه یک نمونه برنامه می پردازیم. در این برنامه ماژول ESP به صورت STA تعریف شده تا به یک مودم خانگی متصل شود. پس از اتصال و دریافت آی پی، به سروری با آدرس example.com متصل شده و داده ها را ارسال می نماید.
#include <WiFi.h> #include <HTTPClient.h> void setup() { Serial.begin(115200); WiFi.begin("SSID", "PASSWORD"); Serial.println("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("IP: "); Serial.println(WiFi.localIP()); } void loop() { HTTPClient http; http.begin("http://example.com/data"); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpResponseCode = http.POST("temp=26"); String payload = http.getString(); Serial.print("SERVER RSPONSE:"); Serial.println(payload); http.end(); }
در برنامه فوق، ماژول ESP32 به مودم خانگی متصل می گردد. سپس داده ها را تحت متد POST به سررو ارسال کرده و پاسخ آن را دریافت می نماید. در سمت سرور نیز باید برنامه ای جهت دریافت و ارسال پاسخ به ماژول ESP نوشته شده باشد. جهت اطلاعات بیشتر در رابطه با برنامه نویسی وب می توانید روی این لینک کلیک کنید.
لوازم متناسب با آموزش
جمع بندی
در سلسله آموزش های ماژول ESP32 قسمت نهم به بررسی متد POST پرداختیم. متد POST یکی از مهم ترین متدهای پروتکل HTTP جهت تبادل داده در شبکه به شمار می رود. این متد ساختاری شبیه به GET داشته، اما هنگام ارسال داده می بایست هدر نیز جهت ارسال داده تعیین شود. در این آموزش همانند آموزش های پیشین به بررسی متد POST پرداختیم. سپس در ادامه توابع کلیدی و کاربردی مورد بررسی قرار گرفت. در نهایت با ارائه مثالی، نحوه ارسال داده به یک سرور اینترنتی مورد بررسی قرار گرفت.
در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
ادامه مطالب این آموزش
راه اندازی و کار با برد ESP32 بخش دوم: نصب هسته و راه اندازی اولیه
راه اندازی و کار با برد ESP32 بخش سوم: معرفی پایه ها و بررسی سخت افزاری
راه اندازی و کار برد ESP32 قسمت چهارم: مد ایستگاهی STATION دریافت IP
راه اندازی و کار با برد ESP32 بخش پنجم: مد نقطه دسترسی AP
راه اندازی و کار با برد ESP32 بخش ششم: مد سرور Server
راه اندازی و کار با ESP32 بخش هفتم: لایه انتقال و ارتباط با موبایل توسط مودم
راه اندازی و کار با برد ESP32 بخش هشتم: اجرای متد GET
راه اندازی و کاری با ماژول ESP32 قسمت دهم: شناخت و راه اندازی MDNS
راه اندازی و کار با ماژول ESP32 قسمت یازدهم: ESP-Cam دوربین و کارت SD
راه اندازی و کار با برد ESP32 قسمت دوازدهم: راه اندازی بلوتوث Bluetooth