تحلیل کتابخانه

تحلیل و بررسی کتابخانه ESP8266HTTPClient.h

نوشته شده توسط معین صابری

ماژول های ESP8266 یکی از پرکاربردترین ابزارها در پروژه های بی سیم اینترنت اشیا به شمار می روند. به کمک این ماژول ها شما می توانید تحت تکنولوژی وای فای، به تبادل داده بپردازید. از دیگر نکات برجسته این ماژول به قابلیت برنامه نویسی آن توسط آردوینو اشاره نمود. بدین ترتیب شما بدون نیاز به هیچ پردازنده اضافه، می توانید ارتباطی بی سیم برقرار نمایید. در این آموزش مطابق سلسله آموزش های تحلیل و بررسی کتابخانه ها، به کتابخانه ESP8266HTTPClient.h که کلیدی و کاربردی HTTPClient.h می پردازیم. این کتابخانه یکی از کتابخانه های کلیدی برای پروتکل HTTP است. در ابتدا نکات فنی این کتابخانه را بررسی کرده و در ادامه به معرفی توابع کلیدی و کاربرد می پردازیم. در رابطه با ماژول های ESP8266 سلسله آموزشی به صورت قسمت به قسمت در حال انتشار است که با کلیک بر روی این لینک می توانید این مجموعه آموزش را دنبال و مطالعه کنید. در ادامه این آموزش، با مرجع تخصصی ESP8266 به زبان فارسی، دیجی اسپارک، همراه باشید.

 


الزامات و نکات فنی کتابخانه ESP8266HTTPClient.h


کتابخانه ESP8266HTTPClient.h یکی از کتابخانه های کاربردی جهت استفاده از پروتکل HTTP به منظور تبادل داده است. در این آموزش توابع کلیدی و کاربردی این کتابخانه را بررسی می کنیم. این کتابخانه بر روی کلیه بردهای ESP8266 از سری های مختلف قابلیت اجرا دارد. به عبارت دیگر این کتابخانه با بردهای ESP8266-12E، NODEMCU و… سازگاری دارد.

 

در رابطه با نصب این کتابخانه، توجه داشته باشید با نصب هسته ESP8266 در نرم افزار آردوینو، این کتابخانه نیز نصب خواهد شد. جهت اطلاع از نحوه نصب این کتابخانه، می توانید روی این لینک که آموزش قسمت دوم از سلسله آموزش های ESP8266 است، کلیک کنید.

 


توابع کلیدی کتابخانه ESP8266HTTPClient.h


در این قسمت به تحلیل و بررسی توابع کلیدی کتابخانه می پردازیم. توجه داشته باشید که مشابه سایر آموزش های کتابخانه ای، ورودی های توابع از سمت چپ به راست ورودی شماره ۱، ورودی شماره ۲ و… در نظر گرفته می شوند.

شرح ورودی ها تابع
به کمک این تابع ارتباط با سرور آغاز می شود. ورودی این تابع url آدرس سرور قرار می گیرد. در صورتیکه این ارتبا طبه شکل صحیح صورت نگیرد، خروجی تابع false و در غیر این صورت true خواهد شد. ورودی از نوع رشته bool begin(String url)
این تابع نیز شکل دیگری از فراخوانی تابع begin است. در ورودی اول آدرس هاست جهت ارتباط، ورودی دوم شماره پورت و ورودی سوم مسیر ارسال داده تعیین می شود. ورودی سوم البته اختیاری بوده و مقدار پیشفرض آن “/” است. خروجی این تابع پس از برقراری ارتباط موفقیت آمیز، true خواهد شد. ووردی اول نام هاست

ورودی دوم شماره پورت

ورودی سوم مسیر ارسال داده

  bool begin(String host, uint16_t port, String uri = “/”)
بها فراخوانی این تابع، ارتباط با سرور قطع خواهد شد. بدون ورودی    void end(void)
به کمک این تابع می توانیم ارتباط با سرور را کنترل کنیم. در صورت برقراری ارتباط موفقیت آمیز، خروجی true خواهد بود. بدون ورودی bool connected(void)
به کمک این تابع می توانید ارتباط با سرور را به صورت keep alive نگه دارید. به این منظور ورودی را true قرار دهید.

 

ورودی از نوع بولین setReuse(bool reuse)
به کمک این تابع می توانید ماژول ESP را به سرور لاگین کنید. در صورتیکه سرور شما دارای فرم لاگین جهت احراز هویت است، این تابع بسیار کاربردی است. ورودی اول نام کاربری و ووردی دوم رمز عبور است. ورودی اول از نوع آرایه ای از کاراکترها جهت نام کاربری

ورودی دوم از نوع آرایه ای از کاراکترها برای رمز عبور

void setAuthorization(const char * user, const char * password)
به کمک این تابع می توانید داده ها را تحت متد GET ارسال کنید. برای این مورد URL و داده ها در تابع begin تعیین می شوند.  خروجی این تابع در صورت موفقیت آمیز بودن ارسال، مقداری غیر از ۰ خواهد بود. بدون ورودی int GET()
به کمک این تابع داده ها تحت متد post ارسال می شوند. داده های ارسالی با فرمت ارسال آن در ورودی تابع به صورت رشته قرار خواهند گرفت. خروجی این تابع در صورت موفقیت آمیز بودن ارسال، مقداری غیر از ۰ خواهد بود.

 

ورودی از نوع رشته int POST(const String& payload)
به کمک این تابع می توانید داده ها ار تحت متد put به سرور ارسال کنید. ورودی این تابع داده های ارسالی را در خود جای می دهد. ورودی از نوع رشته   int PUT(const String& payload)
به کمک این تابع می توانید header را به داده های خود اضافه کرده و ارسال کنید. این مورد در متد post بسیار کاربردی است. ورودی اول نام هدر و ورودی دوم مقدار هدر را تعیین می کند.  برای اطلاعات بیشتر روی این لینک کلیک کنید. ورودی اول از نوع رشته

ورودی دوم از نوع رشته

 

void addHeader(const String& name, const String& value)
این تابع پاسخ ارسالی از سوی سرور را در خروجی خود قرار می دهد. بدون ورودی String getString()

 

در ادامه ثوابت زیر مقدار خروجی دریافت شده از توابع post و get را مشاهده می کنید. در این ثوابت عدد دریافت شده از سرور به یک عبارت ثابت نسبت داده شده که شما می توانید به سادگی در برنامه خود از آن ها استفاده کنید.

  • HTTP_CODE_CONTINUE = 100,
  • HTTP_CODE_SWITCHING_PROTOCOLS = 101,
  • HTTP_CODE_PROCESSING = 102,
  • HTTP_CODE_OK = 200,
  • HTTP_CODE_CREATED = 201,
  • HTTP_CODE_ACCEPTED = 202,
  • HTTP_CODE_NON_AUTHORITATIVE_INFORMATION = 203,
  • HTTP_CODE_NO_CONTENT = 204,
  • HTTP_CODE_RESET_CONTENT = 205,
  • HTTP_CODE_PARTIAL_CONTENT = 206,
  • HTTP_CODE_MULTI_STATUS = 207,
  • HTTP_CODE_ALREADY_REPORTED = 208,
  • HTTP_CODE_IM_USED = 226,
  • HTTP_CODE_MULTIPLE_CHOICES = 300,
  • HTTP_CODE_MOVED_PERMANENTLY = 301,
  • HTTP_CODE_FOUND = 302,
  • HTTP_CODE_SEE_OTHER = 303,
  • HTTP_CODE_NOT_MODIFIED = 304,
  • HTTP_CODE_USE_PROXY = 305,
  • HTTP_CODE_TEMPORARY_REDIRECT = 307,
  • HTTP_CODE_PERMANENT_REDIRECT = 308,
  • HTTP_CODE_BAD_REQUEST = 400,
  • HTTP_CODE_UNAUTHORIZED = 401,
  • HTTP_CODE_PAYMENT_REQUIRED = 402,
  • HTTP_CODE_FORBIDDEN = 403,
  • HTTP_CODE_NOT_FOUND = 404,
  • HTTP_CODE_METHOD_NOT_ALLOWED = 405,
  • HTTP_CODE_NOT_ACCEPTABLE = 406,
  • HTTP_CODE_PROXY_AUTHENTICATION_REQUIRED = 407,
  • HTTP_CODE_REQUEST_TIMEOUT = 408,
  • HTTP_CODE_CONFLICT = 409,
  • HTTP_CODE_GONE = 410,
  • HTTP_CODE_LENGTH_REQUIRED = 411,
  • HTTP_CODE_PRECONDITION_FAILED = 412,
  • HTTP_CODE_PAYLOAD_TOO_LARGE = 413,
  • HTTP_CODE_URI_TOO_LONG = 414,
  • HTTP_CODE_UNSUPPORTED_MEDIA_TYPE = 415,
  • HTTP_CODE_RANGE_NOT_SATISFIABLE = 416,
  • HTTP_CODE_EXPECTATION_FAILED = 417,
  • HTTP_CODE_MISDIRECTED_REQUEST = 421,
  • HTTP_CODE_UNPROCESSABLE_ENTITY = 422,
  • HTTP_CODE_LOCKED = 423,
  • HTTP_CODE_FAILED_DEPENDENCY = 424,
  • HTTP_CODE_UPGRADE_REQUIRED = 426,
  • HTTP_CODE_PRECONDITION_REQUIRED = 428,
  • HTTP_CODE_TOO_MANY_REQUESTS = 429,
  • HTTP_CODE_REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
  • HTTP_CODE_INTERNAL_SERVER_ERROR = 500,
  • HTTP_CODE_NOT_IMPLEMENTED = 501,
  • HTTP_CODE_BAD_GATEWAY = 502,
  • HTTP_CODE_SERVICE_UNAVAILABLE = 503,
  • HTTP_CODE_GATEWAY_TIMEOUT = 504,
  • HTTP_CODE_HTTP_VERSION_NOT_SUPPORTED = 505,
  • HTTP_CODE_VARIANT_ALSO_NEGOTIATES = 506,
  • HTTP_CODE_INSUFFICIENT_STORAGE = 507,
  • HTTP_CODE_LOOP_DETECTED = 508,
  • HTTP_CODE_NOT_EXTENDED = 510,
  • HTTP_CODE_NETWORK_AUTHENTICATION_REQUIRED = 511

پس از تحلیل و بررسی توابع کلیدی، نوبت به اجرای نمونه برنامه می رسد. در ادامه یک نمونه برنامه را مشاهده خواهید کرد.

 


نمونه برنامه


همانطورکه در قسمت تحلیل توابع مشاهده کردید، امکان لاگین کردن به سرور برای ESP نیز وجود دارد. فرض کنید که شما سروری طراحی کردید که امکان ارسال داده به آن تنها از طریق نام کاربری و رمز عبور امکان پذیر است. برنامه زیر همین روال را اجرا نموده و ضمن دریافت پاسخ از سرور، آن را در سریال مانیتور نمایش می دهد.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
void setup() {
  Serial.begin(115200);
   WiFi.mode(WIFI_STA);
  WiFi.begin("ssid", "password");
  while (WiFi.status() != WL_CONNECTED) {    //انتظار برای اتصال به مودم
    delay(1000);
    Serial.print("Connecting..");
    Serial.flush();
  }

}

void loop() {
    HTTPClient http;
    http.begin("example.com");  //در اینجا آدرس سرور و url جهت ارسال داده ها باید تعیین گردد.
    http.setAuthorization("user", "pass");  //به کمک این تابع نام کاربری و رمز عبور جهت اتصال به سرورتعین می گردد.
    int httpCode = http.GET();  //ارسال داده به سرور با متد GET
    if (httpCode > 0) {  //در صورتیکه پاسخی از سررو دریافت گردد. اگر پایخ از سرور دریافت گردد، مقدار بیش از ۰ است.
      if (httpCode == HTTP_CODE_OK) {  //در صورتیکه پاسخ از سرور ۲۰۰ یا HTTP_CODE_OK به عنوان ارتباط موفق باشد.
        String payload = http.getString();   //دریافت داده های ارسالی از سرور و ذخیره در رشته
        Serial.println(payload);
        Serial.flush();
    } 
    }
    http.end();  //قطع ارتباط سرور
  delay(10000);
}

 


لوازم متناسب با کتابخانه


انواع بردهای ESP

 


جمع بندی


در این آموزش به تحلیل و بررسی کتابخانه ESP8266HTTPClient.h پرداختیم. این کتابخانه امکان برقراری ارتباط بین ماژول ESP8266 به عنوان کلاینت و سرور(اینترنتی و لوکال) را فراهم می نماید. به کمک این کتابخانه می توانیم به تبادل داده از طریق متدهای POST، GET، PUT و… بپردازیم. این کتابخانه دارای توابع متعدد جهت تبادل داده از طریق پروتکل HTTP بوده که در این آموزش به تحلیل و بررسی این توابع پرداختیم. در نهایت با ارائه یک برنامه، نحوه استفاده از توابع کلیدی را مشاهده نمودیم.

 

چنانچه مطالب این آموزش را گنک یافتید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در مطالب درج شده و یا کدها وجود دارد می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه